网站首页 > 教程文章 正文
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
- 上一篇: mysql 之json字段详解(多层复杂检索)
- 下一篇: MySQL字段内容拆分及合并
猜你喜欢
- 2025-04-26 MySQL与SQLite:如何通过DESCRIBE命令查看表结构并解决常见问题
- 2025-04-26 设计 MySQL 表的 14 条原则
- 2025-04-26 使用MySQL全文索引,我让女同事的代码快了1000倍
- 2025-04-26 mysql 替换某一个字段中的字符串
- 2025-04-26 mysql数据库——约束
- 2025-04-26 Mysql数据库替换整张表中某字段中指定的部分字符
- 2025-04-26 对线面试官:MySQL 给数据表增加一列,一定会锁表吗?
- 2025-04-26 如何确保mysql的alter语句不锁表
- 2025-04-26 MySQL字段内容拆分及合并
- 2025-04-26 mysql 之json字段详解(多层复杂检索)
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)