2. 插入数据 INSERT

① 给指定字段插入(最常用,字段与值一一对应)

语法
INSERT INTO 表名 (字段1, 字段2, ...)
VALUES (值1, 值2, ...);
sql
-- 插入一名新生(只填部分字段,其余为 NULL)
INSERT INTO student (Sno, Sname, Ssex, class)
VALUES ('021', '小李', '男', '01');

② 给全部字段插入(可省略字段名,但值的顺序必须与表结构完全一致)

sql
INSERT INTO student
VALUES ('022', '小王', '2008-03-03', '110101...', '女', 16, '北京', '02');

③ 批量插入(一条语句插多行,效率高)

sql
INSERT INTO student (Sno, Sname, Ssex, class)
VALUES
  ('023', '小赵', '男', '03'),
  ('024', '小钱', '女', '03'),
  ('025', '小孙', '男', '01');
⚠️ 注意事项:① 字段顺序和值的顺序必须一一对应;② 字符串和日期必须加引号;③ 值不能超过字段定义的长度/范围;④ 主键不能重复,否则整句插入失败。

📝 本节例题

以下例题均基于 教学实例 库(student / course / sc / teacher / grades / dept / emp),开始前先执行 USE 教学实例;。建议先自己写一遍,再展开答案对照。

例 1
新增一位教师:05 号、孙老师、2025-09-01 入职。
查看参考答案(可复制)
sql
INSERT INTO teacher VALUES('05', '孙老师', '2025-09-01');
💡 不写列名的 INSERT 必须按表结构顺序给全所有列的值。
例 2
用指定列名的方式,一次插入两位教师:06 陈老师、07 褚老师(入职日期均为 2025-09-01)。
查看参考答案(可复制)
sql
INSERT INTO teacher(Tno, Tname, entrydate) VALUES
('06', '陈老师', '2025-09-01'),
('07', '褚老师', '2025-09-01');
💡 写列名更稳妥,表结构变了也不容易错位。
例 3
新建 sc_pass 表(只复制 sc 的结构、不要数据),再把 sc 中及格的记录批量插入进去。
查看参考答案(可复制)
sql
CREATE TABLE sc_pass AS SELECT * FROM sc WHERE 1 = 0;
INSERT INTO sc_pass SELECT * FROM sc WHERE score >= 60;
SELECT COUNT(*) FROM sc_pass;
💡 WHERE 1=0 是复制空表结构的常用技巧;INSERT ... SELECT 可批量搬数据。