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

31 篇文章 1 订阅
14 篇文章 0 订阅

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对比,丢失主键、主键自增、索引等约束。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茅坑的小石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值