0

我有一个 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?

非常感谢您的帮助。

4

1 回答 1

0

您可以先尝试插入数据,然后创建引用约束 ALTER TABLE。即使发生错误,INSERT IGNORE 也会继续将数据插入表中。因此,只有冲突的值不会填充到表中。

于 2012-10-16T14:08:50.383 回答