MySQL create table as與create table like對比


MySQL中表的克隆有多種,常用的是create table as和create table like,兩者有所差別。

① reate table as  只能部分克隆表結構,但完整保留數據

② create table like會完整地克隆表結構,但不會插入數據,需要單獨使用insert into或load data方式加載數據

1.准備工作

先准備一些測試數據:

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `user_name` varchar(200) DEFAULT '',
  `phone` varchar(200) DEFAULT '',
  `b_code` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
INSERT INTO `db2020`.`user`(`id`, `user_name`, `phone`, `b_code`) VALUES (1, '李明', '101', '2021001');
INSERT INTO `db2020`.`user`(`id`, `user_name`, `phone`, `b_code`) VALUES (2, '趙慧', '456', '2020001');
INSERT INTO `db2020`.`user`(`id`, `user_name`, `phone`, `b_code`) VALUES (3, '李凱', '123', '2021002');
INSERT INTO `db2020`.`user`(`id`, `user_name`, `phone`, `b_code`) VALUES (6, '張三1', '123', '2022001');
INSERT INTO `db2020`.`user`(`id`, `user_name`, `phone`, `b_code`) VALUES (7, '張三2', '123', '2021003');

查詢表說明如下:

desc user;

查詢的結果如下:

select * from user

2.create table as

使用create table as復制表:

create table user_bk as select * from user;

1)查詢表數據:

select * from user_bk

2)查詢表說明:

desc user_bk

 會發現數據可完整的復制過來,但主鍵、自動遞增和索引丟失了。

上述復制的全部的數據,當然也可以只復制部分數據,在后面添加where條件即可

create table user_bk as select * from user where b_code like '2021%';

對於5.6及以上的版本內,MySQL默認開啟了 enforce_gtid_consistency=true 功能,若不關閉,則會出現下面的錯誤:

Statement violates GTID consistency

關閉的命令:

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = off;

3.create table like

使用create table like復制表:

create table user_bk2 like user;

1)查詢表數據:

select * from user_bk2

2)查詢表說明:

desc user_bk

 會發現數據結構可完整的復制過來,但沒有數據。

3)解決方案

若想完整的復制表結構和數據,只能使用like這種方式。先復制表結構,然后使用insert into復制數據過來。

create table user_bk3 like user;
insert into user_bk3  select * from user;

使用兩條語句即可執行表的復制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM