在MySQL中,用什么命令可以实现选择性复制表数据吗?
比如,从A
表查询id
、name
的所有数据, 插入到表B
的a_id
、name
。
可以的,而且很方便,组合INSERT
和SELECT
命令就行。
1 读取一个表
假设有表 order
,要读取表 user
中部分字段的所有值,并插入到表中。命令如下:
INSERT INTO order(title, description, update_time) SELECT name, desc, unix_timestamp(now()) FROM user;
这条语句要求目标表order
必须存在,而且字段已经定义好。
由于目标表order
已经存在,所以除了能够插入源表user
的字段外,还可以插入常量,如上的时间now()
。
2 同时创建表
同上的例子,但是order
表不存在,我们从user
表中读取数据,再创建order
表,之后再插入数据:
SELECT name, desc INTO order FROM user;
这里要求order
表原本不存在。
3 读取多表
现在有3个表,boy
、girl
和target
,我们要从boy
、girl
表中筛选若干个字段,插入到target
指定的字段中,命令如下:
INSERT INTO target(bname, gname, update_time) SELECT b.name, g.name, unix_timestamp(now()) from boy as b join `girl` as g;
如果target
表原本没有数据,那么执行之后,target
中的数据量就是表girl
和boy
两个表数据数的乘机。
参考资料: