У меня есть 3 родительских, дочерних и внучатых таблицы в форме:
+----------------+ +----------------+ +---------------------+
| parent | | child | | grandchild |
+----------------+ +----------------+ +---------------------+
| parent_id (PK) | | child_id (PK) | | grandchild_id (PK) |
| parent_data | | child_data | | grandchild_data |
+----------------+ | parent_id (FK) | | child_id (FK) |
+----------------+ +---------------------+
PK = автоматически увеличивающийся первичный ключ.
FK = внешний ключ.
Мне нужна хранимая процедура, которая может копировать запись в родительской таблице и любые связанные записи в дочерних и внучатых таблицах. Я могу скопировать родительские и дочерние данные нормально, это таблица внуков, с которой я борюсь. Это все, что у меня есть:
CREATE FUNCTION sf_copy_parent(p_parent_id INT) RETURNS INT
BEGIN
DECLARE new_parent_id INT;
-- create new parent record
INSERT INTO parent(parent_data)
SELECT parent_data FROM parent
WHERE parent_id=p_parent_id;
SET new_parent_id=LAST_INSERT_ID();
-- copy child records
INSERT INTO child(child_data,parent_id)
SELECT child_data,new_parent_id FROM child
WHERE parent_id=p_parent_id;
-- copy grandchild records ???
-- return
RETURN new_parent_id;
END
Я использую Mysql5.5, если это важно.