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