數據庫事務(簡稱:事務)是數據庫管理系統執行過程中的一個邏輯單位,由一個有限的數據庫操作序列構成。
並非任意的對數據庫的操作序列都是數據庫事務。數據庫事務擁有以下四個特性,習慣上被稱之為ACID特性。
-
原子性(Atomicity):事務作為一個整體被執行,包含在其中的對數據庫的操作要么全部被執行,要么都不執行。
-
一致性(Consistency):事務應確保數據庫的狀態從一個一致狀態轉變為另一個一致狀態。 一致狀態的含義是數據庫中的數據應滿足完整性約束。
-
隔離性(Isolation):多個事務並發執行時,一個事務的執行不應影響其他事務的執行。
-
持久性(Durability):已被提交的事務對數據庫的修改應該永久保存在數據庫中。
簡單模擬實現mysql事務處理操作:
public int updateUser2(User user,Map<String, Object> param) { user.setLoginName("zhangyy"); user = getSqlSession().selectOne("getByLoginName",user); User user2 = new User(); user2.setLoginName("lizg"); user2 = getSqlSession().selectOne("getByLoginName",user2); int num = 0; Connection connection = null; try { connection = getSqlSession().getConnection();//獲取數據庫連接(自己實現的抽象類) connection.setAutoCommit(false);//JDBC中默認是true,自動提交事務 user.setRanking(-100); getSqlSession().update("updateUser",user);//模擬轉賬支付100 user2.setRanking(100); user2.setLoginName(null);//修改sql語句使第2條語句出現異常 getSqlSession().update("updateUser",user2);//模擬轉賬收款100 connection.commit();//提交事務 } catch (Exception e) { try { connection.rollback();//回滾,出現異常后兩條數據都執行不成功 } catch (SQLException e1) { } }finally { if (connection != null) { try { connection.close(); } catch (SQLException e) { } } } return num; }