mysql - insert ignore .....select 正在锁定 select 内的表

标签 mysql sql innodb percona

我在带有 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/

相关文章:

mysql - 无法创建外键

mysql - 在 SQL 中计算 2,3 四分位数平均值

mysql - 将列属性设置为日期和时间

sql - MEAN-Stack - 无法从服务器读取第二个 SQL 表

mysql - 启动 MySQL 时出现错误 "Plugin ' InnoDB 注册为存储引擎失败”

php - 如何使用复选框删除数据库结果行

php - 如何计算内容mysql匹配中的单词匹配?

sql - 在索引范围扫描的情况下,整数列索引是否比字符串列索引更快?

mysql - 没有事务的生活(MyISAM)

php - MySQL Process List - 提高性能 - 锁定问题