SQL关键字三分钟入门:INSERT INTO —— 插入数据详解

在数据库操作中,除了查询数据,我们还需要经常添加新记录。例如:

  • 添加一个新用户;
  • 插入一条订单信息;
  • 批量导入一批商品数据。

这时候就需要使用 SQL 中非常基础但极其重要的关键字 ------ INSERT INTO

它是向表中插入新行(记录)的核心方式,掌握它能让你轻松地为数据库"添砖加瓦"。


什么是 INSERT INTO?

INSERT INTO 是 SQL 中用于将新记录插入到表中的关键字语句。

你可以把它理解为:"我要往这张表里添加一行新数据"。


基本语法

1. 插入完整的一行数据(指定所有字段)

sql 复制代码
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

2. 插入部分字段(只写需要的列)

sql 复制代码
INSERT INTO table_name (column1, column2)
VALUES (value1, value2);

⚠️ 注意:如果某些字段有默认值(如 DEFAULTAUTO_INCREMENT),不写也可以自动填充。

3. 插入多条记录(批量插入)

sql 复制代码
INSERT INTO table_name (column1, column2)
VALUES 
    (value1_1, value1_2),
    (value2_1, value2_2),
    ...
;

示例讲解

假设我们有一个 users 表,结构如下:

id name age gender created_at

其中:

  • id 是主键,自增;
  • created_at 默认值为当前时间。

示例1:插入一条完整的记录

sql 复制代码
INSERT INTO users (name, age, gender, created_at)
VALUES ('张三', 20, '男', '2025-06-20');

这会插入一个名为"张三",年龄20,性别男,注册时间为今天的新用户。


示例2:插入部分字段(省略自增和默认字段)

sql 复制代码
INSERT INTO users (name, age, gender)
VALUES ('李四', 22, '女');

因为 id 是自增字段,created_at 有默认值,所以可以不写,系统会自动处理。


示例3:批量插入多个用户

sql 复制代码
INSERT INTO users (name, age, gender)
VALUES
    ('王五', 21, '男'),
    ('赵六', 19, '女'),
    ('孙七', 23, '男');

一次插入三条记录,效率更高,适合批量导入数据。


示例4:从其他表插入数据(INSERT INTO SELECT)

有时候你想把一张表的数据插入到另一张结构相似的表中:

sql 复制代码
INSERT INTO users_backup (name, age, gender)
SELECT name, age, gender FROM users WHERE age > 20;

users 表中年龄大于20岁的用户插入到 users_backup 表中。


注意

操作技巧 使用建议
主键或唯一约束冲突 插入时若违反主键或唯一索引约束,会报错;可使用 INSERT IGNOREON CONFLICT(PostgreSQL)避免错误
自动增长字段 如果是自增主键,可以不写该列,系统会自动分配
默认值 若某列设置了默认值,可以不写,系统会自动填默认值
批量插入性能更优 多条记录尽量用一个 INSERT 语句插入,而不是多次单条插入
数据类型匹配 插入的值必须与字段类型匹配,否则可能报错或插入失败

总结对比表

场景 SQL 示例
插入单条记录 INSERT INTO users (name, age) VALUES ('张三', 20);
插入部分字段 INSERT INTO users (name, age) VALUES ('李四', 22);
批量插入多条记录 INSERT INTO users (...) VALUES (...), (...), (...);
从其他表插入数据 INSERT INTO target_table SELECT * FROM source_table;
相关推荐
码云数智-园园3 小时前
Oracle 锁等待、会话阻塞故障复盘:生产事故排查步骤
数据库·oracle
哈__4 小时前
从 MySQL 到在线表格:NocoDB 自托管部署、数据导入与远程访问
数据库·mysql
倔强的石头1065 小时前
高可用与无感扩容——分布式时序数据库选型指南
数据库·分布式·时序数据库
袋鼠云数栈13 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛1392462567314 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛1392462567314 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
倔强的石头_16 小时前
事务边界与批量写入:避免长事务、锁等待和日志压力
数据库
努力努力再努力wz16 小时前
【Redis入门系列】从 KEYS 到 SCAN:渐进式遍历、Cursor 与位反转原理
数据库·redis·缓存
坐吃山猪17 小时前
【多线程】Lock与Condition
大数据·数据库
Lightpwd17 小时前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
数据库·后端