6. 字段值自动增加(AUTO_INCREMENT)

有些字段(如编号)希望插入时自动 +1,不用每次手填——用 AUTO_INCREMENT。

sql
-- 部门表 dept 的 id 自增
CREATE TABLE dept (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL
) COMMENT='部门表';

特点:

  • 必须是主键或唯一索引,且为整数类型;
  • 插入时不写该字段(或写 NULL),MySQL 自动填入下一个序号;
  • 教学实例库的 dept、emp 表就用到了自增 id。
💡 学生表 student 的学号是人为编的(001、002…),不是自增;而 emp 表的 id 用自增更方便。什么时候用自增?当编号没有业务含义、只起"流水号"作用时。

📝 本节例题

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

例 1
建 dept_demo 表:id 为自增主键,name 非空。
查看参考答案(可复制)
sql
CREATE TABLE dept_demo (
  id   int PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
  name varchar(50) NOT NULL COMMENT '部门名称'
);
💡 AUTO_INCREMENT 的字段必须是主键或唯一键,且为整数类型。
例 2
向 dept_demo 插入三个部门(不写 id 列),查看系统自动生成的编号。
查看参考答案(可复制)
sql
INSERT INTO dept_demo(name) VALUES('研发部'), ('市场部'), ('财务部');
SELECT * FROM dept_demo;
💡 自增列在 INSERT 中直接省略,或写 NULL / 0 交给数据库生成。
例 3
把 dept_demo 的自增起始值改成 10,插入一条记录观察编号;再用 TRUNCATE 清空表,重新插入观察编号是否回到 1。
查看参考答案(可复制)
sql
ALTER TABLE dept_demo AUTO_INCREMENT = 10;
INSERT INTO dept_demo(name) VALUES('人事部');
SELECT * FROM dept_demo;

TRUNCATE TABLE dept_demo;
INSERT INTO dept_demo(name) VALUES('研发部');
SELECT * FROM dept_demo;
💡 DELETE 只删数据、自增值继续往后走;TRUNCATE 相当于重建表,自增值会被重置。