欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

create table like 和create table as select的区别对比,mysql和oracle复制表

程序员文章站 2022-06-03 08:01:56
...

语法

create table table_new like table_old;

create table table_new as select * from table_old;

区别

create table like 复制表结构和索引等约束,没有数据,不支持oracle

create table as select复制表结构和数据,没有索引等约束。

两种方式在复制表的时候均不会复制权限对表的设置。比如说原本对表B做了权限设置,复制后,表A不具备类似于表B的权限。

 

性能测试

1 mysql

1.1 准备

建表

CREATE TABLE `demo` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `varchar1` varchar(100) NOT NULL COMMENT '有索引,长度全覆盖',
  PRIMARY KEY (`id`),
  KEY `idx11` (`varchar1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

造100W条数(我用jdbc插入的)

1.2 实测 

1)create table like

由于like没有复制数据,所以需要insert into demo_like select * from demo;

-- 1 like方式复制表 完全复制
create table demo_like like demo;
insert into demo_like select * from demo;

create table like 和create table as select的区别对比,mysql和oracle复制表

create table like 和create table as select的区别对比,mysql和oracle复制表

2)create table as select

-- 2 as方式复制表  只有基本表结构,索引等丢失
create table demo_as as select * from demo; 

create table like 和create table as select的区别对比,mysql和oracle复制表

 

2 oracle

2.1 准备

建表

CREATE TABLE "DEMO" ( "ID" NUMBER ( 20, 0 ) NOT NULL ENABLE, "VARCHAR1" NVARCHAR2 ( 100 ) NOT NULL ENABLE, PRIMARY KEY ( "ID" ) );
CREATE INDEX "IDX11" ON "DEMO" ( "VARCHAR1" );

造100W条数(我用jdbc插入的)

1.2 实测 

1)create table like

oracle不支持

2)create table as select

-- 2 as方式复制表  只有基本表结构,索引等丢失
create table demo_as as select * from demo; 

create table like 和create table as select的区别对比,mysql和oracle复制表