少用实用的语句 - A表数据导入B表 ¶
作者:KK
发表日期:2020.02.17
比如A表 的结构如下:
CREATE TABLE `bbb` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(24) NOT NULL COMMENT '产品ID',
`username` varchar(56) CHARACTER SET utf8 NOT NULL COMMENT '用户名',
`type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否是正式用户:1=内测用户, 2=正式用户',
`comment` varchar(765) CHARACTER SET utf8 DEFAULT '' COMMENT '备注',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`pid`,`username`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
而B表 的结构如下:
CREATE TABLE `aaa` (
`pid` int(24) NOT NULL COMMENT '产品ID',
`username` varchar(56) CHARACTER SET utf8 NOT NULL COMMENT '用户名',
`type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否是正式用户:1=内测用户, 2=正式用户',
`comment` varchar(765) CHARACTER SET utf8 DEFAULT '' COMMENT '备注',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`pid`,`username`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
B表是一张设计有所缺陷的表,由于某些原因不方便动它,于是就另外新建了A表,接下来把数据从B表导入到A表里面: (pid, username, type, comment, create_time)
INSERT INTO bbb (pid, username, type, comment, create_time, update_time) SELECT pid, username, type, comment, create_time, create_time as update_time FROM aaa;
#优化排版如下:
INSERT INTO bbb
(pid, username, type, comment, create_time, update_time) #声明要插入哪些字段
SELECT
pid, username, type, comment, create_time, create_time as update_time #因为 bbb 表新增了 update_time,就查出 create_time 的值作为 update_time 的值来导入
FROM aaa