当前位置: 首页 > 面试题库 >

即使由于错误而插入失败,MySQL自动增量值也会增加

漆雕奇逸
2023-03-14
问题内容

当我从用户那里接收数据时,我每次都会验证输入的格式(PHP)。我唯一无法验证(或我不想)的是约束(例如外键)违规。我让DML引发并出错,并让数据库驱动程序引发异常。捕获它后,我只是通过MySQL的错误代码打印出一些错误消息。

问题是,即使插入失败,我autoincrement仍然看到序列还在增长。我该如何预防呢?


问题答案:

这就是自动增量值和序列的工作方式。使用值时,如果事务失败,则不会回收该值,并且会回滚该事务。

由于您使用的是自动增量值,因此实际值并不重要,因此除了缺少数字的美观性之外,空格也不应该成为问题。



 类似资料:
  • 问题内容: 一位同事让我意识到了一个非常奇怪的MySQL行为。 假设您有一个表,其中包含一个auto_increment字段和另一个设置为唯一的字段(例如,用户名字段)。尝试插入表中已有用户名的行时,插入失败,正如预期的那样。然而,几次尝试失败后插入有效的新条目时,可以看到auto_increment值增加了。 例如,当我们的上一个条目如下所示时… …并且在下一次插入时尝试使用相同的用户名值尝试五

  • 问题内容: 我生成一个SQLite表(在Java中): 之后,我尝试使用INSERT命令添加行: 我得到错误: 我以为行ID会自动生成,但似乎我什么都没想。 我尝试了另一种解决方案: 结果,我在“ prep.setInt(1,n);”处收到一个空指针异常。 看到故障了吗? 问题答案: 您是否尝试指出要传递的参数应该与表的哪些字段相关? 在您的情况下,可能类似于:

  • 问题内容: 我正在尝试在mysql数据库中创建一列,该列自动递增1但从0-Z开始然后滚动。 例如000、001、002,…,009、00A,00B,…,00Z,010,…,0ZZ,…,100。 我想让数据库通过自动递增字段创建列。 我的想法是: 为从0到36的每个字符创建一列,然后将行N(其中N是最低有效数字)自动递增1。然后在每列上添加触发器,以在第N列达到36时向N-1列添加1 。 创建一个包

  • 我在下面的代码中创建了一个表: 此外,我有记录从csv文件导入到表。我想插入一个新的记录到表我一直得到这个错误 错误:重复的键值违反了唯一约束"salesorderdetail_pkey"DETAIL: Key(SalesorderDetid)=(2)已经存在。********** 错误 ********** 错误:重复的键值违反唯一约束“salesorderdetail_pkey”SQL状态:2

  • 我正在使用java中的MySQL库执行一个查询。在我的数据库结构中,有一列名为(主键,非空且自动递增)。通常在每次插入查询中,我都将值设置为,在查询执行后,它会增加最后一个id,但在java中这样做会给我异常。 这就是代码: 如何使用自动增量ID执行查询?

  • 我的应用程序使用SpringMVC+Hibernate+MySQL组合 我从一开始就纠结于一个问题- “在我的应用程序中,有些表使用Hibernate添加了自动递增功能.因此,当我删除任何记录时,当我再次插入一些记录时,我没有得到正确的顺序.” 为。假设我的表ABC最初有100条记录(例如,abc_id的主键具有从1到100的正确顺序的值)。 当我删除。50个记录,再插入50个记录,但这个时间序列