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