id int auto_increment primary key //创建一个字段名为 Id ,其在插入数据的时候每次自动增加
当插入数据时,可以忽略掉这个字段,这个Id的值会自动增加。
那么,这个Id的值每次加多少呢?从哪一个值开始增加呢?
一般情况下,这个Id从 1 开始,每次默认自增 1 。
可以用下面的两条语句(两者的差别后面会讲到)中的一种来查看:
show session variables like '%auto_increment%';
(或者 show global variables like '%auto_increment%';)
执行这个语句的结果如下图:
其中 auto_increment_increment对应的值表示 Id 的起始值,比如上图中该值为 1 ,表示 Id 从1开始增加;
而 auto_increment_offset 对应的值表示 Id 每次增加的幅度 ,比如上图中该值为 1 ,表示每次 Id 增加 1 ;
那么如果我们不想 Id 从默认的 1 开始,或者不想Id 每次增加 1 而是每次增加 10 那该如何设置呢 ,方法很简单,如下:
set session auto_increment_increment=5;
(或者 set global auto_increment_increment=5;)
这个语句表示将auto_increment_increment设置为5 ,即Id 从 5 开始往上增加;
设置auto_increment_offset 也是同样的方法
set session auto_increment_offset=10;
(或者 set global auto_increment_offset=10;)
这个语句表示将auto_increment_increment设置为10,即每次 Id 增加 10 ;
将这两条语句执行晚后,可以用上面说的查看语句来查看现在的情况,如下:
最后我们来看看红色标记出来的两个单词所表达的不同意思,
顾名思义,session表示一个会话,global 表示全局。相信作为程序猿的都知道是什么意思,
在MySQL数据库里面这两者操作的区别是:
session表示只是在当前会话的值,不管是查看还是设置,都只是在当前会话内,比如,你用session将Id 的起始值由1设置成了5,增幅设置成了10,那么在你没有关闭数据库的连接对数据进行一些操作的时候,Id 是从 5 开始增加的,每次增加10,但是当你关闭了连接再重新连接一次的时候Id 就恢复成了以前的值。
而global表示的是全局的,用global 设置的值在你关闭连接重新打开后你设置的值依旧是你之前设置的值,没有改变。
当你不指明session或者global的时候,这些语句依然可以执行,默认的是session;
如果你是在Java或者其他语言在自己的项目里面操作数据库,而对Id的起始值和增幅有所要求的话,建议在建表后用global设置,因为如果你用 session设置的话,当在Java里面用语句连接成功后,你之前设置的 Id 的起始值和 增幅就不是你之前设置的值了,因为你用这些语句重新连接了一次,每次新的连接都相当于一个新的 session。
希望我的总结对大家有所帮助。