我有一个PHP程序,它将一系列DB插入到几个表中。
提出了一个要求,要求程序生成一个插入的SQL转储,以便将它们插入到另一个数据库中。(第二个数据库具有相同的模式,但数据不同)。
生成SQL转储很容易:只需在执行查询字符串时输出即可。
但是,由于我们要插入到多个具有交叉引用ID字段的表中,因此以这种方式生成的SQL包含外键字段的固定ID值。
即转储文件的示例可能如下所示:
insert into tableA ....
insert into tableB .... id_a = 365 ....
insert into tableC .... id_b = 1895, id_a = 365 ....
其中"365"one_answers"1895"通过PHP调用$mysqli->insert_id
填充到查询中,以获得插入到上一个表中的记录的ID。
因此,这代表了为将数据插入数据库而执行的查询的准确情况。
问题是,当SQL转储在第二个数据库上运行时,这些固定的ID值显然是不正确的。当第一条记录被插入到第二个DB上的表A中时,结果记录的ID将不是365,因此,由于随后插入到表B和表C中包含对该ID的固定引用,它们将被插入,其外键指向错误的记录。
我该如何解决这个问题?
有没有一种方法可以生成这种类型的SQL转储,它引用同一查询转储中的其他插入,但没有固定的ID?
非常感谢您的帮助。
您可以先尝试插入数据,然后创建引用约束ALTER TABLE。存在INSERT IGNORE,即使在出现错误后,它也会继续将数据插入表中。因此,只有冲突的值不会填充到表中。