Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 多个客户端。在尝试在同一行上获得真正的锁之前,它们不一定会发生冲突_Mysql_Locking_Innodb - Fatal编程技术网

Mysql 多个客户端。在尝试在同一行上获得真正的锁之前,它们不一定会发生冲突

Mysql 多个客户端。在尝试在同一行上获得真正的锁之前,它们不一定会发生冲突,mysql,locking,innodb,Mysql,Locking,Innodb,但是表锁(ALTER table、DROP table、lock TABLES)同时阻塞IS和IX,反之亦然 因此,IX锁与另一个IX锁兼容(它们都是表级)或IX锁与另一个X锁冲突(表级而非行级) 参考资料:Hello Bill,通过说“选择…更新不会被IX锁阻止”,然后如何解释选择。。。因为更新被另一个选择阻止。。。对于确实令人印象深刻的更新,它在等待X锁,但谁在上面设置了X?选择。。。对于仅更新,请询问IX lock right?否--SELECT…FOR UPDATE锁定索引扫描读取的行,

但是表锁(ALTER table、DROP table、lock TABLES)同时阻塞IS和IX,反之亦然

因此,IX锁与另一个IX锁兼容(它们都是表级)或IX锁与另一个X锁冲突(表级而非行级)


参考资料:

Hello Bill,通过说“选择…更新不会被IX锁阻止”,然后如何解释选择。。。因为更新被另一个选择阻止。。。对于确实令人印象深刻的更新,它在等待X锁,但谁在上面设置了X?选择。。。对于仅更新,请询问IX lock right?否--
SELECT…FOR UPDATE
锁定索引扫描读取的行,就像您对这些行执行了
UPDATE
DELETE
语句一样。因此,请参见
SELECT…FOR UPDATE
尝试创建X锁,如果这些行上已经存在其他X锁,则会被阻止。如果它获取了锁,它将阻止其他读取相同行的
SELECT…FOR UPDATE
语句。再次感谢。这就是问题所在,也是我感到困惑的原因,因为根据mysql refmanual SELECT。。。对于已发布的更新IX而不是X,“例如,选择…共享模式下的锁设置IS锁,选择…更新设置IX锁。”参考:,此外,我怀疑它是X锁,因为X锁与共享锁冲突,所以当存在X锁时,您不能发出SELECT(不用于更新),事实是您可以选择(不用于更新)即使已经有了选择。。。对于UPDATEAwesome,IX锁是表级锁,我认为它是行级锁,你不仅应该得到50分,我希望我能提供更多,谢谢
    X           IX          S           IS
X   Conflict    Conflict    Conflict    Conflict
IX  Conflict    Compatible  Conflict    Compatible
S   Conflict    Conflict    Compatible  Compatible
IS  Conflict    Compatible  Compatible  Compatible
---TRANSACTION 71568, ACTIVE 12 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s)
MySQL thread id 10, OS thread handle 140168480220928, query id 288 localhost root statistics
select * from test where id=1 for update
------- TRX HAS BEEN WAITING 12 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 802 page no 3 n bits 72 index `PRIMARY` of table `test`.`test` 
trx id 71568 lock_mode X locks rec but not gap waiting