事務控制語言 TCL

2021-10-02 00:21:08 字數 1604 閱讀 2428

概念:

乙個或一組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 乙個事務執行的過程中...