Mysql(5.5)Innodb在这种情况下放置表锁而不是行锁。
这导致其他插入查询失败。这也是更大交易的一部分。
Insert into table x(x1,x2)
Select y1,y2 from y
where 'big sql case based conditions'
现在,select查询只选择表的一部分(基于哪个用户)而不是全表。
但是mysql innodb正在放置表锁。
有什么方法可以避免这种情况吗?任何帮助将不胜感激。
答案 0 :(得分:1)
我认为你在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的INSERT会成功。