SQL INSERT 插入数据
学习INSERT · 难度:入门 · +10XP
SQL INSERT 插入数据
往数据库表中添加数据是数据库操作中最基础也最频繁的任务之一。无论是用户注册、订单创建、还是日志记录,都离不开 INSERT 语句。SQL 提供了多种插入数据的方式,从简单的单行插入到高效的批量插入和从其他表复制数据,满足不同场景的需求。
INSERT 基本语法
-- 方式一:指定列名插入(推荐)
INSERT INTO 表名(列1, 列2, 列3) VALUES (值1, 值2, 值3);
-- 方式二:按表结构顺序插入所有列
INSERT INTO 表名 VALUES (值1, 值2, 值3, ...);
-- 方式三:一次插入多行
INSERT INTO 表名(列1, 列2) VALUES (值1, 值2), (值3, 值4), (值5, 值6);
完整示例
-- 假设 students 表有 id, name, age, score 列
-- 单行插入(指定所有列)
INSERT INTO students(id, name, age, score)
VALUES (10, '张亮', 20, 88);
-- 插入部分列(未指定列用默认值或NULL)
INSERT INTO students(name, age, score)
VALUES ('赵强', 22, 95); -- id 使用自增
-- 批量插入3行
INSERT INTO students(name, age, score) VALUES
('李明', 19, 75),
('王芳', 21, 82),
('陈静', 20, 91);
从其他表复制数据(INSERT SELECT)
这是最强大的插入方式,可以将一个查询的结果直接插入表中:
-- 将查询结果插入到目标表
INSERT INTO students(name, age, score)
SELECT name, age, score FROM new_students;
-- 带条件的数据迁移
INSERT INTO premium_users(name, email, score)
SELECT name, email, score FROM users WHERE score > 80;
-- 归档旧数据
INSERT INTO archive_orders
SELECT * FROM orders WHERE order_date < '2024-01-01';
INSERT 注意事项
| 要点 | 说明 |
|---|---|
| 列值数量匹配 | VALUES 中值的数量必须与指定列的数量一致 |
| 数据类型 | 插入的值必须与列的数据类型兼容 |
| NOT NULL 列 | 不能省略 NOT NULL 且无默认值的列 |
| 主键唯一性 | 主键值不能与已有数据重复 |
| 外键约束 | 外键列的值必须存在于父表中 |
INSERT 与事务
对于关键业务操作,INSERT 应配合事务使用:
BEGIN;
INSERT INTO accounts(user_id, balance) VALUES (101, 500);
INSERT INTO account_log(user_id, action, amount) VALUES (101, '开户', 500);
COMMIT; -- 全部成功或全部回滚
实战任务
- 使用指定列的方式插入一条学生记录
- 一次插入 3 条记录(批量插入)
- 将 score>85 的学生数据复制到 honor_students 表