MySQL AUTO_INCREMENT 示例
自动增量是什么?
自动增量是一种对数字数据类型进行操作的函数。每次将记录插入表中定义为自动增量的字段时,它都会自动生成连续的数值。
什么时候使用自动增量?
在数据库规范化课程中,我们研究了如何通过将数据存储到许多使用主键和外键相互关联的小表中,以最小的冗余度存储数据。
主键必须是唯一的,因为它唯一地标识数据库中的一行。但是,我们如何确保主键始终是唯一的?一种可能的解决方案是使用公式生成主键,该公式在添加数据之前检查表中是否存在该键。这可能很有效,但正如您所见,这种方法很复杂,而且并非万无一失。为了避免这种复杂性并确保主键始终是唯一的,我们可以使用 MySQL的自动增量功能生成主键。自动增量与 INT 数据类型一起使用。INT 数据类型支持有符号和无符号值。无符号数据类型只能包含正数。作为最佳实践,建议在自动增量主键上定义无符号约束。
自动增量语法
现在让我们看一下用于创建电影类别表的脚本。
CREATE TABLE `categories` ( `category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`) );
请注意 category_id 字段上的“AUTO_INCREMENT”。这会导致每次将新行插入到表中时自动生成类别 ID。在将数据插入到表中时不提供该 ID, MySQL 生成它。
默认情况下,AUTO_INCREMENT 的起始值为 1,每增加一条新记录,AUTO_INCREMENT 的值就会增加 1
让我们检查一下类别表的当前内容。
SELECT * FROM `categories`;
在以下位置执行上述脚本 MySQL 针对 myflixdb 的工作台为我们提供了以下结果。
| category_id | category_name | remarks |
|---|---|---|
| 1 | Comedy | Movies with humour |
| 2 | Romantic | Love stories |
| 3 | Epic | Story acient movies |
| 4 | Horror | NULL |
| 5 | Science Fiction | NULL |
| 6 | Thriller | NULL |
| 7 | Action | NULL |
| 8 | Romantic Comedy | NULL |
现在让我们在类别表中插入一个新类别。
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
在 myflixdb 中执行上述脚本 MySQL 工作台 给出了如下所示的结果。
| category_id | category_name | remarks |
|---|---|---|
| 1 | Comedy | Movies with humour |
| 2 | Romantic | Love stories |
| 3 | Epic | Story acient movies |
| 4 | Horror | NULL |
| 5 | Science Fiction | NULL |
| 6 | Thriller | NULL |
| 7 | Action | NULL |
| 8 | Romantic Comedy | NULL |
| 9 | Cartoons | NULL |
请注意,我们没有提供类别 ID。 MySQL 自动为我们生成,因为类别 ID 被定义为自动增量。
如果你想获取由 MySQL,您可以使用 LAST_INSERT_ID 函数来执行此操作。下面显示的脚本获取生成的最后一个 ID。
SELECT LAST_INSERT_ID();
执行上述脚本将返回 INSERT 查询生成的最后一个自动增量数字。结果如下所示。
结语
- 当在具有数字数据类型的列上指定自动增量属性时,每当向数据库中添加新行时,都会按顺序生成数字。
- 自动增量通常用于生成主键。
- 自动增量上定义的数据类型应该足够大,以容纳许多记录。将 TINYINT 定义为自动增量字段的数据类型会将可添加到表中的记录数限制为 255,因为 TINYINT 数据类型不会接受超过该值的任何值。
- 在自动增量主键上指定无符号约束以避免出现负数被认为是一种很好的做法。
- 当从表中删除一行时,其自动递增的 ID 不会被重新使用。 MySQL 继续按顺序生成新数字。
- 默认情况下,AUTO_INCREMENT 的起始值为 1,每增加一条新记录,AUTO_INCREMENT 的值就会增加 1
- 要让 AUTO_INCREMENT 序列以另一个值开始,请使用 AUTO_INCREMENT = 10

