少用实用的语句 - 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