首页 >

mysql insert id为什么不是顺序递增的? |mysql5.6升级到5.7.13

如何查看mysql 的版本,mysql group by 参数,hana 同步数据到mysql,php redis缓存到mysql,mysql序列创建,mysql5.6升级到5.7.13mysql insert id为什么不是顺序递增的? |mysql5.6升级到5.7.13

sert id是指插入一条记录后自动生成的主键ID,通常情况下这个ID是递增的,但有时也会出现不连续的情况,那么为什么会出现这种情况呢?

sert id并不总是顺序递增的,这是由于以下几个原因:

1. 自增长值重置

当表中的自增长列达到最大值后,MySQL会重置自增长值,然后从新的起点开始递增。例如,如果一个表的自增长列达到了最大值4294967295,那么下一次插入数据时,自增长值将会被重置为1,而不是4294967296。

2. 多线程同时插入

如果多个线程同时插入数据,那么MySQL可能会在一个线程插入数据时,另一个线程同时插入了一条数据,导致自增长值不连续。

3. 回滚操作

如果插入数据的事务被回滚了,那么自增长值也会回滚,导致自增长值不连续。

4. 批量插入

在执行批量插入时,MySQL会先为每个插入语句分配一个自增长值,而不是为每个插入行分配一个自增长值。这可能会导致自增长值不连续。

举个例子:

假设大家有一个表,其中只有一个自增长列id。大家插入了三条数据,然后查看自增长值:

“`ame (col1, col2) VALUES (‘a’, ‘b’);ame (col1, col2) VALUES (‘c’, ‘d’);ame (col1, col2) VALUES (‘e’, ‘f’);

SELECT LAST_INSERT_ID();

假设第一个插入语句生成的自增长值为1,第二个插入语句生成的自增长值为2,第三个插入语句生成的自增长值为3。但是,如果大家使用了批量插入,例如:

“`ame (col1, col2) VALUES (‘a’, ‘b’), (‘c’, ‘d’), (‘e’, ‘f’);

SELECT LAST_INSERT_ID();

那么MySQL会为每个插入语句分配一个自增长值,假设第一个插入语句生成的自增长值为1,第二个插入语句生成的自增长值为3,第三个插入语句生成的自增长值为5。

sert id不总是连续的,这取决于上述因素。如果需要连续的自增长值,可以考虑使用UUID或其他方法来生成主键ID。


mysql insert id为什么不是顺序递增的? |mysql5.6升级到5.7.13
  • mysql naticat |yum 的mysql装在哪了
  • mysql naticat |yum 的mysql装在哪了 | mysql naticat |yum 的mysql装在哪了 ...

    mysql insert id为什么不是顺序递增的? |mysql5.6升级到5.7.13
  • mysql两个字段的和(如何在mysql中计算两个字段的和) |mysql 空格错误
  • mysql两个字段的和(如何在mysql中计算两个字段的和) |mysql 空格错误 | mysql两个字段的和(如何在mysql中计算两个字段的和) |mysql 空格错误 ...

    mysql insert id为什么不是顺序递增的? |mysql5.6升级到5.7.13
  • mysql文件地址 |查看mysql用户名
  • mysql文件地址 |查看mysql用户名 | mysql文件地址 |查看mysql用户名 ...