存档MySQL中的父/子表层次结构

时间:2010-06-10 23:27:09

标签: sql mysql archiving

如果我在MySQL中有一个由外键相关的父子表,是否可以使用SQL语句将父中的某些行和子中的相关行移动到原子中的归档表(例如Parent_Archive和Child_Archive)中方式?

1 个答案:

答案 0 :(得分: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;