2015-12-21 102 views
3

我需要在一個原子操作中重命名兩個表格,以便用戶永遠無法看到處於中間狀態的數據庫。如何在MySQL中的一個原子操作中重命名兩個表格

我使用MySQL和發現,這起案件在documentation完美描述:

13.3.3語句造成隱式提交

本節中列出(該報表和任何同義詞對他們來說) 隱含結束當前在當前會話中的任何交易,因爲如果 你做了執行該語句

[...]

前一個COMMIT

定義或修改數​​據庫對象的數據定義語言(DDL)語句。 ALTER DATABASE ...升級數據目錄名稱, ALTER EVENT,ALTER PROCEDURE,ALTER SERVER,ALTER TABLE,ALTER VIEW, CREATE DATABASE,CREATE EVENT,CREATE INDEX,CREATE PROCEDURE,CREATE SERVER,CREATE TABLE,CREATE TRIGGER,CREATE VIEW,DROP DATABASE,DROP EVENT,DROP INDEX,DROP PROCEDURE,DROP SERVER,DROP TABLE,DROP TRIGGER,DROP VIEW,安裝插件(如MySQL的5.7.6的),RENAME TABLE, TRUNCATE TABLE,卸載PLUGIN (從MySQL 5.7.6開始)。

但也許有某種解決方法或類似的東西?

我的情況是這樣的:

  • 我有一個當前的數據在一個名爲current
  • 表中設置我收集新的數據在一個名爲next
  • 表中設置,我需要重新命名currentcurrent_%current_date_time%next表到current在一個原子操作

回答

5

好,容易...

RENAME TABLE current TO current_20151221, next TO current; 

manual陳述。它說它是一個原子操作。爲了澄清這一點,隱式提交與它無關。這是一個不同的故事。這只是說,這些陳述結束了一個公開的交易。

+0

太棒了!因此,用戶無法看到第一次重命名已完成但第二次重命名尚未完成的時刻,對嗎? – FrozenHeart

+1

是的,沒錯。 – fancyPants

相關問題