什么是自动增量?
自动递增是对数值数据类型进行操作的函数。每次将记录插入到定义为自动增量的字段的表中时,它都会自动生成顺序数值。
使用自动增量时?
在数据库规范化的课程中,我们研究了如何以最小的冗余存储数据,方法是将数据存储到许多小表中,使用主键和外键相互关联。
主键必须是唯一的,因为它唯一标识数据库中的行。但是,我们如何确保主键始终是唯一的呢?一种可能的解决方案是,在添加数据之前,使用公式生成主键,该主键检查表中键是否存在。这可能效果很好,但正如你所看到的,这种方法很复杂,并非万无一失。为了避免这种复杂性并确保主键始终是唯一的,我们可以使用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。在将数据插入表中时不提供它,MySQL会生成它。
默认情况下,AUTO_INCREMENT的起始值为 1,并且对于每条新记录,它将递增 1
让我们检查一下类别表的当前内容。
SELECT * FROM `categories`;
在MySQL工作台中针对myflixdb执行上述脚本会给我们以下结果。
category_idcategory_nameremarks1ComedyMovies with humour2RomanticLove stories3EpicStory acient movies4HorrorNULL5Science FictionNULL6ThrillerNULL7ActionNULL8Romantic ComedyNULL
现在,让我们将一个新类别插入到类别表中。
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
在MySQL工作台中针对myflixdb执行上述脚本会给我们以下结果,如下所示。
category_idcategory_nameremarks1ComedyMovies with humour2RomanticLove stories3EpicStory acient movies4HorrorNULL5Science FictionNULL6ThrillerNULL7ActionNULL8Romantic ComedyNULL9CartoonsNULL
请注意,我们没有提供类别 ID。MySQL为我们自动生成了它,因为类别ID被定义为自动增量。
如果要获取MySQL生成的最后一个插入ID,可以使用LAST_INSERT_ID函数来执行此操作。下面显示的脚本获取生成的最后一个 ID。
SELECT LAST_INSERT_ID();
执行上述脚本会给出 INSERT 查询生成的最后一个自动增量数字。结果如下所示。
总结
在具有数值数据类型的列上指定自动递增属性时,每当将新行添加到数据库中时,都会按顺序生成数字。
自动增量通常用于生成主键。
“自动增量”上定义的数据类型应足够大,以容纳许多记录。将 TINYINT 定义为自动递增字段的数据类型会将可添加到表中的记录数限制为 255,因为 TINYINT 数据类型不接受超出该值的任何值。
在自动递增主键上指定无符号约束以避免出现负数被认为是一种很好的做法。
从表中删除行时,不会重用其自动递增的 ID。MySQL继续按顺序生成新数字。
默认情况下,AUTO_INCREMENT的起始值为 1,并且对于每条新记录,它将递增 1
要让序列AUTO_INCREMENT另一个值开头,请使用 AUTO_INCREMENT = 10