如何每天复制和清空MySQL表?

如何每天复制和清空MySQL表?,mysql,Mysql,我有一张叫chat的桌子。我想将内容复制到chat_archive并每天清空chat的内容。复制时聊天信息仍将流入聊天室。如何在不延迟聊天表上正在进行的操作的情况下完成此操作?在事务中复制聊天并将其删除,以便在这两个步骤之间不会丢失任何内容 BEGIN TRANSACTION; INSERT INTO chat_archive SELECT * FROM chat; DELETE FROM chat; COMMIT; 如果您有一个自动递增ID列,请确保使用should-useDELE

我有一张叫chat的桌子。我想将内容复制到chat_archive并每天清空chat的内容。复制时聊天信息仍将流入聊天室。如何在不延迟聊天表上正在进行的操作的情况下完成此操作?

在事务中复制聊天并将其删除,以便在这两个步骤之间不会丢失任何内容

BEGIN TRANSACTION;
INSERT INTO chat_archive 
    SELECT * FROM chat;
DELETE FROM chat;
COMMIT;

如果您有一个自动递增ID列,请确保使用should-use
DELETE FROM chat而不是
截断聊天,因为后者会将自动增量重置为
0
TRUNCATE
还会自动提交事务。

任何解决方案都会导致传入事务排队。诀窍是尽量减少这段时间。更好的方法可能是通过触发器将聊天行附加到聊天室存档。触发器只会给数据库增加一小部分开销,然后你就可以每天截断表了。你能告诉我如何使用触发器吗?