1.情景展示
在工作過程中,我們往往會有對表數據進行備份的需求,比如說:對表數據進行大量操作時,為了以防萬一,最好是將數據進行備份,以免操作不當,導致無法恢復原有的數據。
2.解決方案
和Oracle的用法一模一樣,語法如下:
CREATE TABLE NEW_TALBE_NAME AS SELECT * FROM OLD_TABLE_NAME;
3.實戰演練
對表cz_jkdic進行備份。
此時,表的數據已經完成了備份,已經產生了一張新表:cz_jkdic_bak;
下面,我們一起來看一下兩表的區別:
查看建表語句:SHOW CREATE TABLE TABLE_NAME。
create table列展示的就是對應表的建表語句
將cz_jkdic表和cz_jkdic_bak表的建表語句拿出來,進行對比:
我們會發現備份表發生了以下變化:
第一,主鍵消失(備份表沒有指定哪一列是主鍵);
第二,索引消失(備份表已經不存在索引);
第三,自增消失(因為mysql的自增屬性只能和主鍵綁定)。
第四:字段的非空屬性會保留。
如果原表有觸發器的話,觸發器應該也不會復制過來的;
外鍵約束同樣不會復制。
由此,我們可以下這樣的結論:
使用create table 新表名 as select * from 舊表名的方式,能實現的功能:
第一,建表(表的字段列和原表一模一樣)(可以理解為:沒有指定主鍵和索引的普通建表語句);
第二,復制數據(將原表數據塞進新表當中)。
僅僅只有這兩個作用,一定不要忘了,歸根結底是因為:我們用的建表語句沒有定義其它內容。
所以說,當我們后續需要對備份表進行復用的時候,需要:
第一,重新指定表主鍵,避免與原有數據造成主鍵沖突,導致后續數據插入失敗(如果使用自增屬性的話,mysql會自動將現有主鍵列的最大值+1,當作自增的起始值)。
第二,重新建立表索引。
4.另一種實現方式
如果數據量不大的話,可以使用Navicat來實現;
切換到表視圖;
選中要復制的表,按Ctrl+C進行復制,再按Ctrl+V進行粘貼,就會快速完成表及數據的復制;
而且,復制后的表和原表一模一樣,不會造成主鍵和索引的丟失。
2022年5月23日21:01:21
5.清空表數據
只是清空表數據,原有表結構不受影響。
以truncate為例進行說明
第一:表的數據被清空后,表的主鍵依然存在;
第二:表自增值不受影響(也就是說:不會被重置為0);
第三:索引、外鍵、觸發器等均不受影響。
第四:字段的非空屬性會保留。