INSERT ALL INTO 批量插入写法
时间: 2025-08-05 07:56:46 浏览: 5
在 MySQL 中,并不支持 Oracle 中的 `INSERT ALL INTO` 语法,该语法用于在单条语句中向多个表或同一表的多条记录插入数据。MySQL 提供了其他方式实现类似功能,具体写法如下。
若需一次性向一个表中插入多条记录,可以使用 `INSERT INTO ... VALUES` 语句,并通过逗号分隔多个值集合,示例如下:
```sql
INSERT INTO runway_picture (file_name, file_path, file_time, file_type, file_size)
VALUES
('file1.jpg', '/path1', NOW(), 'image', 2048),
('file2.png', '/path2', NOW(), 'image', 4096);
```
如果插入的数据来源于其他查询结果,可使用 `INSERT INTO ... SELECT` 语法结构:
```sql
INSERT INTO runway_picture (file_name, file_path, file_time, file_type, file_size)
SELECT 'file1.jpg', '/path1', NOW(), 'image', 2048
UNION ALL
SELECT 'file2.png', '/path2', NOW(), 'image', 4096;
```
在使用 MyBatis 等 ORM 框架进行批量插入时,可以利用 `<foreach>` 标签动态生成多条插入语句,示例如下:
```xml
<insert id="insertRunwayPictures">
INSERT INTO runway_picture (file_name, file_path, file_type, file_size, file_time)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.fileName}, #{item.filePath}, #{item.fileType}, #{item.fileSize}, NOW())
</foreach>
</insert>
```
上述写法中,`<foreach>` 标签用于遍历传入的列表对象,并为每项生成对应的值行,最终组合成一条完整的 `INSERT` 语句[^1]。
若插入操作中涉及唯一键冲突,并希望在冲突时更新已有记录,可以使用 `ON DUPLICATE KEY UPDATE` 子句,示例如下:
```sql
INSERT INTO runway_picture (file_name, file_path, file_time, file_type, file_size)
VALUES ('file1.jpg', '/path1', NOW(), 'image', 2048)
ON DUPLICATE KEY UPDATE file_path = '/newpath1', file_size = 2048;
```
此语法在插入数据时,若发现唯一索引或主键冲突,则会执行 `UPDATE` 部分更新已有记录的字段值[^2]。
阅读全文
相关推荐



















