MySQL 事務處理的基本概念 隔離級別與鎖

2021-09-25 06:14:33 字數 2537 閱讀 9173

2. mysql 事務的隔離級別與鎖;

show engines;

// 只有 innodb 支援事務

create

table software (

sid int

, version int

)engine

=innodb

;// 預設儲存引擎都是 innodb

select

*from software;

start

transaction

;// 或者 begin 或者 begin work

insert

into software (sid, version)

values(1

,1);

commit

;// 結束生命週期(或者 rollback,回滾)

select

*from software;

select @@autocommit

;// 返回 1(自動提交這個屬性預設開啟:每句 sql 語句執行時都會自動提交)

// 自動提交這個屬性只對 innodb 這種支援事務安全性儲存引擎有效

# 檢視隔離級別

select @@global

. tx_isolation;

// 返回: repeatable-read

select @@global

. tx_isolation , @@session

. tx_isolation;

// 返回: repeatable-read repeatable-read

# 設定隔離級別

setsession

transaction

isolation

level

serializable

;select @@session

. tx_isolation;

// 返回 serializable(序列化隔離)

# 事務隔離級別設定 serializable, 同時開兩個例項都開始事務處理(start transaction),

# 前乙個例項只要不 commit 或者 rollback,後乙個例項就不能進行增刪改操作,程序會一直轉圈、超時。

# 如果前乙個程序 commit 或者 rollback 了,後乙個例項的操作才能繼續往下執行。

# repeatable read:和 serializable 比效能好,不會卡住下乙個例項的操作

# 缺點是會產生幻讀:在一次事務的查詢中,兩個例項的資料不一致。

setsession

transaction

isolation

level

repeatable

read

;# 事務隔離級別設定 repeatable read, 同時開兩個例項都開始事務處理(start transaction),

# 第乙個例項 insert 一行後再 commit ,但是第二個例項查詢的時候 select 不到例項一新插入的一行

# 此時例項二對表中所有資料 update 後,新的一行會出現並且被 update,這就是幻讀

# read committed(不可重複讀)

setsession

transaction

isolation

level

read

committed

;# 只要例項一對表進行 insert 或者 update 並 commit 後,其它例項 select 立即能看到修改

# read uncommitted(不可重複讀)

setsession

transaction

isolation

level

read

uncommitted

;# 只要例項一對表進行 insert 或者 update 並沒有 commit 後,其它例項 select 立即能看到修改

# 如果例項一立即 rollback,其它例項之前 select 到的資料,就成了髒讀。

# mysaim 這種非事務引擎,可以用「鎖」的方式實現類似事務安全的效果

lock

table software read

;// 本例項和其它例項都只能讀不能寫

insert

into software (sid, version)

values(4

,1);

// 返回:error 1099 (hy000): table 'software' was locked with a read lock and can't be updated

unlock

tables

;lock

table software write

;// 本例項能讀能寫,其它例項不能讀不能寫

unlock

tables

;

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 原子性 組成事務處理的語句形成了乙個邏輯單元,不能只執行其中的一部分。換句話說,事務...