2

我在 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 中的表?

4

1 回答 1

0

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

更多信息: 如何改进 INSERT INTO ... SELECT 锁定行为

请注意,提到的 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)。

于 2016-02-28T23:28:54.007 回答