У меня 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
|
Но это работает очень медленно с> 50k пользователями,> 1 миллионами сообщений, комментариев и файлов.
Есть ли быстрый способ сделать это?