復制數據表的方法有很多最,最簡單的就直接把mysql data目錄下的與你數據庫相同的一起復制,這樣數據表與庫都復制過來了.
以下范例都是把 old_table 復制到 new_table,先講講結論,最推薦的作法是下述兩行,代碼如下:
- CREATE TABLE new_table LIKE old_table;
- INSERT new_table SELECT * FROM old_table;
以下來講講幾種作法和優缺點,MyISAM 的作法若比較暴力點的話,可以用下述方式做,代碼如下:
- CREATE TABLE new_table;
- /etc/init.d/mysql stop
- cd /var/lib/mysql/database_name
- cp old_table.MYI new_table.MYI
- cp old_table.MYD new_table.MYD
- /etc/init.d/mysql start
這樣子也可以復制完成,但是這么暴力有可能會有些小問題要解決.
下述作法會比較建議,參考自此篇,sql - fastest way to copy a table in mysql, 不過有下述兩種作法,有些不同,先寫出作法,再來解釋差異.
以下 old_table 若跨 DB, 都可以寫成 old_db.old_table 來指定.
第一種作法:一行語法復制 Table + Data,不過需要手動增加 Primay、index key 等,代碼如下:
1.CREATE TABLE new_table SELECT * FROM old_table; # 這個作法 Primay、index key 都不會復制,需要手動加.
2.ALTER TABLE new_table ADD PRIMARY KEY (id);
第二種作法:先復制 Table schema,再來 INSERT Data.(建議使用此作法,Schema 一定是一模一樣的),代碼如下:
- CREATE TABLE new_table LIKE old_table;
- INSERT new_table SELECT * FROM old_table;
先來講講第一種作法,此作法 Schema 可能不同,Data 是會正確復制過來的,代碼如下:
CREATE TABLE new_table SELECT * FROM old_table;
此行會把 Table 和 Data 都復制到 new_table, 但是 Table 使用的 Engine、語系編碼 會跟 MySQL 預設的一樣,而不是 Copy old_table 的. 結果可能就會是下述的狀況: 要看你的系統設定而定,old_table 和 new_table 的 schema 可能會不同,但是 Data 是一致的,代碼如下:
- ■CREATE TABLE `old_table` (
- `no` int(8) NOT NULL,
- `cname` varchar(255) DEFAULT NULL,
- PRIMARY KEY (`no`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- ■CREATE TABLE `new_table` (
- `no` int(8) NOT NULL, --Vevb.com
- `cname` varchar(255) CHARACTER SET utf8 DEFAULT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
第二種作法:此作法可以將 Schema 和 Data 都是一模一樣的復制過來.
CREATE TABLE new_table LIKE old_table;
此行會完整復制 Table Schema, 先復制完 Table Schema 后,再來把資料一筆一筆 INSERT 進去.
新聞熱點
疑難解答