假设我们有两个表new
和current
(都是innodb)。
我们应该自动截断current
表内容并填充new
表中的新内容。
可能的方法:
RENAME TABLE
,但它无法帮助,因为两个表都已创建current
表;插入current
选择new
;提交事务 - 没关系,但是有可能以交易方式进行所有这些操作吗?最佳做法是什么?
UPD:我认为这将完美运作:RENAME TABLE current TO xxx, new TO current; xxx TO new
答案 0 :(得分:0)
将当前重命名为temp,然后将new重命名为current和last create table new one并删除临时表
答案 1 :(得分:0)
您需要使用单个MySQL语句重命名表,以便将其作为单个mysql原子操作执行,否则可能会导致尝试访问其中一个表的程序发生错误,同时将它们交换为各种名字。
但听起来你也需要"新的" table为空以在操作结束时接受新记录。
CREATE TABLE new_empty LIKE new;
RENAME TABLE current TO old, new to current, new_empty TO new;
DROP TABLE old;
这比做"截断当前"更有效率。 "插入当前select * from new"因为你不复制任何记录,它只会创建一个新的表结构(带有索引),重命名三个文件并删除旧表(通过删除数据库目录中的两个文件)。
答案 2 :(得分:-2)
首先,您需要确保不应锁定当前表。
如果我们有两个表 table1 和 table2
RENAME TABLE table1 TO table1_temp;
RENAME TABLE table2 TO table1;
RENAME TABLE table1_temp TO table2;
试试这个。这肯定会帮助你。