mysql update 子查询锁表问题

时间:2022-09-18 20:30:43

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; 

问题就解决