我在带有 ext4 文件系统和 23 GB 内存的 Linux 系统上使用 Percona MySQL 5.5.28 MySQl 服务器,其中大约 15 GB 分配给了 MySQL.... 我发出了如下查询
INSERT IGNORE INTO table_A SELECT field1,field2,....fieldn FROM table_B;
上面的查询是锁定表_B.... 由于我稍后在 table_B 上触发的更改查询被锁定。
上面两张表是 Innodb 的,我的整个数据库操作只是 Innodb 存储引擎而已.....
谁能告诉我为什么 MySQL locked table_B 已锁定在这里?
如果可能,请告诉我何时以及哪些查询将锁定 MySQL 中的表?
最佳答案
这是一个老问题,但如果有人像我一样偶然发现它,简短的回答是添加 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;在查询有时有效之前。
更多信息: How to improve INSERT INTO ... SELECT locking behavior
请注意,提到的 innodb_locks_unsafe_for_binlog 方法已从 MySQL 5.6.3 开始弃用。 (http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_locks_unsafe_for_binlog)。
关于mysql - insert ignore .....select 正在锁定 select 内的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19081588/