如题,开发中遇到一个问题
usd test_db ;
begin;
select * from test_table where id = 2 for update;
commit;
上述代码如果多线程同时执行的话,在前面的线程执行完之前,后面的应该是阻塞的,然而换了一台机器到测试服务器上跑以后,该库中使用相同语句却所有线程都会同时执行完毕,也就是说排他锁失效了。
想问一下这可能是什么原因导致的,以前没见过这种情况。我使用 explain 解释后确定搜索一定走的是索引(主键),所有搜索语句也都指定了条件,为什么会这样呢?
1
sujin190 2022-01-29 08:59:58 +08:00
因为事务被 commit 了,事务 commit 了,你打开的排它锁自然也关闭了啊
|
2
vzyw 2022-01-29 15:21:16 +08:00
id=2 的数据是不是空的? 如果为空,两个线程都能获得排他锁,不会阻塞
|
3
LeeReamond OP |