MySQL auto_increment 之后插入的奇怪问题。

2015-07-30 09:23:25 +08:00
 haozhang

我将主键设成了auto_increment,当我insert的时候有些时候生成的结果会是这样的:
1
3
4

主键值跳过了2,当我把记录全部删除在将auto_increment重新记数之后,再插入,结果又正确了:
1
2
3
4

这是什么原因?

4679 次点击
所在节点    MySQL
26 条回复
sivacohan
2015-07-30 09:26:32 +08:00
有事务失败了。
haozhang
2015-07-30 09:29:33 +08:00
@sivacohan 我直接在mysql的命令行下insert也需要提交事务吗?
sivacohan
2015-07-30 09:31:38 +08:00
你具体情况我不太清楚。检查一下MySQL都有哪些连接。看一下日志吧。
如果你只有insert,这个基本就是有事务失败。
haozhang
2015-07-30 09:35:47 +08:00
我的autocommit设置为1,应该事务是自动的吧?
haozhang
2015-07-30 09:36:11 +08:00
@sivacohan 嗯。
pH
2015-07-30 09:46:57 +08:00
说实话我还是第一次看到这样的情况。 一般出现间断的情况都是因为我手动删除了。
thinkmore
2015-07-30 09:57:38 +08:00
我开始看到也是怀疑手动删除了,你看下是不是有其他人操作你的数据库,或者看看日志,不要在意这些细节
haozhang
2015-07-30 10:01:59 +08:00
@thinkmore 本机上的环境...不是服务器。
haozhang
2015-07-30 10:02:25 +08:00
@pH 所以很困惑啊。
thinkmore
2015-07-30 10:13:37 +08:00
没有复现了吧?这个确实是不太好解决,建议不要浪费时间在这上面了
ncwhale
2015-07-30 10:25:14 +08:00
建议检查一下MySQL设置喵……如果是新项目,及早换数据库喵……PG或者Mongo都好喵……
mkeith
2015-07-30 10:53:22 +08:00
插入失败还是会自增的吧
millson
2015-07-30 11:12:10 +08:00
保存所有的sql,然后再查
gkiwi
2015-07-30 11:38:48 +08:00
事务会预先读个id先占着,用不用到再说,保证并发时候主键id不冲突。
比如事务1 先占了10,事务2接着占了11,结果事务1执行失败,10这个id就被弃了。
zonghua
2015-07-30 11:52:54 +08:00
@ncwhale mongodb连自增都没有。要自己查询再加一
est
2015-07-30 12:53:54 +08:00
处女座玩 auto_increment 是一种怎么样的体验。。。
broadliyn
2015-07-30 13:08:42 +08:00
@zonghua 自己查询再加1在并发高的环境下不怕id重复吗?毕竟不是类似redis的incr的原子操作
zonghua
2015-07-30 13:28:01 +08:00
@broadliyn node没有这种问题吧,毕竟单线程,反正我是很懂
lilydjwg
2015-07-30 13:40:35 +08:00
@ncwhale MongoDB 的 Python 客户端库很坑的,经常升级之后代码就要改,根本不管兼容性。
sujin190
2015-07-30 14:00:34 +08:00
@zonghua 用mongo还自增1,你多蛋疼。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/209454

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX