MySQL 事務控制語句 TCL

2021-10-13 22:01:42 字數 2099 閱讀 2326

乙個或者一組 sql 語句組成乙個執行單元,這個執行單元要麼全部執行,要麼全部都不執行,在這個單元中每個 sql 語句都是相互依賴的。整個單元作為乙個不可分割的整體,如果單元中的某條 sql 語句一旦執行失敗或者產生錯誤,整個單元將會回滾。所有受影響的資料將返回到事務開始前的狀態,如果單元中的所有 sql 語句均執行成功,則事務被順利執行。

一、原子性 (atomicity)

原子性指的是事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。

二、一致性 (consistency)

事務必須使資料庫從乙個一致性狀態變換到另外乙個一致性狀態。比如,轉賬前和轉賬後兩個賬戶的金額是一致性狀態。

三、隔離性 (isolation)

事務的隔離性是指乙個事務的執行不能被其他事務干擾,即乙個事務內部的操作及使用的資料對併發的其他事務是隔離的,併發執行的各個事務之間不能相互干擾。

四、永續性 (durability)

永續性是指乙個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來的其他操作和資料庫故障不應該對其有任何影響。

一、隱式事務

事務沒有明顯的開啟和結束的標記,比如 select、insert、update、delete 語句,只要執行這些語句,就相當於開啟了乙個事務,執行完畢後,事務就提交結束了,一條語句就是乙個事務。

二、顯式事務

事務具有明顯的開啟和結束的標記,前提必須設定自動提交功能為禁用 (set autocommit=0)。

書寫步驟:

# 步驟1:開啟事務

set autocommit =0;

start

transaction

;# 步驟2:編寫事務中的 sql 語句 (select、insert、update、delete)

# 步驟3:結束事務 (提交和回滾二選一)

commit

;# 提交事務

rollback

;# 回滾事務

一、併發問題

對於同時執行的多個事務,當這些事務訪問資料中相同的資料時,如果沒有採取必要的隔離機制,就會導致各種併發問題:

髒讀:對於兩個事務,t1 和 t2,t1 讀取了已經被 t2 更新但還沒有被提交但字段,之後如果 t2 回滾,t1 讀取但內容就是臨時且無效的。(被打錢看見餘額後對方又撤回了)

不可重複讀:對於兩個事務 t1 和 t2,t1 讀取了乙個字段,然後 t2 更新了該字段,之後 t1 再次讀取同乙個字段,值就不同了。(重在更新)

幻讀:對於兩個事務 t1 和 t2,t1 從乙個表中讀取了乙個字段,然後 t2 在該表中插入了一些新的資料,如果 t1 再次讀取同乙個表就會多出幾行記錄。(重在增刪)

二、資料庫事務的隔離性

資料庫系統必須具有隔離併發執行各個事務的能力,使它們不會相互影響,避免各種併發問題。

三、隔離級別

乙個事務與其他事務的隔離程度稱為隔離級別。資料庫規定了多種事務隔離級別,不同隔離級別對應不同的干擾程度,隔離級別越高,資料一致性就越好,但併發性越弱。

隔離級別

描述read uncommitted(讀未提交資料)

允許事務讀取未被其他事務提交的變更,髒讀、不可重複讀和幻讀的問題都會出現

read commited(讀已提交資料)

只允許事務讀取已經被其他事務提交的變更,可以避免髒讀,但是不可重複讀和幻讀問題仍然可能出現

repeatable read(可重複讀)

確保事務可以多次從乙個欄位中讀取相同的值,在這個事務持續期間,禁止其他事務對這個字段進行更新,可以避免髒讀和不可重複讀,但是幻讀的問題仍然存在

serializable(序列化)

確保事務可以從乙個表中讀取相同的行,在這個事務持續期間,禁止其他事務對該錶執行更新、刪除、插入操作,所有併發問題都可以避免,但是效能十分低下

mysql 支援上訴四種隔離級別,預設情況下為repeatable read

事務控制語言 TCL

概念 乙個或一組sql語句組成的執行單元,執行單元所有sql語句要麼全執行,要麼全不執行。栗子 張三給李四轉賬。張三 賬戶1000元。李四 賬戶1000元。update 表 set 張三賬戶 500 where name 張三 資料庫中途異常.update 表 set 李四賬戶 1500 where...

mysql基礎 事務TCL

2 事務的建立 2 事務的隔離級別 事務 乙個或一組sql語句組成乙個執行單元,這個執行單元要麼全部執行,要麼全部不執行。事務由單獨單元的 個或多個sql語句組成,在這個單元中,每個mysql語句是相互依賴的。而整個單獨單元作為乙個不可分割的整體,如果單元中某條sql語句一且執行失敗或產生錯誤,整個...

07 TCL 事務控制語言

定義 乙個事務是乙個完整的業務邏輯單元,不可再分。例如 銀行轉賬,從a賬戶向b賬戶轉賬1000,需要執行兩條update語句 update t act set balance balance 1000 where actno act 001 update t act set balance bala...