mysql - 原子地复制一个 MySQL 表到另一个?

标签 mysql

我正在尝试“自动”将一张表复制到另一张表上。基本上我想定期更新一个表,这样如果另一个进程正在更新表,从表中读取的进程将不会得到不完整的结果。

为了提供一些背景信息,我想要一个充当游戏排行榜的表格。该排行榜将通过单独的过程每隔几分钟更新一次。我的思路是这样的:

表 SCORES 包含可公开查看的排行榜,用户查看排行榜时将从中读取。该表每隔几分钟更新一次。更新排行榜的过程将创建一个包含新排行榜的 SCORES_TEMP 表。创建该表后,我想将其所有内容“自动”复制到 SCORES。我想我想做的是:

TRUNCATE TABLE SCORES;
INSERT INTO SCORES SELECT * FROM SCORES_TEMP;

我想替换 SCORES 中的所有内容。我不需要维护我的主键或自动递增值。我只想引入来自 SCORES_TEMP 的所有数据。但我知道如果有人在这两个语句完成之前查看分数,排行榜将是空白的。我怎样才能以原子方式执行此操作,以使其永远不会显示空白或不完整的数据?谢谢!

最佳答案

使用rename table

RENAME TABLE old_table TO backup_table, new_table TO old_table;

它是原子的,适用于所有存储引擎,并且不必重建索引。

关于mysql - 原子地复制一个 MySQL 表到另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/935760/

相关文章:

mysql - 检索数据的 SQl 查询

MySQL 批量 INSERT .. ON DUPLICATE KEY UPDATE,同时指定各个列

sql - mysql二进制比较不使用索引

mysql - 无法登录谷歌云存储sql实例

php - 在 Magento 1.9 中为自定义模块创建自定义表时出错

java - 与 Hibernate hbm2ddl.auto 混淆

mysql - Datamapper 是否支持 'On Duplicate Key Update' 或其他更新插入技术?

mysql - 如何修改数据库字段来更改所有产品的 magento 1 税费?

mysql - 使用撇号、连字符、双大写的 SQL 名称搜索

mysql - if else语句mysql