MySQL 如何在一个原子操作中重命名两个表

How to rename two tables in one atomic operation in MySQL

我需要在一个原子操作中重命名两个 table,这样用户将永远无法看到处于中间状态的数据库。

我正在使用 MySQL 并注意到 documentation:

中完美地描述了这种情况

13.3.3 Statements That Cause an Implicit Commit

The statements listed in this section (and any synonyms for them) implicitly end any transaction active in the current session, as if you had done a COMMIT before executing the statement

[...]

Data definition language (DDL) statements that define or modify database objects. ALTER DATABASE ... UPGRADE DATA DIRECTORY NAME, 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, INSTALL PLUGIN (as of MySQL 5.7.6), RENAME TABLE, TRUNCATE TABLE, UNINSTALL PLUGIN (as of MySQL 5.7.6).

但也许有某种解决方法或类似的方法?

我的情况是这样的:

嗯,简单...

RENAME TABLE current TO current_20151221, next TO current;

manual中所述。那里说这是一个原子操作。只是为了澄清这一点,隐式提交与它无关。那是一个不同的故事。这只是说,这些语句结束了一个开放的交易。