MySQL基础之 AUTO_INCREMENT

Posted 峰哥ge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础之 AUTO_INCREMENT相关的知识,希望对你有一定的参考价值。

AUTO_INCREMENT

AUTO_INCREMENT是mysql唯一扩展的完整性约束,当为数据库表中插入新纪录时,字段上的值会自动生成唯一的ID,再具体设置AUTO_INCREMENT约束时,一个表中只能有一个字段使用该约束,并且该字段的数据类型必须为整数类型。还有,我们习惯上将表中的一个列同时设置为AUTO_INCREMENT和主键。

 

语法(这里是和联合索引一起举例讲解):

使用单个索引

mysql> create table auto(
    -> id smallint not null auto_increment,
    -> name char(15),
    -> primary key(id)
    -> );
Query OK, 0 rows affected (0.04 sec)

使用组合索引

mysql> create table autoincre_demo(
    -> d1 smallint not null auto_increment,
    -> d2 smallint not null,
    -> name varchar(10),
    -> index(d1,d2)
    -> );
Query OK, 0 rows affected (0.06 sec)

总结:对于InnoDB表,自动增长列必须是索引,一般习惯上设置主键为自动增长列。如果是组合索引,自动增长列必须是组合索引的第一列。

 

总结auto_increment的几种注意事项:

(1)如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MYSQL将自动生成下一个序列编号。编号从1开始,并1为基数递增。

(2)把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样。但不建议这样做,还是以插入NULL值为好。

(3)当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。

(4)当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。

(5)如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。

 

以上是关于MySQL基础之 AUTO_INCREMENT的主要内容,如果未能解决你的问题,请参考以下文章

系统运维系列 之MySQL部分学习整理1

Prometheus监控之mysqld_exporter

mysql 约束条件 auto_increment 自动增长目录

Mysql:创建表查询中的'AUTO_INCREMENT = 5'是啥?

MySQL 序列使用:使用 AUTO_INCREMENT获取AUTO_INCREMENT值

mysql基础