【发布时间】:2014-07-21 12:06:48
【问题描述】:
我的表上有一个自引用外键约束。因为我正在转换架构,所以我想将现有数据复制到具有(或多或少)相同结构的新表中:
CREATE TABLE test(
id INT NOT NULL PRIMARY KEY,
parent INT,
FOREIGN KEY (parent) REFERENCES test(id)
);
CREATE TABLE copy(
id INT NOT NULL PRIMARY KEY,
parent INT,
FOREIGN KEY (parent) REFERENCES copy(id)
);
但是,当inserting the data:
INSERT INTO copy(id, parent) SELECT id, parent FROM test;
MySQL 给出了常见的完整性错误:
Error Code: 1452. Cannot add or update a child row:
a foreign key constraint fails (`test`.`copy`, CONSTRAINT `copy_ibfk_1`
FOREIGN KEY (`parent`) REFERENCES `copy` (`id`))
似乎 MySQL 在插入每一行后检查约束,而不是在整个插入后检查它。完全相同的例子works fine in PostgreSQL。
有没有其他方法可以插入这些数据,还是我坚持要分两步这样做?
INSERT INTO copy(id) SELECT id FROM test;
UPDATE copy
JOIN test ON test.id = copy.id
SET copy.parent = test.parent;
【问题讨论】:
-
使用 MySQL,您只有这两个选项:禁用约束(如 VMai 所示)或在一个事务中执行插入/更新(如您现在所做的那样)。
标签: mysql sql foreign-keys foreign-key-relationship