提交前的 SQL 外键

Dél*_*nio 4 java mysql sql transactions foreign-keys

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

现在我有下表

  • 名字
  • 授权
  • 存货

name表包含列idname

auth表有列idpassword

和表id上的列对的列有外键约束。authinventorynameid

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

问题是,当我插入表时auth,由于外键签入而失败,name因为我尚未提交它。有没有更好的方法来解决这个问题,而无需每次插入都进行提交?

Raj*_*aul 5

直到并且除非您插入父表rollback后,子将允许插入与父表中新插入的行相对应的行,即使您在插入父表后不这样做。所以这几乎不用担心。操作的影响持续到下一次,并且通过语句变得永久。因此,如果您在父表中的操作之后没有显式地执行操作,则子表将始终允许与父表中的所有行相对应的插入,而不管进行任何操作。commitDMLrollbackcommitrollbackinsertcommit

因此,即使FOREIGN_KEY_CHECKS=1.