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;
2)create table as select
-- 2 as方式复制表 只有基本表结构,索引等丢失
create table demo_as as select * from demo;
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;