2013-02-27 60 views
1

我的表是這樣的:如何在mysql數據庫中生成序列號?

表1:

sr no. | id | name

ID是這裏的主鍵。 我想sr no.是循環的。
我應該給sr no.字段賦予什麼樣的屬性?

比如我有5條與sr no 1,2,3,4,5和1,2,3,4,5 id我和刪除記錄3次,然後id將是1,2,4,5和sr no.將是1,2,3,4 sr no不應該失去其爭議。

+0

「我想Sr否。是循環的。」你那是什麼意思? – fancyPants 2013-02-27 11:24:29

+0

它應該是這樣的:1,2,3,4,5,6 ..... 如果有任何記錄被刪除,那麼它應該再次更新,如1,2,3,4,5 ... 它應該是不像1,2,3,5,6 .... if 4 no。記錄被刪除 – 2013-02-27 11:25:01

+0

那麼'id'和'sr no.'有什麼區別? – Lars 2013-02-27 11:25:41

回答

4
SELECT @a:[email protected]+1 serial_number, 
     name FROM table1, 
     (SELECT @a:= 0) AS a; 
+0

你剛剛錯過了'通過ID訂購' – 2013-02-27 12:07:56

1

id已經是您的主鍵,那麼您需要什麼sr no.?會建議忘記它。

如果你確實需要它,請參閱我的回答here爲什麼這是一個非常糟糕的主意。最重要的原因:

當你刪除一行時,MySQL不會自動減少 自動增量值。這些原因都斷了數據的完整性

  • 危險(想象多個用戶執行刪除或插入...一倍,可能會出現的條目或更糟)當您使用主從複製或交易可能會出現
  • 錯誤
  • 和等等......

沒有必要擔心差距。

要回答你的問題該怎麼做,只需在列定義中添加auto_increment並將其包含在主鍵中。

1

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

但是你可以創建TriggerDELETE操作此表,現在讓SR沒有由1

例如遞減你可以更新它比目前更大的ID記錄你可以寫在下面觸發器SQL,

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