如何将新数据插入表并删除旧数据而不阻止用户读取旧数据直到进程结束(MySql)

时间:2012-09-24 08:33:55

标签: mysql sql database database-backups

案例: 有大表每24小时需要删除所有数据并获取新数据。

如何在不阻止用户读取此表中的数据的情况下截断此表并插入新数据?

我的想法:(请更好地写出哪个选项或建议更合适的选项或标准解决方案)

选项1:

 1. insert new data to temp table
 2. drop old table
 3. rename temp table to the table name

Option2(问题:用户无法访问中间的表数据):

 1. truncate the table
 2. insert new data to table

2 个答案:

答案 0 :(得分:1)

1.insert new data to temp table
2.CREATE TABLE newtable select * from oldtable where 1=2
3.drop old table
4.INSERT INTO newtable select * from temp

答案 1 :(得分:1)

如果您要保留任何旧数据: 在表中添加id列。使用由行中所有列的值计算的哈希值填充它。将新数据加载到临时表中。使用已更改的行和新行更新旧数据。 否则你的第一个解决方案就是要走的路,因为重命名一个表不需要花费很多时间。