2010-06-10 3 views
2

Если у меня есть родительская и дочерняя таблица в MySQL, связанная с внешним ключом, возможно ли с помощью оператора SQL перемещать определенные строки из родителя и связанных строк из Child в архивные таблицы (например Parent_Archive и Child_Archive) атомным путем?Архив иерархии родительских/дочерних таблиц в MySQL

ответ

1

Использование транзакций - их цель состоит в том, чтобы сделать серию операторов SQL атомарными.

Например (не очень оптимизирован - может быть улучшена с темп таблицы):

START TRANSACTION; 

INSERT Child_Archive 
SELECT DISTINCT 
Child.* FROM Child, Parent 
WHERE Child.FK = Parent.PK 
    AND Parent.something=11; 

DELETE Child WHERE FK IN (
    SELECT DISTINCT PK FROM Parent WHERE Parent.something=11); 

INSERT Parent_Archive 
SELECT DISTINCT * FROM Parent WHERE Parent.something=11; 

DELETE Parent WHERE Parent.something=11; 

COMMIT; 
+0

Предполагая Parent_Archive и Child_Archive имеют те же ограничения, FK в качестве родителя и ребенка, первая вставка не будет не потому, что родительский ISN Еще нет? –

+0

@ Эрик Дж. - Будет. Я не уверен, почему таблица архивов имеет такое ограничение вообще, хотя (я бы не поставил ее). Если это дизайн, решение - это тот, который я упомянул выше, как «более эффективный» - вы начинаете сначала создавать временную таблицу PKs/FK, а затем повторно заказывать запросы выше в том порядке, в котором вы указали (вставить в P_A, вставить в C_A, удалить C, удалить P) – DVK

Смежные вопросы