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;
问题就解决