我在我的表上有一個自引用外鍵約束。因爲我改造的模式,我想現有的數據複製到一個新表(或多或少)相同的結構:將自引用數據插入副本表
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),或在一個事務中執行插入/更新(因爲你現在做的)。 –