Mysql (5.5) Innodb在这种情况下使用的是表锁而不是行锁。
这会导致对表的其他insert查询失败。此外,这也是一个更大事务的一部分。
Insert into table x(x1,x2)
Select y1,y2 from y
where 'big sql case based conditions'现在,select查询只选择表的一部分(基于哪个用户),而不是整个表。
但是mysql innodb正在设置表锁。
有什么办法可以避免这种情况吗?任何帮助都将不胜感激。
发布于 2013-12-02 22:24:48
我认为你是在REPEATABLE READ模式下使用tx。你能看看这个吗?
mysql> show session variables like '%isol%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+如果是这样,请将其更改为“READ COMMITTED”,如下所示:
mysql> set session transaction isolation level read committed;
Query OK, 0 rows affected (0.00 sec)
mysql> show session variables like '%isol%';
+---------------+----------------+
| Variable_name | Value |
+---------------+----------------+
| tx_isolation | READ-COMMITTED |
+---------------+----------------+然后,客户机A启动INSERT INTO .. SELECT并从客户机B插入一行。我认为客户机B的插入会成功。
https://stackoverflow.com/questions/20321407
复制相似问题