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;

使用两条语句即可执行表的复制。

posted @ 2021-10-14 19:01  钟小嘿  阅读(3621)  评论(0编辑  收藏  举报