Mysql表锁而不是行锁

时间:2013-12-02 05:23:36

标签: mysql locking

Mysql(5.5)Innodb在这种情况下放置表锁而不是行锁。

这导致其他插入查询失败。这也是更大交易的一部分。

Insert into table x(x1,x2)
Select y1,y2 from y
where 'big sql case based conditions'

现在,select查询只选择表的一部分(基于哪个用户)而不是全表。

但是mysql innodb正在放置表锁。

有什么方法可以避免这种情况吗?任何帮助将不胜感激。

1 个答案:

答案 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会成功。