天天看點

學習mysql事務

1:事務前提

必須設定引擎innodb

設定表引擎​​

​innodb alter table 表名 engine=innodb​

​​對表屬性的修改

設定會話自動送出關閉

show session variables like “autocommit”
  set session autocommit=0
  sql語句
  start transaction 開啟事務或者 begin
  rollback
  commit      

分組聚合having結合

show session VARIABLES  like "autocommit";
show status like "table%"
set session autocommit=0;
alter table admer1 engine=INNODB
begin;
select * from things where id=3 for UPDATE/lock in share mode;
ROLLBACK
COMMIT      

共享鎖 是讀鎖

排它鎖 是寫鎖

兩個鎖不能共存

普通查詢select是不加鎖的

而insert,delete,update是預設加上排他鎖的

普通查詢也是可以 for UPDATE排它鎖/lock in share mode共享鎖;

當你開始事務的時候添加排它鎖或者共享鎖都可以普通查詢

當你開啟事務加上了鎖,

比如給普通查詢上共享鎖或者排它鎖,就不能修改,原因兩個鎖不能共存

比如給修改的時候,可以普通查詢,但是不能加鎖查詢,即使普通查詢也是原來的資料,不是修改的資料,因為事務還沒有送出,這樣就可以解決一些髒讀,幻讀,不可重複讀,當然這也和mysql隔離級别有關,REPEATABLE-READ(可重複)讀是預設的。

一些特價搶購,秒殺等等場景經常使用

SELECT @@tx_isolation      

隻能給select加鎖 其他修改語句自定義意向鎖

for update 排它鎖 寫鎖

lock in share mode 共享鎖又是讀鎖

加鎖可以設定主鍵索引 提高細粒度,當然細粒度也是看需要

當一個使用者開始到送出 鎖才會釋放

鎖釋放之後就會沒有鎖 自然可以加上排他鎖共享鎖都可以查詢

學習mysql事務

繼續閱讀