在SQL数据库操作中,INSERT语句是实现数据新增的核心语法,几乎所有业务场景下的初始数据录入、业务数据新增都需要通过该语句完成。不同数据库虽然对INSERT有部分扩展语法,但基础用法是通用的。

INSERT语句基础语法
最基础的INSERT语法用于向指定表中插入一条完整数据,需要指定表名和对应的值,语法结构如下:
-- 基础插入语法,字段顺序和值顺序一一对应 INSERT INTO 表名 (字段1, 字段2, 字段3) VALUES (值1, 值2, 值3);
如果插入的数据覆盖了表中所有字段,且值的顺序和表定义的字段顺序完全一致,可以省略字段列表,语法如下:
-- 省略字段列表的插入语法,值顺序需要和表字段顺序完全一致 INSERT INTO 表名 VALUES (值1, 值2, 值3);
不同场景的插入用法
插入单条数据
假设我们有一个用户表user_info,表结构包含id、username、age、create_time四个字段,插入一条单条用户数据的示例如下:
-- 插入单条用户数据,id自增可以省略,create_time使用当前时间
INSERT INTO user_info (username, age, create_time)
VALUES ('张三', 25, NOW());
批量插入数据
如果需要一次性插入多条数据,不需要重复写多个INSERT语句,可以在VALUES后跟上多组值,每组值用逗号分隔,示例如下:
-- 批量插入3条用户数据
INSERT INTO user_info (username, age, create_time)
VALUES
('李四', 22, NOW()),
('王五', 28, NOW()),
('赵六', 24, NOW());
插入查询结果
INSERT语句还支持将另一个查询的结果直接插入到目标表中,常用于数据迁移、备份表数据等场景,语法如下:
-- 将user_info表中年龄大于25的用户插入到user_info_backup备份表 INSERT INTO user_info_backup (username, age, create_time) SELECT username, age, create_time FROM user_info WHERE age > 25;
使用INSERT的注意事项
- 插入的值的类型必须和对应字段的类型匹配,比如数值类型字段不能插入字符串,日期类型字段需要符合日期格式要求。
- 如果字段设置了非空约束且没有默认值,插入数据时必须为该字段提供值,否则会抛出错误。
- 插入的值需要满足表的约束条件,比如主键不能重复、唯一索引字段的值不能重复,否则插入会失败。
- 不同数据库对INSERT的扩展语法有差异,比如MySQL支持
INSERT IGNORE忽略重复错误,PostgreSQL支持ON CONFLICT处理冲突,使用时需要结合对应数据库的文档。
常见错误排查
如果插入数据时出现错误,可以先检查以下几点:
1. 表名、字段名是否拼写正确,注意部分数据库对字段名大小写敏感。
2. 值的个数是否和字段列表的个数一致,顺序是否对应。
3. 插入的值是否违反了表的约束条件,比如主键重复、非空字段未赋值等。
4. 特殊字符是否需要转义,比如字符串中的单引号需要用两个单引号表示。
掌握INSERT语句的这些用法和注意事项,就能应对绝大多数SQL数据插入的场景,提升数据库操作的效率。