慎用SELECT INTO复制表

        很多时候我们习惯于用SELECTINTO复制一个表或表结构,因为它方便,快捷,而且在某些情况下效率比INSERT INTO 效率要高一些。但是要注意: SELECT INTO 复制表或表结构的时候,只是得到了一个“外壳”,就像克隆人一样,只是得到了一个躯体,个人的意识、回忆都不会克隆的。像原表的主键、外键、约束、触发器、索引都不会被复制过来。这点要注意哦,在某些情况下,没有注意的话,会照成“灾难后果的”,下面给个脚本例子,给大家演示下SELECT INTO复制表或表结构时,没有得到原表的主键、timestamp类型字段的DEFAULT值。

  建表SQL:

DROP TABLE IF EXISTS `order_flow`;
CREATE TABLE `order_flow` (
	`req_date` varchar(8) DEFAULT NULL COMMENT '请求日期 YYYYMMDD',
	`req_time` varchar(6) DEFAULT NULL COMMENT '请求日期HHMMSS',
  	`amount` decimal(15,2) DEFAULT NULL COMMENT '交易金额',
	`order_id` varchar(32) NOT NULL COMMENT '订单号',
	`order_desc` varchar(256) DEFAULT NULL COMMENT '订单描述',
  	`create_time` datetime  NOT NULL COMMENT '创建时间',
  	`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  COMMENT '更新时间',	
  PRIMARY KEY (`order_id`, `req_date`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='交易流水表';

        实例操作如下:

mysql> show create table order_flow;
+------------+------------------------------------------------------------------------------------------------------
| Table      | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
+------------+------------------------------------------------------------------------------------------------------
| order_flow | CREATE TABLE `order_flow` (
  `req_date` varchar(8) NOT NULL DEFAULT '' COMMENT '请求日期 YYYYMMDD',
  `req_time` varchar(6) DEFAULT NULL COMMENT '请求日期HHMMSS',
  `amount` decimal(15,2) DEFAULT NULL COMMENT '交易金额',
  `order_id` varchar(32) NOT NULL COMMENT '订单号',
  `order_desc` varchar(256) DEFAULT NULL COMMENT '订单描述',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`order_id`,`req_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='交易流水表'                                 |
+------------+------------------------------------------------------------------------------------------------------
1 row in set (0.01 sec)

mysql> create table test as select * from order_flow;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table test;
+-------+-----------------------------------------------------------------------------------------------------------
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
+-------+-----------------------------------------------------------------------------------------------------------
| test  | CREATE TABLE `test` (
  `req_date` varchar(8) NOT NULL DEFAULT '' COMMENT '请求日期 YYYYMMDD',
  `req_time` varchar(6) DEFAULT NULL COMMENT '请求日期HHMMSS',
  `amount` decimal(15,2) DEFAULT NULL COMMENT '交易金额',
  `order_id` varchar(32) NOT NULL COMMENT '订单号',
  `order_desc` varchar(256) DEFAULT NULL COMMENT '订单描述',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8                            |
+-------+------------------------------------------------------------------------------------------------------------
1 row in set (0.01 sec)

        我们发现,复制表没有COMMENT、主键,update_time字段的DEFAULT值也不一样了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值