내가 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 테이블로 이동합니다. 또한 원하는 모든 메시지 (및 파일 및 주석)를 * _removed 테이블로 이동하는 것이 좋습니다.
내가 사용했습니다 트리거 :
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
|
그러나이> 5 만 사용자와 매우 느리게 작동> 1m 메시지, 의견과 파일.
빠른 방법이 있습니까?
아마도 테이블의 열로 표시됩니다. – sshow