mysql update 子查詢鎖表問題

2023-01-25 22:20:55 字數 452 閱讀 5377

mysql在update帶有子查詢的時候,子查詢的表會鎖住,導致該表無法使用。比如 

update a set comments = (select count(1) from b where id = a.id) where id = 123;

把b表給鎖住了。   而在oracle裡不存在這種情況 。

最後發現 mysql 預設的隔離級別是repeatable-read,oracle預設資料隔離級別是 read-committed 。所以在mysq中

update ... select * from 

insert into .... select * from 

這些語句中,都會鎖住子表的row.

將mysql 隔離級別改成

set session transaction isolation level read committed; 

問題就解決

mysql update使用子查詢

今天我像以前操作oracle寫了一個update sql update device user a set a.scene id null where a.id not in select min t.id from device user t group by t.device id 根據子查詢的...

子查詢 exists子查詢

1 exists子查詢就是用來判斷某些條件是否滿足 跨表 exists是接在where之後,exists返回的結果只有0和1 2 返回結果的演示 select exists select from t student 3 select exists select from t student whe...

mysql 子查詢from 子查詢exists

查詢出來的結果集其實就是一張表,可以把返回的表繼續查詢 select goods id,goods name from select from goods order by goods id as tmp group by cat id判斷查詢子句是否有記錄,如果有一條或多條記錄存在返回 true,...