Ben*_*Ben 61 mysql alter-table locking
假设,我有一个 table foo,其中包含一些不时计算的统计信息。它被其他查询大量使用。
这就是为什么我想计算更多最近的统计数据foo_new并在计算准备好时交换它们。
我可以
ALTER TABLE foo RENAME foo_tmp;
ALTER TABLE foo_new RENAME foo;
Run Code Online (Sandbox Code Playgroud)
但是如果在foo没有表的情况下查询需要这两行之间的表会发生foo什么?我想我必须以某种方式锁定它……或者还有其他方法可以做到吗?
Shl*_*ach 101
使用这个命令:
RENAME TABLE foo TO foo_old, foo_new To foo;
Run Code Online (Sandbox Code Playgroud)
这是一个原子操作:两个表都锁定在一起(并且锁定时间很短),因此任何访问都发生在RENAME.