这很难理解,但是,我需要截断的桌子,同时插入新寄存器,但是在此过程中,网站访问者看不到任何东西都没有任何内容网站内容,我该如何在sql中这样做 - 单个传输,它在新的寄存器之前有类似" cached寄存器"的东西?
使用重命名表切换2个表。
重命名表(与Alter Table不同)可以在单个语句中重命名多个表:
- 准备新表
the_table_next
(可以是一个长期操作) -
RENAME TABLE the_table TO the_table_prev, the_table_next To the_table;
(非常快速的操作) - drop/truncate表
the_table_prev
执行重命名表时,您无法拥有任何锁定表或活动交易。在满足该条件的情况下,重命名操作是原子上完成的;重命名时,没有其他会话可以访问任何表。
如果在重命名表中发生任何错误,则语句失败且未进行更改。
注意:
使用alter table rename
,您需要使用2命令==> 2不同的事务(DDL指令)
使用rename table
=> 单人交易
如果您可以截断表,则可以假设该表上没有密钥限制。如果是这样,我会:
- 1)假设原始表是table1,我将创建具有完全相同结构的table2。
- 2)然后我将用我需要的任何东西填充table2
- 3)之后,在一次交易中,我将表1的名称更改为table3,table2的名称为table1。
- 4)最后,我对table3(最初是table1)所需的一切。
在MySQL中,您可以使用:
重命名表ALTER TABLE table_name
RENAME TO new_table_name;