У меня есть самореферентное ограничение внешнего ключа на моей таблице. Поскольку я преобразовываю схему, я хотел бы скопировать существующие данные в новую таблицу с (более или менее) той же структурой:
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;