2
如果我在MySQL中有一個與外鍵相關的Parent和Child表,是否可以使用SQL語句將Parent中的某些行以及Child中的相關行移動到歸檔表中例如Parent_Archive和Child_Archive)以原子方式?在MySQL中存檔父/子表層次結構
如果我在MySQL中有一個與外鍵相關的Parent和Child表,是否可以使用SQL語句將Parent中的某些行以及Child中的相關行移動到歸檔表中例如Parent_Archive和Child_Archive)以原子方式?在MySQL中存檔父/子表層次結構
使用事務 - 它們的整個目的是使SQL語句的系列原子化。
例如(NOT非常優化的 - 可以用臨時表加以改進):
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;
假設Parent_Archive和Child_Archive具有相同的FK約束作爲父母與孩子,不會在第一插入失敗,因爲父ISN還沒有? – 2010-06-11 00:14:00
@Eric J. - 它會的。我不確定歸檔表爲什麼會有這樣的限制,儘管(我不會把它放進去)。如果這是設計,那麼解決方案就是我上面提到的「更好的表現」 - 您可以創建一個臨時PK/FK表來先存檔,然後按照您提到的順序重新排序上面的查詢(插入P_A,插入C_A,刪除C,刪除P) – DVK 2010-06-11 01:45:18