事務的四個特性
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數據庫總是自動提交的。