mysql事務怎麼玩 mysql事務

2021-10-17 20:35:39 字數 3041 閱讀 7162

定義

transaction

事務:乙個最小的不可再分的工作單元;通常乙個事務對應乙個完整的業務(例如銀行賬戶轉賬業務,該業務就是乙個最小的工作單元)

乙個完整的業務需要批量的dml(insert、update、delete)語句共同聯合完成

事務只和dml語句有關,或者說dml語句才有事務。這個和業務邏輯有關,業務邏輯不同,dml語句的個數不同

事務四大特徵(acid)

原子性(a):事務是最小單位,不可再分

一致性(c):事務要求所有的dml語句操作的時候,必須保證同時成功或者同時失敗

隔離性(i):事務a和事務b之間具有隔離性

永續性(d):是事務的保證,事務終結的標誌(記憶體的資料持久到硬碟檔案中)

關於事務的一些術語

開啟事務:start transaction

事務結束:end transaction

提交事務:commit transaction

回滾事務:rollback transaction

和事務相關的兩條重要的sql語句(tcl)

提交操作(事務成功)

start transaction

dml語句

commit

回滾操作(事務失敗)

start transaction

dml語句

rollback

事務開啟的標誌?事務結束的標誌?

開啟標誌:

任何一條dml語句(insert、update、delete)執行,標誌事務的開啟

結束標誌(提交或者回滾):

提交:成功的結束,將所有的dml語句操作歷史記錄和底層硬碟資料來一次同步

回滾:失敗的結束,將所有的dml語句操作歷史記錄全部清空

事物與資料庫底層資料

在事物進行過程中,未結束之前,dml語句是不會更改底層資料,只是將歷史操作記錄一下,在記憶體中完成記錄。只有在事物結束的時候,而且是成功的結束的時候,才會修改底層硬碟檔案中的資料

事務四大特性之一————隔離性(isolation)

事物a和事物b之間具有一定的隔離性

隔離性有隔離級別(4個)

讀未提交:read uncommitted

事物a和事物b,事物a未提交的資料,事物b可以讀取到 - 這裡讀取到的資料叫做「髒資料」 - 這種隔離級別最低,這種級別一般是在理論上存在,資料庫隔離級別一般都高於該級別

讀已提交:read committed

事物a和事物b,事物a提交的資料,事物b才能讀取到 - 這種隔離級別高於讀未提交 - 換句話說,對方事物提交之後的資料,我當前事物才能讀取到 - 這種級別可以避免「髒資料」 - 這種隔離級別會導致「不可重複讀取」 - oracle預設隔離級別

可重複讀:repeatable read

- 事務a和事務b,事務a提交之後的資料,事務b讀取不到

- 事務b是可重複讀取資料

- 這種隔離級別高於讀已提交

- 換句話說,對方提交之後的資料,我還是讀取不到

- 這種隔離級別可以避免「不可重複讀取」,達到可重複讀取

- 比如1點和2點讀到資料是同乙個

- mysql預設級別

- 雖然可以達到可重複讀取,但是會導致「幻像讀」

序列化:serializable

- 事務a和事務b,事務a在運算元據庫時,事務b只能排隊等待 - 這種隔離級別很少使用,吞吐量太低,使用者體驗差 - 這種級別可以避免「幻像讀」,每一次讀取的都是資料庫中真實存在資料,事務a與事務b序列,而不併發

設定事務隔離級別

方式一可以在my.ini檔案中使用transaction-isolation選項來設定伺服器的預設事務隔離級別。

該選項值可以是:

– read-uncommitted

– read-committed

– repeatable-read

– serializable

例如:[mysqld]

transaction-isolation = read-committed

方式二通過命令動態設定隔離級別

• 隔離級別也可以在執行的伺服器中動態設定,應使用set transaction isolation level語句。

• 其語法模式為:

set [global | session] transaction isolation level 其中的可以是:

– read uncommitted

– read committed

– repeatable read

– serializable

例如: set transaction isolation level repeatable read;

隔離級別的作用範圍

事務隔離級別的作用範圍分為兩種:

– 全域性級:對所有的會話有效

– 會話級:只對當前的會話有效

• 例如,設定會話級隔離級別為read committed :

mysql>set transaction isolation level read committed;

或:mysql>set session transaction isolation level read committed;

• 設定全域性級隔離級別為read committed :

mysql> set global transaction isolation level read committed;

檢視隔離級別

事務隔離級別的作用範圍分為兩種:

– 全域性級:對所有的會話有效

– 會話級:只對當前的會話有效

• 例如,設定會話級隔離級別為read committed :

mysql>set transaction isolation level read committed;

或:mysql>set session transaction isolation level read committed;

• 設定全域性級隔離級別為read committed :

mysql> set global transaction isolation level read committed;

Mysql是怎麼實現事務的

mysql的innodb儲存引擎是通過事務來保證資料的一致性的 資料庫事務通常包含了乙個序列的對資料庫的讀 寫操作包含有以下兩個目的 為資料庫操作序列提供了乙個從失敗中恢復到正常狀態的方法,同時提供了資料庫即使再異常狀態下仍能保持一致性的方法 當多個應用程式再併發訪問資料庫時,可以再這些應用程式之間...

mysql 事務 數量 Mysql 事務

什麼是事務 不可分割的操作,比如乙個事務要修改 a 表和刪除 b 表的資料兩個操作,這兩個操作都成功,這個事務才 commit,不然 rollback 每條 sql 語句都是乙個事務 只對 dml 生效 caid 一致性 consistency 讓資料保持一定程度的合理性,比如使用者加入購物車,購物...

mysql事務機制 Mysql事務機制

mysql事務是指將資料庫從一種一致性狀態轉到另一種一致性狀態 mysql事務具有acid特性 原子性 atomicity 事務中的所有操作,要麼全部執行,要麼都不執行 一致性 consistency 事務開始和結束後,資料庫的完整性不會被破壞 隔離性 isolation 事務之間互不影響。事務的隔...