【发布时间】:2019-07-07 10:20:36
【问题描述】:
我正在尝试在我的 Java 应用程序中进行大量事务,并为 user_account_entry 表执行单个插入条目(以千为单位),该表具有对 user 表的外键引用。
当事务运行时,我无法更新属于获取LockAcquisitionException的事务的任何用户实体
我正在使用 MySQL InnoDB 并使用 DEFAULT 隔离级别进行事务处理,该级别转换为 InnoDB 的 REPEATABLE-READ 级别,任何人都可以了解 mysql 事务期间的外键锁定
【问题讨论】:
-
MySQL 使用共享模式(只读)锁锁定所有相关(通过外键)行以确保一致性。要阻止这种情况,您需要删除外键或禁用它们。
-
希望您使用的是最新版本的 MySQL 并使用 InnoDB。性能在 8.0 中有了很大提高(也有新的锁定选项!),并且 MyIsam 不是为并发插入而设计的
-
感谢@Vatev,您是否有任何相关文档的链接
-
dev.mysql.com/doc/refman/5.7/en/… 您可以在此页面上找到参考“InnoDB 在它必须查看的子记录或父记录上设置共享行级锁”
标签: mysql transactions innodb isolation-level