如何用 VALUES 子句实现多行插入的批量写法

来源:APP编程网作者:新加坡程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《如何用 VALUES 子句实现多行插入的批量写法》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用 VALUES 子句实现多行插入的批量写法》有用,将其分享出去将是对创作者最好的鼓励。

在关系型数据库的日常使用中,当需要一次性插入多条数据时,使用VALUES子句的多行插入批量写法,比多次执行单条INSERT语句效率更高,能减少数据库连接开销和SQL解析成本。

VALUES子句多行插入的基础语法

标准SQL中,使用VALUES子句实现多行插入的基础语法结构如下,核心是在VALUES关键字后跟上多组用括号包裹的数据,每组数据对应一行插入记录,组与组之间用英文逗号分隔:

-- 基础多行插入语法
INSERT INTO 表名 (列1, 列2, 列3)
VALUES 
(值1_1, 值1_2, 值1_3),
(值2_1, 值2_2, 值2_3),
(值3_1, 值3_2, 值3_3);

需要注意的是,每一组数据的列数必须和目标表的列数(或者INSERT语句中指定的列数)完全匹配,每一列的数据类型也要和表定义的列类型兼容,否则会触发语法错误或者类型转换异常。

不同数据库中的使用示例

MySQL中的使用

MySQL对VALUES子句的多行插入支持非常完善,以下示例向用户表中批量插入3条用户数据:

-- 创建测试用户表
CREATE TABLE IF NOT EXISTS user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    age INT,
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 使用VALUES子句批量插入3条数据
INSERT INTO user (username, age)
VALUES 
('张三', 22),
('李四', 25),
('王五', 28);

PostgreSQL中的使用

PostgreSQL同样支持标准的VALUES多行插入语法,示例和MySQL类似,仅表创建的细微语法差异,插入部分的写法完全一致:

-- 创建测试用户表
CREATE TABLE IF NOT EXISTS user (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    age INT,
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 批量插入数据
INSERT INTO user (username, age)
VALUES 
('张三', 22),
('李四', 25),
('王五', 28);

SQL Server中的使用

SQL Server也支持VALUES子句的多行插入,语法和上述两种数据库一致,以下为示例:

-- 创建测试用户表
CREATE TABLE IF NOT EXISTS user (
    id INT IDENTITY(1,1) PRIMARY KEY,
    username NVARCHAR(50) NOT NULL,
    age INT,
    create_time DATETIME DEFAULT GETDATE()
);

-- 批量插入数据
INSERT INTO user (username, age)
VALUES 
('张三', 22),
('李四', 25),
('王五', 28);

使用注意事项

  • 每组数据的列数必须一致,若INSERT语句指定了3个列,那么VALUES后每一组都必须有3个对应的值,不能多也不能少。
  • 字符串类型的值需要用英文单引号包裹,日期类型的值也建议使用单引号包裹,避免不同数据库的解析差异。
  • 批量插入的行数不是无限的,不同数据库对单条SQL语句的长度、参数数量有限制,比如MySQL的max_allowed_packet参数会限制单条SQL的最大长度,如果插入数据量过大,建议拆分多个批量插入语句执行。
  • 如果插入的表中存在自增主键,不需要在VALUES中指定自增列的值,数据库会自动生成对应的值。

常见误区

很多初学者会错误地在每个数据组前都重复写一次VALUES关键字,比如写成如下错误写法:

-- 错误写法,会触发语法错误
INSERT INTO user (username, age)
VALUES ('张三', 22),
VALUES ('李四', 25),
VALUES ('王五', 28);

正确的写法是在第一个数据组前写一次VALUES,后续的数据组直接用逗号分隔即可,不需要重复写VALUES关键字。

批量插入和单条插入的效率对比

我们可以通过简单的测试对比两种写法的效率,以下是在MySQL中插入1000条数据的两种写法耗时对比:

插入方式耗时(毫秒)
单条INSERT循环执行1000次约1200
VALUES子句一次性批量插入1000条约80

可以看到批量写法的效率远高于单条循环插入,在数据量越大时,差距会越明显。因此在实际开发中,当需要插入多条数据时,优先使用VALUES子句的多行插入批量写法。

VALUES子句多行插入批量插入SQL语句修改时间:2026-06-22 16:06:58

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。