MySQL的事務處理以及隔離級別

2021-08-02 17:50:59 字數 1382 閱讀 6342

事務是dbms的執行單位。它由有限的資料庫操作序列組成的。但不是任意的資料庫操作序列都能成為事務。一般來說,事物必須滿足4個條件(acid)

mysql的事務處理方法

用begin, rollback, commit來實現

開始:start transaction或者begin語句可以開始一項新的事務

提交:commit可以提交當前事務,使變更成為永久變更

回滾:rollback可以回滾當前事務,取消其變更

直接用set來改變mysql的自動提交模式

mysql預設是自動提交的,也就是你提交乙個query,它就直接執行。我們可以通過set autocommit=0 禁止自動提交。set autocommit=1 開啟自動提交來實現事務的處理。但注意當你用 set autocommit=0 的時候,你以後所有的sql都將作為事務處理,直到你用commit確認或者rollback結束,並且只用於當前連線。mysql中只有innodb和bdb型別的資料表才能支援事務處理。其他的型別是不支援的!

髒讀,不可重複讀,幻讀

事務隔離級別描述

如果資料庫的隔離級別為read uncommitted,則其他執行緒可以看到未提交的資料,因此就出現髒讀。如果資料庫隔離級別設為read committed,即沒提交的資料別人是看不見的,就避免了髒讀;但是,正在讀取的資料只獲得了讀取鎖,讀完之後就解鎖,不管當前事務有沒有結束,這樣就容許其他事務修改本事務正在讀取的資料,導致不可重複讀。repeatable read因為對正在操作的資料加鎖(行級鎖),並且只有等到事務結束才放開鎖,則可以避免不可重複讀。repeatable read只能保證正在被本事務操作的資料不被其他事務修改,卻無法保證有其他事務提交新的資料。則有可能執行緒1在操作表t1的時候(特別是統計性的事務),其他執行緒仍然可以提交新資料到表t1,這樣會導致執行緒1兩次統計的結果不一致,就像發生幻覺一樣。serializable因為獲得範圍鎖,且事務是乙個接著乙個序列執行,則保證了不會發生幻讀。由此可見,隔離級別越高,受其他事物干擾越少,併發效能越差。

修改事務的隔離級別

檢視innodb系統級別的事務隔離級別

select @@global.tx_isolation;
檢視innodb會話級別的事務隔離級別

select @@tx.isolation;
修改事務隔離級別

set

global

transaction

isolation

level

read committed;

setsession

transaction

isolation

level

read committed;

MySQL事務處理

start transaction,commit和rollback語法 start transaction begin work commit work and no chain no release rollback work and no chain no release set autocom...

mysql事務處理

mysql的事務處理主要有兩種方法 1.用begin,rollback,commit來實現 begin開始乙個事務 rollback事務回滾 commit 事務確認 2.直接用set來改變mysql的自動提交模式 mysql預設是自動提交的,也就是你提交乙個query,就直接執行!可以通過 set ...

mysql事務處理

事務都應該具備acid特徵。所謂acid是atomic 原子性 consistent 一致性 isolated 隔離性 durable 持續性 四個詞的首字母所寫,下面以 銀行轉帳 為例來分別說明一下它們的含義 1 原子性 組成事務處理的語句形成了乙個邏輯單元,不能只執行其中的一部分。換句話說,事務...