导航菜单

SQL 学习/数据增删改
课程进度 47% · 第5/9章5/9章 · 标签 1/4
1

INSERT 多种用法

INSERT用于向表中插入数据,支持单行、多行、子查询等多种写法,灵活应对不同场景。

sql
1
-- 单行插入(指定字段)
2
INSERT INTO students (name, age, gender)
3
VALUES ('张三', 18, '男');
4
 
5
-- 单行插入(全部字段)
6
INSERT INTO students
7
VALUES (NULL, '李四', 19, '女', 85.5);
8
 
9
-- 多行插入(高效)
10
INSERT INTO students (name, age, gender)
11
VALUES ('王五', 20, '男'),
12
('赵六', 19, '女'),
13
('孙七', 21, '男');
14
 
15
-- 子查询插入(数据迁移)
16
INSERT INTO graduates (name, age)
17
SELECT name, age FROM students WHERE age > 22;
18
 
19
-- 插入默认值
20
INSERT INTO students DEFAULT VALUES;
21
 
22
-- 重复键处理
23
INSERT INTO students (id, name) VALUES (1, '张三')
24
ON DUPLICATE KEY UPDATE name = '张三';

📖多行插入可提升效率。子查询插入常用于数据迁移和备份。未指定字段将插入默认值。ON DUPLICATE KEY UPDATE 用于冲突时更新。

2

INSERT 进阶技巧

处理大量数据插入时的优化策略和注意事项:

sql
1
-- 忽略重复(不报错、不插入)
2
INSERT IGNORE INTO students (id, name)
3
VALUES (1, '张三'), (2, '李四');
4
 
5
-- 替换(先删后插)
6
REPLACE INTO students (id, name, age)
7
VALUES (1, '张三', 20);
8
 
9
-- 从其他表批量导入
10
INSERT INTO students (name, age, gender)
11
SELECT name, age, gender
12
FROM temp_students
13
WHERE age > 0;
14
 
15
-- 插入后获取自增ID
16
INSERT INTO students (name) VALUES ('新同学');
17
SELECT LAST_INSERT_ID();

INSERT IGNORE 忽略重复键错误。REPLACE 相当于 DELETE + INSERT。LAST_INSERT_ID() 获取当前连接最后插入的自增ID。