mysql中insert...select复制表数据

语法

INSERT INTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name

实例

可以运行insert...select语法解决问题:

insert into hotel_ktv (title,price, number,date,area,content,num) select title,price,number,date,area,content,num from hotel_ktv;

查看结果

 代码如下 复制代码
mysql> select * from hotel_ktv;
+----+-------+-------+--------+-------------------+------+----------------------+-----+
| id | title | price | number | date              | area | content              | num |
+----+-------+-------+--------+-------------------+------+----------------------+-----+
|  1 | K1    |  1680 |     20 | 19:00-次日01:00         | 70   | 备注:需加收15%服务费                |   1 |
|  2 | K1    |  1680 |     20 | 19:00-次日01:00         | 70   | 备注:需加收15%服务费                |   1 |
|  3 | K1    |  1680 |     20 | 19:00-次日01:00         | 70   | 备注:需加收15%服务费                |   1 |
|  4 | K1    |  1680 |     20 | 19:00-次日01:00         | 70   | 备注:需加收15%服务费                |   1 |
+----+-------+-------+--------+-------------------+------+----------------------+-----+
4 rows in set (0.00 sec)

已经成功复制了4条相同的数据,这样可以方便我们进行数据测试。

 上面的语句比较适合两个表的数据互插,如果多个表就不适应了。对于多个表,可以先将需要查询的字段JOIN起来,然后组成一个视图后再SELECT FROM就可以了:

 代码如下 复制代码

INSERT INTO a (field1,field2) SELECT * FROM(SELECT b.f1,c.f2 FROM b JOIN c) AS tb
 

      其中f1是表b的字段,f2是表c的字段,通过JOIN查询就将分别来自表b和表c的字段进行了组合,然后再通过SELECT嵌套查询插入到表a中,这样就满足了这个场景了,如果需要不止2个表,那么可以多个JOIN的形式来组合字段。

2. 语法错误注意

      需要注意的是嵌套查询部分最后一定要有设置表别名,如下:

 代码如下 复制代码

SELECT * FROM (SELECT f1,f2 FROM b JOIN c) AS tb

      即最后的AS tb是必须的(tb这个名称可以随意取),即指定一个别名。每个派生出来的新表都必须指定别名,否则在mysql中会报如下错误:

ERROR 1248 (42000): Every derived TABLE must have its own alias
 

      另外,MySQL中INSERT INTO SELECT不能加VALUES,即不能写成如下形式:

 代码如下 复制代码

INSERT INTO db1_name(field1,field2) VALUES SELECT field1,field2 FROM db2_name
 

      否则也会报错:You have an error in your SQL syntax

时间: 2024-10-29 01:51:08

mysql中insert...select复制表数据的相关文章

MySQL使用INSERT SELECT 批量插入数据

使用Insert Select语句插入记录时,必须遵循以下原则. 用Select语句选择数据时,不能从被插入数据的表中选择行. 指定插入的表后所包含的字段数目必须与Select语句中返回的字段数目相同. 指定插入的表后所包含的字段数据类型必须与Select语句中返回的字段数据类型相同或系统可以自动转换.    代码如下 复制代码 INSERT INTO ler_items( classid, title, address, zipcode ) SELECT classid, title, add

mysql中mysqldump 导出单个表数据与结构语句

mysqldump   备份命令 -uroot   root用户 -p123456   密码为123456 mydb   表所在的数据库mydb mytb     将要导出的表mytb > /opt/mytb.sql   备份到mytb.sql中 导出整个数据库database  代码如下 复制代码 mysqldump –opt -uroot -ppassword database > dump.sql ? 该如何导出? 导出单个数据表table  代码如下 复制代码 mysqldump –o

MYSQL中delete删除多表数据与删除关联数据

 1.delete from t1 where 条件 2.delete t1 from t1 where 条件 3.delete t1 from t1,t2 where 条件 4.delete t1,t2 from t1,t2 where 条件 前3者是可行的,第4者不可行. 也就是简单用delete语句无法进行多表删除数据操作,不过可以建立级联删除,在两个表之间建立级联 删除关系,则可以实现删除一个表的数据时,同时删除另一个表中相关的数据. 1.从数据表t1中把那些id值在数据表t2里有匹配的

MySQL复制表数据操作sql语句

MySQL复制表数据操作相信大家都不会太陌生,下面就为您详细介绍MySQL复制表数据到新表的步骤,希望对您会有所启迪.  1.MySQL复制表结构及数据到新表   代码如下 复制代码    CREATE TABLE 新表  SELECT * FROM 旧表      2.只复制表结构到新表   代码如下 复制代码    CREATE TABLE 新表  SELECT * FROM 旧表 WHERE 1=2  即:让WHERE条件不成立.  方法二:(低版本的mysql不支持,mysql4.0.2

mysql 复制表数据,表结构的3种方法

 什么时候我们会用到复制表?例如:我现在对一张表进行操作,但是怕误删数据,所以在同一个数据库中建一个表结构一样,表数据也一样的表,以作备份.如果用mysqldump比较麻烦,备份.MYD,.MYI这样的文件呢,操作起来也还是麻烦. 一,复制表结构 方法1: mysql> create table a like users; //复制表结构 Query OK, 0 rows affected (0.50 sec)   mysql> show tables; +------+ | Tables_i

解析MySQL中INSERT INTO SELECT的使用

1. 语法介绍有三张表a.b.c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段.对于这种情况,可以使用如下的语句来实现:INSERT INTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name  上面的语句比较适合两个表的数据互插,如果多个表就不适应了.对于多个表,可以先将需要查询的字段JOIN起来,然后组成一个视图后再SELECT FROM就可以了: INSERT INTO a (field1,field2

mysql中insert与select的嵌套使用方法_Mysql

本文讲述了mysql中insert与select的嵌套使用的方法,对于初学MySQL的朋友有一定的借鉴价值. 这里需要实现在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现该功能需求.具体情形是:有三张表a.b.c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段.对于这种情况,我们可以使用如下的语句来实现: INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name 当然,上

解析MySQL中INSERT INTO SELECT的使用_Mysql

1. 语法介绍有三张表a.b.c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段.对于这种情况,可以使用如下的语句来实现:INSERT INTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name 上面的语句比较适合两个表的数据互插,如果多个表就不适应了.对于多个表,可以先将需要查询的字段JOIN起来,然后组成一个视图后再SELECT FROM就可以了: INSERT INTO a (field1,field2)

MySQL中insert语句的使用与优化教程_Mysql

MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 如果数据是字符型,必须使用单引号或者双引号,如:"value"