時々計算されるいくつかの統計を含むテーブルfoo
があるとします。他のクエリで頻繁に使用されます。
だから、私はfoo_new
でより最近の統計を計算し、計算の準備ができたらそれらを交換したいと思います。
私はそれをできた
ALTER TABLE foo RENAME foo_tmp;
ALTER TABLE foo_new RENAME foo;
しかし、テーブルfoo
がないときに、クエリがこれらの2行の間にテーブルfoo
を必要とする場合はどうなりますか?どういうわけかロックする必要があると思います...それを行う別の方法はありますか?
次の1つのコマンドを使用します。
RENAME TABLE foo TO foo_old, foo_new To foo;
これはアトミック操作です。両方のテーブルが一緒にロックされ(非常に短時間)、そのため、すべてのアクセスはRENAME
の前または後に発生します。