早上好。 我有一个关于MySQL DataBase的表。 在这张表中,有5个机器人可以每小时写10个记录。 每3个月我创建一个脚本,制作一个表的副本,然后删除所有表条目(这样我就可以按特定顺序保存ID)。
我的问题是。 这是两个不同的陈述:
CREATE TABLE omologationResult_{date} AS SELECT * FROM omologationResult
DELETE FROM omologationResult
如果脚本要在0点复制表,并且将从机器人添加记录,那么没有问题,因为SQL语句从最低ID开始直到结束。但是如果脚本要进入delete
表并且机器人正在写入它。会发生什么?我失去了最后一次机器人记录?
如果这是真的。如何制作表格副本,然后仅删除我复制的数据?
谢谢
答案 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
中删除两个表中存在的项目