【发布时间】:2016-03-27 07:06:19
【问题描述】:
我需要在一个原子操作中重命名两个表,这样用户将永远无法看到处于中间状态的数据库。
我正在使用 MySQL,注意到documentation 中完美描述了这种情况:
13.3.3 导致隐式提交的语句
本节中列出的语句(以及它们的任何同义词) 隐式结束当前会话中活动的任何事务,就好像 在执行语句之前你已经完成了 COMMIT
[...]
定义或修改数据定义语言 (DDL) 语句 数据库对象。 ALTER DATABASE ...升级数据目录名称, 更改事件、更改程序、更改服务器、更改表、更改视图、 创建数据库,创建事件,创建索引,创建过程,创建 服务器,创建表,创建触发器,创建视图,删除数据库,删除 事件、删除索引、删除过程、删除服务器、删除表、删除 触发、删除视图、安装插件(从 MySQL 5.7.6 开始)、重命名表、 截断表,卸载插件(从 MySQL 5.7.6 开始)。
但也许有某种解决方法或类似的东西?
我的情况是这样的:
- 我在名为
current的表中有一个当前数据集 - 我在名为
next的表中收集了一个新数据集 - 我需要在一个原子操作中将
current表重命名为current_%current_date_time%,并将next表重命名为current
【问题讨论】:
标签: mysql transactions database-migration