如何在mysql数据库中生成序列号?

时间:2013-02-27 11:23:25

标签: mysql database database-design

我有这样的表:

表1:

sr no. | id | name

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

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

3 个答案:

答案 0 :(得分:4)

SELECT  @a:=@a+1 serial_number, 
        name  FROM    table1,
        (SELECT @a:= 0) AS a;

答案 1 :(得分:1)

id已经是您的主键,那么您需要sr no.为什么?建议忘掉它。

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

  

有理由说MySQL不会自动减少   删除行时自动增量值。这些原因是

     
      
  • 数据完整性破坏的危险(假设多个用户执行删除或插入...可能会发生加倍或更糟的条目)
  •   使用主从复制或事务时可能会发生
  • 错误
  •   
  • 等......
  •   

无需担心差距。

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

答案 2 :(得分:1)

我不知道sr no的真正目的。

但您可以为此表的 DELETE 操作创建Trigger,现在您可以更新大于当前ID的记录,以便sr no减1。

e.g。你可以在Trigger中写下SQL,

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