【问题标题】:Auto incremented primary key increases even when insert query fails / design issues?即使插入查询失败/设计问题,自动递增的主键也会增加?
【发布时间】:2013-09-06 19:05:03
【问题描述】:

answer to a similar question 只是忽略了这个问题。我根本不买这是最好的答案。

我数据库中的相关表:

  • 场地(venueid、省、市、场地)
  • 成员(memberid、姓氏、名字、生日、电话、招聘ID)
  • 事件(venueid、类型、memberid、vip、eventfee、costid、date

Venueid是场地中自增的主键,省、市、场地的组合必须唯一,否则插入失败。

一切正常,但让我感到困扰的是,即使插入失败,venueid 也会增加,所以我最终会得到主键间隙。有没有更好的方法来强制唯一性,或者我试图关联这些表的方式不是最佳实践,它们真的应该结合起来?

【问题讨论】:

  • 什么是sql语句?
  • 这是最好的答案。买吧,真的。间隙是无害的。
  • ... 如果间隙不是无害的,那么您真的不应该使用 AUTO_INCREMENT。尽管有它的名字,但这不是它的用途!
  • @jeff $query = "insert into venues (province,city,venue) VALUES ('$province','$city','$venue')"; $result = $db->query($query);

标签: php mysql normalization


【解决方案1】:

没有真正的方法可以解决这个问题 MYSQL 和 PostGre 具有相同的行为,即使在事务中,如果事务失败,auto_incremented 值也不会回滚。

http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html

最适合您的问题的解决方案可能是使用自动增量锁定。

【讨论】:

    【解决方案2】:

    我根本不相信这是最好的答案。

    那么,你需要了解更多。

    坦率地说,根本不要将唯一标识符当作数字。它只是一个偶然的数字。将其视为识别您的记录的抽象事物。

    【讨论】:

    • 虽然尖酸刻薄,但我相信你是善意的。感谢您分享您的智慧,我很感激。
    猜你喜欢
    • 2012-04-23
    • 1970-01-01
    • 2013-05-11
    • 2011-02-16
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多