【问题标题】:how generate serial number in mysql database?如何在mysql数据库中生成序列号?
【发布时间】:2023-06-06 16:50:01
【问题描述】:

我有这样的表:

表1:

sr no. | id | name

id 是这里的主键。 我希望 sr no. 是循环的。
我应该为sr no. 字段赋予什么属性?

例如,我有 5 条记录,sr no 1,2,3,4,5 和 id 1,2,3,4,5 我删除了第三条记录然后id 将是 1,2, 4,5 和 sr no. 将是 1,2,3,4 sr no 不应该失去它的争议性。

【问题讨论】:

  • "我希望 sr 号是循环的。"你这是什么意思?
  • 它应该像:1,2,3,4,5,6.....如果任何记录被删除,那么它应该再次更新,如 1,2,3,4,5。 ..它不应该像 1,2,3,5,6.... 如果 4 没有。记录被删除
  • 那么idsr no.有什么区别?
  • 我不明白什么是序列号。不过,看看*.com/questions/715251/…
  • 你能告诉我们它的用途吗?您可以考虑在删除操作上创建触发器并更新 id 大于已删除的记录。

标签: mysql database database-design


【解决方案1】:
SELECT  @a:=@a+1 serial_number, 
        name  FROM    table1,
        (SELECT @a:= 0) AS a;

【讨论】:

  • 你刚刚错过了order by id
【解决方案2】:

我不知道sr no的真正用途。

但是你可以在DELETE操作上为这个表创建Trigger,现在你可以更新大于当前ID的记录,使sr no减1。

例如你可以在Trigger下面写SQL,

UPDATE table1 SET sr_no = sr_no -1 WHERE id > XYZ;

【讨论】:

    【解决方案3】:

    id 已经是你的主键,那么你需要sr no. 做什么?建议忘记它。

    如果您真的需要它,请参阅我的回答 here,了解为什么这是一个非常糟糕的主意的几个原因。最重要的原因:

    MySQL 不自动降低 删除行时的自动增量值。这些原因是

    • 破坏数据完整性的危险(想象多个用户执行删除或插入...可能会出现双重条目或更糟)
    • 使用主从复制或事务时可能会出现错误
    • 等等...

    无需担心差距。

    要回答您的问题,只需在列定义中添加auto_increment 并将其包含在主键中即可。

    【讨论】: