事務的四個特性
1、原子性(atomicity)原子性是指整個資料庫事務是不可分割的工作單位
2、一致性(consistency)一致性指事務將資料庫從一種狀態轉變為下一種一致的狀態。在事務開始之前和事務結束之後,資料庫的完整性條件約束沒有被破壞。
3、隔離性(isolation)一個事務的影響在該事務提交之前對其他事務都不可見------這通過鎖來實現
4、持久性(durability)事務一旦提交,其結果就是永久性的
事務的實現
隔離性通過Mysql InnoDB鎖就可以實現,
原子性、一致性、持久性通過資料庫的redo和undo來完成
隱式提交的SQL語句
以下這些SQL語句會產生一個隱式的提交操作,即執行完這些語句後,會有一個隱式的COMMIT操作。
1、DDL語句:ALTER DATABASE...UPGRADE DATA DIRECTORY NAME、。。。。
2、用來隱式的修改mysql架構的操作:CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD。
3、管理語句:ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE 、REPAIR TABLE。
對於事務操作的統計
QPS:question per second,每秒請求數
TPS:transaction per second,每秒交易處理的能力
計算TPS的方法是(com_commit+com_rollback)/time,用這種方法的前提是,所有的事務必須都是顯式提交的。
事務的隔離等級
SQL標準定義的四個隔離等級為:
1、READ UNCOMMITED
2、READ COMMITED
3、REPEATABLE READ
4、SERIALIZABLE
查看當前會話的交易隔離等級
查看全域交易隔離等級
在SERIALIZBLE的交易隔離等級,InnoDB儲存引擎會對每個SELECT語句後自動加上LOCK IN SHARE MODE,即給每個讀取操作加一個共用鎖定,因此在這個交易隔離等級下,讀佔用鎖了,一致性的非鎖定讀不再予以支援,一般不再本地事務中使用SERIALIZBLE的隔離等級,SERIALIZABLE的交易隔離等級主要用於InnoDB儲存引擎的分散式交易。
在READ COMMITED的交易隔離等級下,除了唯一性的約束檢查以及外鍵約束的檢查需要Gap Lock,InnoDB儲存引擎不會使用Gap Lock的鎖演算法。
分散式交易
通過XA事務可以來支援分散式交易的實現,在使用分散式交易時,InnoDB儲存引擎必須使用SERIALIZABLE的隔離等級,查看是否啟用了XA事務支援(預設開啟)
在預設配置下,mysql資料庫總是自動認可的。