create table like、create table select、insert into select的区别对比。sql(mysql、oracle等)复制表结构、表数据、索引。

1.结论

1.1.语法

-- 1.创建表不复制数据(含表结构和索引、自增等约束)。不支持oracle。
create table {table_new} like   {table_old};
-- 2.不建表只复制数据(数据来自select。select很灵活,可以select任意字段,可以连表)
insert into  {table_new} select * from {table_old};
-- 3.创建表并复制数据(表结构来自select,所以不含索引等约束。select很灵活,可以select任意字段,可以连表)
create table {table_new} select * from {table_old};

1.2.区别

create的两种方式均不会复制权限对表的设置。比如说原本对表old做了权限设置,复制后,表new不具备类似于表old的权限。

1.2.1.create table like

  • 创建表不复制数据(含表结构和索引、自增等约束)。
  • 不支持oracle。

1.2.2.insert into select

  • 不建表只复制数据(数据来自select。select很灵活,可以select字段,可以连表)。
  • 需提前创建好表。

1.2.3.create table as select

  • 创建表并复制数据(表结构来自select,所以不含索引等约束。select很灵活,可以select字段,可以连表)。
  • as可以省略

2.实例测试

2.1.创建测试表和数据

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`
(
    `id`    bigint       NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `name1` varchar(100)          DEFAULT NULL COMMENT '姓名,无约束',
    `name2` varchar(100) NOT NULL DEFAULT '' COMMENT '姓名。有索引、not null约束',
    PRIMARY KEY (`id`),
    KEY `bigint2` (`name1`)
);

-- 插入2条数据
INSERT INTO `user` (`id`, `name1`, `name2`) VALUES (1, '张三', '张三'),(2, '李四', '李四');

2.2.执行建表sql语句

create table user_like like user;
create table user_select select * from user;

2.3.与原表对比

  • 表user_like与user表结构完全一致。
  • 表user_select与user对比,丢失主键、主键自增、索引等约束。

posted on 2019-11-05 17:13  小石头小祖宗  阅读(33)  评论(0编辑  收藏  举报  来源

导航