create table tb as select 和create table tb like的区别
答案:2 悬赏:70 手机版
解决时间 2021-03-09 08:13
- 提问者网友:欲望失宠
- 2021-03-08 08:31
create table tb as select 和create table tb like的区别
最佳答案
- 五星知识达人网友:三千妖杀
- 2021-03-08 09:56
1.INSERT INTO Table2 SELECt * from Table1
要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量
2.SELECt * INTO Table2 FROM Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中
要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量
2.SELECt * INTO Table2 FROM Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中
全部回答
- 1楼网友:酒安江南
- 2021-03-08 11:22
测试create table a as select * from b 与create table a like b的区别
mysql下测试:
源表:ti
表结构如下
root:test> show create table ti\g
*************************** 1. row ***************************
table: ti
create table: create table `ti` (
`id` int(11) default null,
`amount` decimal(7,2) default null,
`m_photo_big` varchar(64) default null,
`tr_date` date default null,
`new_msg_flag` tinyint(4) not null default '0',
`love_listreq` int(3) default '1',
`love_listconfig` int(3) default '1',
key `new_msg_flag` (`new_msg_flag`)
) engine=innodb default charset=latin1
1 row in set (0.00 sec)
a 使用create as select语句创建表
root:test> create table ti2 as select * from ti limit 0;
query ok, 0 rows affected (0.00 sec)
sroot:test> how create table ti2 ;
----------------------------
create table `ti2` (
`id` int(11) default null,
`amount` decimal(7,2) default null,
`m_photo_big` varchar(64) default null,
`tr_date` date default null,
`new_msg_flag` tinyint(4) not null default '0',
`love_listreq` int(3) default '1',
`love_listconfig` int(3) default '1'
) engine=innodb default charset=latin1
对比源表的表结构,发现key `new_msg_flag` (`new_msg_flag`)没有被创建
b 使用like子句创建表
root:test> create table ti1 like ti;
query ok, 0 rows affected (0.06 sec)
root:test> show create table ti1;
----------------------------------------
create table `ti1` (
`id` int(11) default null,
`amount` decimal(7,2) default null,
`m_photo_big` varchar(64) default null,
`tr_date` date default null,
`new_msg_flag` tinyint(4) not null default '0',
`love_listreq` int(3) default '1',
`love_listconfig` int(3) default '1',
key `new_msg_flag` (`new_msg_flag`)
) engine=innodb default charset=latin1
对比源表的表结构,两者完全一致,完整的包含了表结构和索引
结论:mysql下create table a as select * from b形式创建的表不包含索引信息,like子句形式包含完整表结构和索引信息
所以 as select 子句一般适用于建表并复制源表数据的情况,like子句适用于只复制表结构的情况
误用的风险: 索引的缺失对于业务的性能是致命的,不必多说.
oracle下:
a create as select同样不会创建索引
b oracle不支持like子句
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯