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 共享鎖又是讀鎖
加鎖可以設定主鍵索引 提高細粒度,當然細粒度也是看需要
當一個使用者開始到送出 鎖才會釋放
鎖釋放之後就會沒有鎖 自然可以加上排他鎖共享鎖都可以查詢
