我們在使用資料庫的過程中,經常會碰到需要複製一個表的結構或者資料的情況,今天就大致總結了mysql中複製表結構和資料的相應方案。記錄一下,以備不時之需。
總的來說,複製分為兩大類:複製表結構和複製表資料(當然也可以同時複製表結構和表資料)。
現在假設我們有個資料表src:
我們先看錶的結構和資料:(需要注意的是我們在表的id,wp_id,label_id都加上了索引)
desc src;
select * from src;
下面對各種方案進行測試和總結:
1. 通過 create table xx as select * from 的方式複製表。
create table src_test as select * from src;
然後我們再看新表的資料和結構:
desc src_test;
仔細看圖中的key的地方:我們發現,在複製表的過程中,丟失了原表的索引等資訊。這些索引可以通過手動的方式添加。
再看資料:
select * from src_test;
可見資料是複製過來了。因而這種方式適合copy原表的資料,但是如果要保留索引資訊,需要選擇其他的方式。
另外,如果要複製的僅僅是表結構,而且要保持索引的,該方案也不適合。
2. 通過create table like來複製表結構和索引
還有一種方式,可以只複製表的結構而不複製表的資料。
create table src_test like src;
圖中可以看出來:create table XXX like YYY 方式僅僅複製了原表的表結構,沒有複製表資訊,而且在複製表結構的同時保留了原表的索引等資訊。
那麼資料呢,我們可以通過insert XX select 的方式copy資料:
當然,通過這種方式,也可以將原表的部分資料插入到新表的相應欄位中。
3. 通過複製原表的建表語句,建立新的表:
show create table src;
另外:很多資料庫管理軟體(如phpmyadmin,navicat,mysql-front,mymanager等)都支援匯出為sql語句的功能。可以匯出為sql檔案後再copy相應的表或者資料。
大家還有什麼更好的方案:歡迎留言。
備忘錄,學無止境。