nodejs连接mysql执行insert操作,
遇到unique冲突(某些字段设置了约束)
sql: insert into user (username, password, name, department, status, c_time, u_time) values (省略对应value)
问题
数据并没有插入进去,但主键id却自增了(下一次插入发现之前冲突的插入行为依然导致主键id自增),实际上并不希望其在insert失败的时候主键自增,请问这种问题怎么解决呀。
nodejs连接mysql执行insert操作,
遇到unique冲突(某些字段设置了约束)
sql: insert into user (username, password, name, department, status, c_time, u_time) values (省略对应value)
数据并没有插入进去,但主键id却自增了(下一次插入发现之前冲突的插入行为依然导致主键id自增),实际上并不希望其在insert失败的时候主键自增,请问这种问题怎么解决呀。
5 回答4.8k 阅读✓ 已解决
5 回答3.2k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
2 回答1.7k 阅读✓ 已解决
AUTO_INCREMENT Handling in InnoDB:
InnoDB 关于 auto increment 的文档明确说明了,失败的 insert 会引起 auto incrment 列增加。这是一个不可更改的行为。
这应该是因为 InnoDB 要处理并发的 transacation。考虑如果发生了下面的一系列事件:
显然在 insert 1 失败的时候,已经没有机会回滚 auto increment 值了,此时“更新的” auto increment 值已经被 insert 2 占用了。