处理多个MySql查询(删除和复制)

时间:2017-01-11 14:57:17

标签: mysql sql

早上好。 我有一个关于MySQL DataBase的表。 在这张表中,有5个机器人可以每小时写10个记录。 每3个月我创建一个脚本,制作一个表的副本,然后删除所有表条目(这样我就可以按特定顺序保存ID)。

我的问题是。 这是两个不同的陈述:

CREATE TABLE omologationResult_{date} AS SELECT * FROM omologationResult
DELETE FROM omologationResult

如果脚本要在0点复制表,并且将从机器人添加记录,那么没有问题,因为SQL语句从最低ID开始直到结束。但是如果脚本要进入delete表并且机器人正在写入它。会发生什么?我失去了最后一次机器人记录?

如果这是真的。如何制作表格副本,然后仅删除我复制的数据?

谢谢

1 个答案:

答案 0 :(得分:2)

是的,这不是一个安全的操作,因为它不是原子的。另一个线程很可能在CREATE .. SELECT和DELETE之间将值插入到该表中。您有一个选择是使用多表DELETE

CREATE TABLE omologationResult_{date} AS SELECT * FROM omologationResult;
DELETE omologationResult FROM omologationResult 
INNER JOIN omologationResult_{date} ON omologationResult_{date}.id = omologationResult.id

将确保仅从omologationResult

中删除两个表中存在的项目