MySQL 事務操作詳解 含MySQL引擎篇

2021-10-16 16:56:54 字數 3374 閱讀 2955

首先說明下,如果我們只談mysql事務 操作,而不談mysql的引擎,那屬於無知和耍流氓,接下來我們先來談談mysql引擎。

mysql常見引擎

innodb儲存引擎

innodb是事務型資料庫的首選引擎,支援事務安全表(acid),支援行鎖定和外來鍵,同時innodb儲存引擎是mysql的預設引擎

myisam儲存引擎

myisam基於isam儲存引擎,並對其進行擴充套件。它是在web、資料倉儲和其他應用環境下最常使用的儲存引擎之一。myisam擁有較高的插入、查詢速度,但不支援事物操作

memory儲存引擎

memory儲存引擎將表中的資料儲存到記憶體中,未查詢和引用其他表資料提供快速訪問,但是不支援事務操作

mysql常用引擎的具體對比

結論:通過上圖對比得知,事務操作只存在於innodb儲存引擎下,其他資料庫引擎是不支援mysql的事務操作的。

ok,基於以上結論我們接著聊事務。

事務操作只存在於innodb儲存引擎下

接下來正式進入mysql事務

事務定義

英文全稱:transaction

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

innodb儲存引擎下,事務的應用場景?

a. innodb儲存引擎下,dml(insert、update、delete)增刪改操作會自動觸發事務操作;

b. 工作中常見應用場景還包括:積分兌換、銀行轉賬等場景

事務的四大特性

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

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

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

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

常見事物的術語包括:

開啟事務:start transaction

事務結束:end transaction

提交事務:commit transaction

回滾事務:rollback transaction

事務操作命令包括:

事務開啟 :begin 或者 start transaction

事務提交 :commit

事務回滾 :rollback

事物開啟的標誌

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

事務結束的標誌

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

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

事物與資料庫底層資料

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

事物的隔離特性(今天重點聊)

事物a和事物b之間具有一定的隔離性,即:不同的事務操作之間具有隔離性;

innodb引擎下,mysql常見的事務隔離級別

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

讀未提交:read uncommitted

讀已提交:read committed

可重複讀:repeatable read

序列化:serializable

1、 read uncommitted

2、read committed

3、repeatable read

4、serializable

擴充套件:設定隔離級別

方式一:

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

該選項值參考:

– read-uncommitted

– read-committed

– repeatable-read(預設隔離級別)

– serializable

my.ini檔案中:

[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;

設定mysql事務隔離級別的作用範圍

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

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

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

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

set transaction isolation level read committed;

或:set session transaction isolation level read committed;

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

set global transaction isolation level read committed;

吉公尺_王寄語:

如果你能靜下心來看到文章結尾,只能說我們太有緣了,我提供了你需要的資料,關注我、點讚**鼓勵我,讓我們持續成長進步。

mysql事務操作 mysql的事務操作

倒著思考。杜絕純粹的知識填鴨教育 少廢話,是上 update table1 set money 100 where id 1 a賬戶減少100元 update table2 set money 100 where id 2 b 賬戶增加100元 問題 這是乙個簡單的銀行轉賬案例sql,由於伺服器等未...

mysql事務詳解

使用者訪問資料庫時,資料庫會為使用者開啟乙個程序,使用者可以通過這個程序對資料庫進行增 刪 改 查的操作,這個程序就稱為事務。1 原子性 指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生 例如 在乙個事務中,對t1表新增乙個資料,並對t2表刪除乙個資料,這兩步操作要麼都成功,要麼...

MySQL 事務詳解

mysql 事務主要用於處理操作量大,複雜度高的資料。比如說,在人員管理系統中,你刪除乙個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關的資訊,如信箱 文章等等,這樣,這些眾多的資料庫操作語句就構成乙個事務!一般來說,事務必須滿足以下 4 個條件 acid 而我們在學習事務的時候最複雜也是最...