首先說明下,如果我們只談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個)1、 read uncommitted讀未提交:read uncommitted
讀已提交:read committed
可重複讀:repeatable read
序列化:serializable
2、read committed
3、repeatable read
4、serializable
擴充套件:設定隔離級別
方式一:
可以在my.ini檔案中使用transaction-isolation選項來設定伺服器的預設事務隔離級別。
該選項值參考:my.ini檔案中:– read-uncommitted
– read-committed
– repeatable-read(預設隔離級別)
– serializable
[mysqld]方式二:transaction-isolation = read-committed
通過命令動態設定隔離級別
隔離級別也可以在執行的伺服器中動態設定,應使用set transaction isolation level語句。其語法格式參考:
設定mysql事務隔離級別的作用範圍其中的隔離級別可以是:set [global | session] transaction isolation level (隔離級別)
– read uncommitted
– read committed
– repeatable read
– serializable
• 例如: set transaction isolation level repeatable read;
• 事務隔離級別的作用範圍分為兩種:
– 全域性級:對所有的會話有效
– 會話級:只對當前的會話有效
• 例如,設定會話級隔離級別為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 而我們在學習事務的時候最複雜也是最...