概念:
乙個或一組sql語句組成的執行單元,執行單元所有sql語句要麼全執行,要麼全不執行。
栗子:
張三給李四轉賬。
張三:賬戶1000元。 李四:賬戶1000元。
update 表 set '張三賬戶' = 500 where name = '張三';
資料庫中途異常...
update 表 set '李四賬戶' = 1500 where name = '李四';
(兩條語句組成乙個執行單元,中途如果出現意外,結果顯然不是想要的。)
每條語句相互依賴,作為乙個不可分割的整體,如果發生意外回滾至最初狀態。
事務的特點:
①. 原子性: 事務是不可分割的乙個單位,事務中操作要麼都執行,要麼都不執行。
②. 一致性: 事務必須從乙個一致性狀態到另乙個一致性狀態。
(轉賬栗子中轉賬前是2000元,轉賬後依然是2000元。)
③. 隔離性: 乙個事務執行不被另乙個事務干擾。(隔離級別控制)
④. 永續性: 乙個事務一旦被提交,對資料庫資料是永久性的。
(刪除操作,無法恢復,只能重新建立。)
事務的建立和分類:
①.隱式事務:
事務沒有明顯開啟結束標記。
(如:insert、update、delete語句。autocommit自動提交預設開啟狀態。)
②.顯式事務:
事務具有明顯開啟結束標記。
(設定自動提交為off ,只對當前事務有效)。
栗子:
⒈設定自動提交狀態。
set autocommit =0;
⒉編寫需要的sql語句。
(select、delete、update、insert)
⒊結束事務。
commit;(提交事務) 或 rollback;(回滾事務)
事務併發:
同時執行的多個事務,當這些事務訪問資料庫相同資料時,
如果沒有採用隔離機制,就會出現併發問題。
出現的問題:
①. 髒讀: 事務1對資料庫資料進行更新,但沒有提交,
事務2讀取相同資料,此時如果事務1回滾,事務2讀取的資料就是臨時且無效的資料。
②. 不可重複讀: 事務1讀取資料庫資料之後,沒有提交,
此時事務2對相同資料進行更新,事務1再次讀取資料時資料變了。
③. 幻讀: 事務1讀取資料庫資料之後,沒有提交,
此時事務2插入新的資料,事務1再次讀取資料時多出一些資料。
事務的隔離級別:
①. read uncommitted : 髒讀,不可重複讀,幻讀都會出現。
②. read committed : 避免髒讀,會出現不可重複讀和幻讀。
③. repeatable read : 避免髒讀和不可重複讀,會出現幻讀。
④. serializable : 都會避免。
命令:
⒈檢視隔離級別:
select tx_@@isolation;
⒉設定隔離級別:
set session/global transaction isolation level 隔離級別;
mysql預設第三種隔離級別,oracle預設第二種。 07 TCL 事務控制語言
定義 乙個事務是乙個完整的業務邏輯單元,不可再分。例如 銀行轉賬,從a賬戶向b賬戶轉賬1000,需要執行兩條update語句 update t act set balance balance 1000 where actno act 001 update t act set balance bala...
MySQL 事務控制語句 TCL
乙個或者一組 sql 語句組成乙個執行單元,這個執行單元要麼全部執行,要麼全部都不執行,在這個單元中每個 sql 語句都是相互依賴的。整個單元作為乙個不可分割的整體,如果單元中的某條 sql 語句一旦執行失敗或者產生錯誤,整個單元將會回滾。所有受影響的資料將返回到事務開始前的狀態,如果單元中的所有 ...
事務處理語言(TCL)
指作為單個邏輯工作單元執行的一條或多條sql操作,要麼完全的執行,要麼完全的不執行。原子性 atomicity 事務的多條sql語句是乙個不可分割的完整的邏輯單元,要麼全做,要麼都不做。一致性 consistency 事務執行前後資料的完整性保持一致。隔離性 isolation 乙個事務執行的過程中...