写点什么

自动增长

用户头像
在即
关注
发布于: 2021 年 03 月 19 日
自动增长

自动增长的作用

问题:为数据表设置主键约束后,每次插入记录时,

    如果插入的值已经存在,会插入失败。


如何解决:为主键生成自动增长的值。

自动增长的语法

字段名 数据类型 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。

在修改自动增长值时,修改的值若小于该列现有的最大值,则修改不会生效。


用户头像

在即

关注

还未添加个人签名 2021.02.27 加入

还未添加个人简介

评论

发布
暂无评论
自动增长