私は8つのテーブルを持っている:私はテーブルからレコードを削除 レコードを他の接続されたテーブルからアーカイブする方法はありますか?
users:
uid
users_removed:
uid
messages:
mid
uid FK users (uid)
messages_removed:
mid
uid
comments:
cid
mid FK messages (mid)
comments_removed:
cid
mid
files:
fid
mid FK messages (mid)
files_removed:
fid
mid
「ユーザー」私は(ユーザーから削除する前に)users_removedテーブルに移動します。また、対応するすべてのメッセージ(およびファイルとコメント)を* _removeテーブルに移動することもできます。
私が使用したトリガ:
CREATE TRIGGER delete_user BEFORE DELETE ON users
FOR EACH ROW BEGIN
INSERT IGNORE INTO users_removed
SELECT * FROM users WHERE uid = OLD.uid;
DELETE FROM messages WHERE OLD.uid in (owner_id, author_id);
END
|
CREATE TRIGGER delete_message BEFORE DELETE ON messages
FOR EACH ROW BEGIN
INSERT IGNORE INTO messages_removed
SELECT * FROM messages WHERE mid = OLD.mid;
DELETE FROM comments WHERE mid = OLD.mid;
DELETE FROM files WHERE mid = OLD.mid;
END
|
CREATE TRIGGER delete_comment BEFORE DELETE ON comments
FOR EACH ROW BEGIN
INSERT IGNORE INTO comments_removed
SELECT * FROM comments WHERE cid = OLD.cid;
END
|
CREATE TRIGGER delete_file BEFORE DELETE ON files
FOR EACH ROW BEGIN
INSERT IGNORE INTO files_removed
SELECT * FROM files WHERE fid = OLD.fid;
END
|
しかし、それは> 50Kのユーザと非常に遅い動作しますが、> 1メートルのメッセージ、コメントやファイル。
これを行う方法はありますか?
これはおそらくテーブルの列としてこれを持っています。 – sshow