慎用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值也不一样了。

猜你喜欢

转载自bijian1013.iteye.com/blog/2363175