云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

MySQL笔试题-INSERT SELECT批量插入

jxf315 2025-04-26 19:01:23 教程文章 18 ℃

MySQL中的INSERT ... SELECT语句允许用户通过一条SQL语句实现从一个或多个表中查询数据并将结果插入到另一个表中。这种操作广泛应用于数据迁移、备份或基于多表查询结果创建新表等场景。

注意事项

INSERT INTO 目标表(字段1,字段2...) SELECT 源字段1,源字段2... FROM 源表 ;

不能写AS 或 VALUES .

如果"SELECT * FROM 源表"的多个字段与目标表的多个字段一致,则可以写成"INSERT INTO 目标表 SELECT * FROM 源表 ;"

目标字段类型与源字段类型最好要一致,或者可以从源字段类型转换为目标字段类型才行。

字段名可以不一致,字段数量要一致。

基本语法

INSERT ... SELECT语句的基本语法如下:

INSERT INTO target_table(column1, column2, ...) SELECT column1, column2, ... FROM source_table WHERE condition;

其中,target_table是目标表,用于接收插入的数据;source_table是源表,从中选择数据。可以选择的列可以是源表中的列,也可以是常量值

题目

MySQL中sku_table的表结构如下:
CREATE TABLE `sku_table` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '商品sku_id',
  `name` varchar(100) DEFAULT NULL COMMENT '商品名称',
  `price` double DEFAULT NULL COMMENT '单价',
  `cate3_id` char(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `cate3_id_index` (`cate3_id`)
) ENGINE=InnoDB CHARSET=utf8mb4;
sku_table2的表结构如下:
CREATE TABLE `sku_table2` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '商品sku_id',
  `name` varchar(100) DEFAULT NULL COMMENT '商品名称',
  `price` double DEFAULT NULL COMMENT '单价',
  `cate3_id2` char(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `cate3_id_index` (`cate3_id2`)
) ENGINE=InnoDB CHARSET=utf8mb4;
现在希望把sku_table的记录写入sku_table2中,以下SQL符合预期的是()?
A. 
INSERT INTO sku_table2 AS SELECT * FROM sku_table ;
B. 
INSERT INTO sku_table2 VALUES(SELECT * FROM sku_table) ;
C. 
INSERT INTO sku_table2(id,name,price,cate3_id2)  VALUES(SELECT * FROM sku_table) ;
D. 
INSERT INTO sku_table2 SELECT * FROM sku_table ;
答案: D
题目解析:
选D,ABC执行时均报错。
查询时插入的语法格式:
INSERT INTO 目标表(字段1,字段2...)  SELECT 源字段1,源字段2...  FROM 源表 ;
不能写AS 或 VALUES .
如果"SELECT * FROM 源表"的多个字段与目标表的多个字段一致,则可以写成"INSERT INTO 目标表 SELECT *  FROM 源表 ;"
目标字段类型与源字段类型最好要一致,或者可以从源字段类型转换为目标字段类型才行。
字段名可以不一致,字段数量要一致。
mysql> SELECT * FROM sku_table ;
+------+--------+-------+-----------+
| id   | name   | price | cate3_id  |
+------+--------+-------+-----------+
| 1001 | Note20 |  1000 | 43        |
| 1002 | K40    |  2000 | 43        |
| 1003 | K9     |  1999 | 45        |
| 1004 | X30i   |  1399 | 45        |
+------+--------+-------+-----------+
4 rows in set (0.00 sec)
 
mysql> SELECT * FROM sku_table2 ;
Empty set (0.00 sec)
 
A
mysql> INSERT INTO sku_table2 AS SELECT * FROM sku_table ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS SELECT * FROM sku_table' at line 1
 
B
mysql> INSERT INTO sku_table2 VALUES(SELECT * FROM sku_table) ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM sku_table)' at line 1
mysql> 
 
C
mysql> INSERT INTO sku_table2(id,name,price,cate3_id2)  VALUES(SELECT * FROM sku_table) ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM sku_table)' at line 1
mysql> 
 
D 正确
mysql> INSERT INTO sku_table2 SELECT * FROM sku_table ;
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0
 
mysql> SELECT * FROM sku_table2 ;
+------+--------+-------+-----------+
| id   | name   | price | cate3_id2 |
+------+--------+-------+-----------+
| 1001 | Note20 |  1000 | 43        |
| 1002 | K40    |  2000 | 43        |
| 1003 | K9     |  1999 | 45        |
| 1004 | X30i   |  1399 | 45        |
+------+--------+-------+-----------+
4 rows in set (0.00 sec)

end

最近发表
标签列表