很多时候我们习惯于用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值也不一样了。