原子性(Atomicity) 一個事務不可再分割,要麼都執行要麼都不執行
一致性(Consistency) 一個事務執行會使數據從一個一致狀態切換到另一個一致狀態
隔離性(Isolation) 一個事務的執行不受其餘事務的干擾
持久性(Durability) 一個事務一旦提交,則會永久的改變數據庫的數據
髒讀:讀到未提交更新數據,就是讀到另外一個事務未提交數據,就是髒數據
不可重複讀:對同一記錄兩次讀取不一致,由於另外一事務對該記錄作了修改
幻讀:對同一張表的兩次查詢不一致,由於另外一事務插入了一條數據
隔離級別 髒讀 不可重複讀 幻讀 未提交讀(READ-UNCOMMITTED) √ √ √ 已提交讀(READ-COMMITTED) × √ √ 可重複讀(REPEATABLE-READ) × × √ 可串行化(SERIALIZABLE) × × × Oracle 支持的 2 種事務隔離級別: READ-COMMITTED, SERIALIZABLE。 Oracle 默認的事務隔離級別爲: READ-COMMITTED Mysql 支持 4 種事務隔離級別. Mysql 默認的事務隔離級別爲: REPEATABLE-READ 查看隔離級別 SELECT @@[session.]tx_isolation; # 查看會話隔離級別 SELECT @@global.tx_isolation; # 查看全局隔離級別 設置隔離級別 SET [SESSION] TRANSACTION ISOLATION LEVEL 隔離級別; # 設置會話隔離級別 SET GLOBAL TRANSACTION ISOLATION LEVEL 隔離級別; # 設置全局隔離級別
事務提交 SET autocommit = 0; # 關閉自動提交 START TRANSACTION; # 開啓事務 INSERT INTO user(username, password) VALUES ('張三', '123'); # 執行SQL1 INSERT INTO user(username, password) VALUES ('李四', '456'); # 執行SQL2 COMMIT; # 提交全部 SET autocommit = 1; # 開啓自動提交 事務回滾 1、回滾全部 SET autocommit = 0; # 關閉自動提交 START TRANSACTION; # 開啓事務 INSERT INTO user(username, password) VALUES ('張三', '123'); # 執行SQL1 INSERT INTO user(username, password) VALUES ('李四', '456'); # 執行SQL2 ROLLBACK; # 回滾全部 SET autocommit = 1; # 開啓自動提交 2、回滾至保存點 SET autocommit = 0; # 關閉自動提交 START TRANSACTION; # 開啓事務 INSERT INTO user(username, password) VALUES ('張三', '123'); # 執行SQL1 SAVEPOINT a; # 設置保存點 INSERT INTO user(username, password) VALUES ('李四', '456'); # 執行SQL2 ROLLBACK TO a; # 回滾至保存點 SET autocommit = 1; # 開啓自動提交