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 相当于重建表,自增值会被重置。