Хранимая процедура MySQL для копирования записей в иерархии Родитель / Дочерний / Внук

У меня есть 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, если это важно.

5
задан David 26 July 2011 в 09:21
поделиться