TCL: 事務控制語言
事務:一個或一組sql語句組成一個執行單元,這個執行單元要麼全部執行,要麼全部不執行;如果單元中某個sql語句執行失敗或產生錯誤,整個單元將會回滾(回到事務開始以前的狀態)
案例:轉賬
在mysql中的數據用各種不同的技術存儲在文件(或內存)中
在mysql中用的最多的存儲引擎有:innodb, myisam,memory等。期中innodb支持事務,而myisam,memory不支持事務
事務的ACID屬性:
1.原子性:事務是一個不可分割的工作單位
2.一致性:事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態
3.隔離性:一個事務的執行不能被其他事務干擾
4.持久性:事務一旦提交,數據就被永久改變
事務的創建
- 隱式事務:事務沒有明顯的開啓和結束的標記 比如
insert,update,delete語句
- 顯式事務:事務具有明顯的開啓和結束標記
前提:必須先設置自動提交功能爲禁用
SET AUTOCOMMIT=0;
開啓事務語句
結束事務語句
COMMIT; 提交
ROLLBACK; 回滾
數據庫併發中出現的問題:
髒讀(沒有提交的字段),不可重複讀(更新了字段),幻讀(插入)
mysql支持4中事務隔離級別:
read uncommited
(髒讀,不可重複讀), read commited
(解決了髒讀), repeatable read
(解決了髒讀和不可重複讀,默認), serialization
(都解決了)
查看隔離級別
SELECT @@tx_isolation;
設置隔離級別
SET GLOBAL TRANSACTION ISOLATION LEVEL 隔離級別;