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