蒙国造博客

MySQL选择性复制表数据

在MySQL中,用什么命令可以实现选择性复制表数据吗?

比如,从A表查询idname的所有数据, 插入到表Ba_idname

可以的,而且很方便,组合INSERTSELECT命令就行。

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个表,boygirltarget,我们要从boygirl表中筛选若干个字段,插入到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中的数据量就是表girlboy两个表数据数的乘机。

 

参考资料:

  1. 语法:MySQL中INSERT INTO SELECT的使用
  2. mysql中SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
退出移动版