我需要在一个原子操作中重命名两个表,以便用户永远无法看到数据库处于中间状态.
我正在使用MySQL,并注意到这个案例在文档中有完美的描述:
13.3.3导致隐式提交的语句
本节中列出的语句(以及它们的任何同义词)隐式结束当前会话中活动的任何事务,就像在执行语句之前已完成COMMIT一样
[...]
定义或修改数据库对象的数据定义语言(DDL)语句.ALTER DATABASE ...升级数据目录名称,更改事件,更改程序,更改服务器,更改表,更改视图,创建数据库,创建事件,创建索引,创建过程,创建服务器,创建表,创建触发器,创建视图,删除数据库,DROP事件,DROP INDEX,DROP PROCEDURE,DROP SERVER,DROP TABLE,DROP TRIGGER,DROP VIEW,DROP VIEW,安装插件(从MySQL 5.7.6开始),RENAME TABLE,TRUNCATE TABLE,UNINSTALL PLUGIN(从MySQL 5.7.6开始) .
但也许有某种解决方法或类似的东西?
我的情况看起来像这样:
我在名为的表中有一个当前数据集 current
我在名为的表中收集了一个新的数据集 next
我需要将current
表重命名为current_%current_date_time%
和next
表中的current
一个原子操作
fancyPants.. 14
好吧,容易......
RENAME TABLE current TO current_20151221, next TO current;
如手册中所述.它说这是一个原子操作.为了清除这一点,隐式提交与它无关.那是一个不同的故事.这只是说,这些陈述结束了公开交易.
好吧,容易......
RENAME TABLE current TO current_20151221, next TO current;
如手册中所述.它说这是一个原子操作.为了清除这一点,隐式提交与它无关.那是一个不同的故事.这只是说,这些陈述结束了公开交易.