网站首页 > 文章精选 正文
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
猜你喜欢
- 2025-05-09 面试必问的 MySQL 四种隔离级别,看完吊打面试官
- 2025-05-09 面试官:mysql自增长id用完了怎么办?这是我见过最中肯的答案了
- 2025-05-09 阿里面试:MySQL Binlog有哪些格式?底层原理?优缺点?
- 2025-05-09 1.5万字+30张图盘点程序员面试必会MySQL索引常见的11个知识点
- 2025-05-09 面试中的老大难-mysql事务和锁,一次性讲清楚
- 2025-05-09 手把手指导Linux系统centos7安装数据库MySQL5.7
- 2025-05-09 面试官问我MySQL索引为啥用B+树?我让他去问作者
- 2025-05-09 MySQL面试题:自增ID达到上限了会出现什么问题?
- 2025-05-09 MySQL索引失效问题,看完手撕面试官
- 2025-05-09 阿里面试:MySQL死锁的原因?解决方案有哪些?
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)