Имам саморефериращо ограничение за външен ключ на моята маса. Тъй като трансформирам схемата, бих искал да копирам съществуващите данни в нова таблица с (повече или по-малко) същата структура:
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)
);
Въпреки това, когато вмъквате данните:
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 проверява ограничението след вмъкване на всеки ред, вместо да го проверява след цялото вмъкване. Същият пример работи добре в PostgreSQL.
Има ли друг начин да вмъкна тези данни или съм останал да правя това в две стъпки като тази?
INSERT INTO copy(id) SELECT id FROM test;
UPDATE copy
JOIN test ON test.id = copy.id
SET copy.parent = test.parent;