insert ignore ..... select是锁定表中的select

时间:2013-09-29 18:18:38

标签: mysql sql innodb percona

我在linux系统上使用Percona MySQL 5.5.28 MySQl服务器,带有ext4文件系统和23 GB ram,其中15 GB大约分配给MySQL .... 我发了一个类似下面的查询

INSERT IGNORE INTO table_A SELECT field1,field2,....fieldn FROM table_B;

以上查询是锁定table_B .... 由于哪个更改查询我稍后在table_B锁定了。

以上两张表是Innodb和我的整个数据库操作只是Innodb存储引擎.....

有人可以告诉我为什么MySQL锁定table_B已锁定在这里吗?

如果可能请告诉我何时以及哪些查询将锁定MySQL中的表?

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但万一有人像我一样偶然发现它,简短的回答是添加SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;在查询有时有效之前。

更多信息: How to improve INSERT INTO ... SELECT locking behavior

请注意,自MySQL 5.6.3起,不推荐使用上述innodb_locks_unsafe_for_binlog方法。 (http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_locks_unsafe_for_binlog)。