如何“交换”出生产表

Mic*_*oie 3 mysql database-design

我有一个 MySQL 表,其中包含数千条记录,这些记录很快就会过时。每天有几次我们运行一个缓慢的过程,需要从多个来源提取数据并重新填充表。

问题是桌子需要一直可用。我最初的想法是在临时表上执行缓慢的填充过程,然后删除实时表并重命名临时表以替换实时表。

是否可以在删除/重命名过程之前锁定活动表,以便查询延迟而不丢失?

或者这是错误的方法?

Nat*_*lly 6

您可以通过在 RENAME 语句中指定两个表来进行交换。

CREATE TABLE new_table (...);
RENAME TABLE old_table TO backup_table, new_table TO old_table;
Run Code Online (Sandbox Code Playgroud)

MySQL 文档上RENAME TABLE说:

重命名操作以原子方式完成,这意味着在重命名运行时没有其他会话可以访问任何表。例如,如果现有表old_table,则可以创建另一个结构相同但为空的表new_table,然后将现有表替换为空表...