mysql table 复制_MySQL 快速複製 Table 的方法

MySQL 要複製 整個 Table, 要怎麼做呢?

MySQL 快速複製 Table 的方法

以下範例都是把 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 等.

CREATE TABLE new_table SELECT * FROM old_table; # 這個作法 Primay、index key 都不會複製, 需要手動加

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,

`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 進去.

c1Ud9gJlqyA

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值