1
realkenshinji 2018-10-16 17:31:55 +08:00 via iPhone
被删了?
|
2
eslizn 2018-10-16 17:31:56 +08:00 8
是不是业务里有事务插入后没提交回滚了
|
3
fy1993 2018-10-16 17:32:48 +08:00
赞同 2 楼 事务回滚,主键会跳增
|
4
glacer 2018-10-16 17:38:55 +08:00
replace, insert into ... on duplicate key 这类语句都会删行
|
5
xiaoxinshiwo 2018-10-16 17:41:25 +08:00
看了下 mysql 官方文档,还挺复杂
The exception is for “ mixed-mode inserts ”, where the user provides explicit values for an AUTO_INCREMENT column for some, but not all, rows in a multiple-row “ simple insert ”. For such inserts, InnoDB allocates more auto-increment values than the number of rows to be inserted. However, all values automatically assigned are consecutively generated (and thus higher than) the auto-increment value generated by the most recently executed previous statement. “ Excess ” numbers are lost. 参考: https://dev.mysql.com/doc/refman/5.5/en/innodb-auto-increment-handling.html |
6
xiaoxinshiwo 2018-10-16 17:43:23 +08:00
“ 丢失 ”自动递增值和序列间隙
在所有锁定模式( 0,1 和 2 )中,如果生成自动增量值的事务回滚,则这些自动增量值将“ 丢失 ”。一旦为自动增量列生成了值,就无法回滚它,无论 “ INSERT-like ” 语句是否完成,以及是否回滚包含的事务。这些丢失的值不会被重复使用。因此,存储在 AUTO_INCREMENT 表的列中的值可能存在间隙 。 |
7
est 2018-10-16 17:53:32 +08:00
AUTO_INCREMENT 有预分配的。没用完很正常。
|
8
dengtongcai 2018-10-16 17:55:55 +08:00
@glacer replace into 会删行,inster into 不会的吧
|
9
qiyuey 2018-10-16 17:57:02 +08:00
这个是先申请,后使用,申请了没使用就跳了。
像事务、insert or update 都会导致。 |
10
gaius 2018-10-16 18:02:09 +08:00
我这有个表用的 select on duplicate key,前段时间都把 int 用完了,应用插不进去了. 控制台还能插最后一个是最骚的
|
11
opengps 2018-10-16 18:04:44 +08:00 via Android
添加失败呗,比如某些约束不满足,返回错误,但是 id 还是占用的
|
12
bobuick 2018-10-16 18:04:50 +08:00
间隙锁会导致主键出现这种情况。
|
13
gaius 2018-10-16 18:05:10 +08:00
insert..
|
14
Leigg 2018-10-16 18:29:16 +08:00 via iPhone
肯定有骚操作
|
15
kiddult 2018-10-16 18:42:58 +08:00
@dengtongcai insert 会,不管成功失败都会自增
|
16
littlewing 2018-10-16 19:57:37 +08:00
这是 feature,不是 bug。mysql 只保证了自增 ID 递增,并没有保证连续
https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html#innodb-auto-increment-initialization https://blog.csdn.net/ashic/article/details/53810319 https://www.cnblogs.com/zengkefu/p/5683258.html 可以看看这几篇文章 |
21
Raymon111111 2018-10-17 00:42:33 +08:00
on duplicate 就会这样
其实是先删了一条再插的 |
22
qiyuey 2018-10-17 10:16:51 +08:00 via Android
@okwork update 不会,insert or update 会,因为有可能要 insert 所以先申请了
|
23
q397064399 2018-10-18 10:09:17 +08:00
要连续干嘛,主键
|
24
tinyhill 2018-10-18 10:59:58 +08:00
一般是事务回滚导致,也有可能是插入被物理删除导致。但自增 ID 连续没啥用,不要有洁癖...
|
25
qianbi6 2018-12-16 16:32:36 +08:00 via Android
引擎用了 innodb 了吧 innodb 会出现这问题
|
26
c4f36e5766583218 2019-02-22 18:37:22 +08:00
既然知道原因了,如果强迫症的话,了解一下: https://www.v2ex.com/t/529758
|