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   小石头小祖宗  阅读(45)  评论(0编辑  收藏  举报  

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示