1.为什么需要自增
为数据表设置主键约束后,每次插入记录时,如果插入的值已经存在,会插入失败。为主键生成自动增长的值可以解决这种问题。
2.语法
字段名 数据类型 AUTO_INCREMENT
3.注意
- 一张表中只能有一个自动增长字段
- 该字段的数据类型是整数类型
- 必须定义为键
- 为自动增长字段插入NULL、0、DEFAULT或在插入时省略该字段,该字段就会使用自动增长值
- 若插入的是一个具体值,则不会使用自动增长值
- 自动增长值从1开始自增,每次加1
- 若插入的值大于自动增长的值,则下次插入的自动增长值会自动使用最大值加1
- 若插入的值小于自动增长值,则不会对自动增长值产生影响。
- 使用DELETE删除记录时,自动增长值不会减小或填补空缺。
4.演示
CREATE DATABASE my_sql;
USE my_sql;
CREATE TABLE student (
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR (32)
) ENGINE = INNODB DEFAULT CHARSET = utf8;
INSERT INTO student(sname) VALUES ('stu1');
INSERT INTO student VALUES (0,'stu2');
INSERT INTO student VALUES (4,'stu3');
INSERT INTO student(sname) VALUES ('stu4');
INSERT INTO student VALUES (3,'stu3');
DELETE FROM student WHERE sid=5;
INSERT INTO student(sname) VALUES ('stu4');
5.查看自动增长值
语法:
SHOW CREATE TABLE student;
运行结果:
CREATE TABLE `student` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`sname` varchar(32) DEFAULT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
6.修改自动增长
ALTER TABLE student AUTO_INCREMENT = 10;
INSERT INTO student(sname) VALUES ('stu5');
7.删除自动增长
ALTER TABLE student MODIFY sid INT;
INSERT INTO student VALUES (11,'stu6');
-- 下面这行无法运行,因为自增被删除,必须手动插入主键
INSERT INTO student(sname) VALUES ('stu7');
8.添加自动增长
ALTER TABLE student MODIFY sid INT UNSIGNED AUTO_INCREMENT;
INSERT INTO student(sname) VALUES ('stu7');