在 Java 游戏服务器代码中,我将客户端数据拆分为多个表,以便将来添加新内容。
现在我有以下表格
- 姓名
- 授权
- 库存
name
表包含列 id
和 name
。
auth
表包含列id
和password
。
auth
和 inventory
表上的 id
列在 name
的 id
列。
当创建一个新的客户端时,我插入到 name
表中,获取生成的 id 并在单独的插入语句中将其余数据插入其他表中,但所有这些都在一个事务中。
问题是,当我插入到 auth
表时,由于 name
中的外键检查而失败,因为我还没有提交它。有没有更好的方法来解决这个问题而无需在每次插入时都提交?
最佳答案
直到并且除非您在插入到父表之后回滚
,子表将允许插入与新插入的行相对应的行在父表中即使您在插入到父表后没有提交
。所以这几乎不是一个担心的问题。 DML
操作的影响一直持续到下一次 rollback
并成为永久性的 commit
语句。因此,如果您在父表中的 insert
操作之后没有显式地 rollback
,则子表将始终允许插入对应于父表中所有行的操作,而不管任何 commit
操作。
因此即使 FOREIGN_KEY_CHECKS=1
也不会出现问题。
关于java - 提交前的 SQL 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20876291/