J'ai 8 tables:Comment archiver un enregistrement avec des enregistrements d'autres tables connectées?
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
Lorsque je retire enregistrement de la table « utilisateurs » Je veux le déplacer à la table users_removed (avant de supprimer des utilisateurs). Ce que je veux aussi, c'est déplacer tous les messages (et fichiers et commentaires) correspondants vers les tables * _emoved.
J'ai utilisé les déclencheurs:
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
|
Mais ça marche très lent avec> 50k utilisateurs,> 1m messages, des commentaires et des fichiers.
Existe-t-il une méthode rapide pour cela?
Je l'aurais probablement comme une colonne dans les tables à la place. – sshow