java - 提交前的 SQL 外键

标签 java mysql sql transactions foreign-keys

在 Java 游戏服务器代码中,我将客户端数据拆分为多个表,以便将来添加新内容。

现在我有以下表格

  • 姓名
  • 授权
  • 库存

name 表包含列 idname

auth 表包含列idpassword

authinventory 表上的 id 列在 nameid 列。

当创建一个新的客户端时,我插入到 name 表中,获取生成的 id 并在单独的插入语句中将其余数据插入其他表中,但所有这些都在一个事务中。

问题是,当我插入到 auth 表时,由于 name 中的外键检查而失败,因为我还没有提交它。有没有更好的方法来解决这个问题而无需在每次插入时都提交?

最佳答案

直到并且除非您在插入到父表之后回滚子表将允许插入与新插入的行相对应的行在父表中即使您在插入到父表后没有提交所以这几乎不是一个担心的问题。 DML 操作的影响一直持续到下一次 rollback 并成为永久性的 commit 语句。因此,如果您在父表中的 insert 操作之后没有显式地 rollback ,则子表将始终允许插入对应于父表中所有行的操作,而不管任何 commit 操作。

因此即使 FOREIGN_KEY_CHECKS=1 也不会出现问题。

关于java - 提交前的 SQL 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20876291/

相关文章:

mysql - mysql更新过程中遇到问题

java - 在 Mac OSX 上从 Java 启动 AppleScript 脚本

java - 如何在SWT shell中以只读模式打开word文档

java - 如何使用 Selenium 选择网页中的文本?

python - 我的程序没有更改 MySQL 数据库,但也没有出现错误

php - 连接/显示具有相同列名的多个表

mysql - 基于字段更改外键

java - 如何禁用按钮一天

mysql - 无法使用 UNION ALL 创建新表

mysql - 从每个小组问题中获得最短的时间