自动增长
自动增长的作用
问题:为数据表设置主键约束后,每次插入记录时,
如果插入的值已经存在,会插入失败。
如何解决:为主键生成自动增长的值。
自动增长的语法
字段名 数据类型 AUTO_INCREMENT
一个表中只能有一个自动增长字段;
该字段的数据类型是整数类型;
必须定义为键,如 UNIQUE KEY、PRIMARY KEY。
若为自动增长字段插入 NULL、0、DEFAULT 或在插入时省略该字段,该字段就会使用自动增长值;
若插入的是一个具体值,则不会使用自动增长值。
自动增长值从 1 开始自增,每次加 1。
若插入的值大于自动增长的值,则下次插入的自动增长值会自动使用最大值加 1;
若插入的值小于自动增长值,则不会对自动增长值产生影响。
使用 DELETE 删除记录时,自动增长值不会减小或填补空缺。
mysql> CREATE TABLE my_auto (
-> id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(20)
-> );
mysql> DESC my_auto;
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(20) | YES | | NULL | |
+----------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
① 插入时省略 id 字段,将会使用自动增长值
mysql> INSERT INTO my_auto (username) VALUES('a');
Query OK, 1 row affected (0.00 sec)
② 为 id 字段插入 NULL,将会使用自动增长值
mysql> INSERT INTO my_auto VALUES(NULL, 'b');
Query OK, 1 row affected (0.00 sec)
③ 为 id 字段插入具体值 6
mysql> INSERT INTO my_auto VALUES(6, 'c');
Query OK, 1 row affected (0.00 sec)
④ 为 id 字段插入 0,使用自动增长值
mysql> INSERT INTO my_auto VALUES(0, 'd');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM my_auto;
+----+----------+
| id | username |
+----+----------+
| 1 | a |
| 2 | b |
| 6 | c |
| 7 | d |
+----+----------+
4 rows in set (0.00 sec)
mysql> SHOW CREATE TABLE my_auto\G
************************* 1. row *************************
Table: my_auto
Create Table: CREATE TABLE my_auto
(
id
int(10) unsigned NOT NULL AUTO_INCREMENT,
username
varchar(20) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
① 修改自动增长值
mysql> ALTER TABLE myauto AUTOINCREMENT = 10;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
② 删除自动增长
mysql> ALTER TABLE my_auto MODIFY id INT UNSIGNED;
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0
③ 重新为 id 添加自动增长
mysql> ALTER TABLE myauto MODIFY id INT UNSIGNED AUTOINCREMENT;
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0
为现有的表修改或删除自动增长
自动增长删除并重新添加后,自动增长的初始值会自动设为该列现有的最大值加 1。
在修改自动增长值时,修改的值若小于该列现有的最大值,则修改不会生效。
评论