我有一個存儲不同數據的SQL表。主鍵具有遞增的整數值1輸入一個新數據。只要我們繼續添加它工作正常。但是,當我們刪除任何中心值或結束值時,它會導致問題。如何自動增加和自動更改數據庫列值
即,例如我在表格中添加了5行。而列sr_num
保持爲5的值。當我刪除第4條記錄時,sr_num
列仍然是這樣的:1,2,3,5。
我希望它是1,2,3,4,只要我刪除第4個條目,我想第5個條目取得第4個位置和相同的數字。
它必須發生所有。
我有一個存儲不同數據的SQL表。主鍵具有遞增的整數值1輸入一個新數據。只要我們繼續添加它工作正常。但是,當我們刪除任何中心值或結束值時,它會導致問題。如何自動增加和自動更改數據庫列值
即,例如我在表格中添加了5行。而列sr_num
保持爲5的值。當我刪除第4條記錄時,sr_num
列仍然是這樣的:1,2,3,5。
我希望它是1,2,3,4,只要我刪除第4個條目,我想第5個條目取得第4個位置和相同的數字。
它必須發生所有。
不,這不是你的主鍵所用的。它只是爲了邏輯參考,以保證唯一性。你應該在心理上忽略它使用整數的事實。 @Adriano和@marc_s都是正確的。放開您可以/應該重新編號您的主鍵值的想法。在你可能會考慮的情況下,有一些罕見的情況,但這不是罕見的情況之一。
相反,您可以在查詢中設置使用ROW_NUMBER()的查詢(或視圖)(如@Adriano所述)。然後,您將獲得連續的數字,而不會混淆主鍵值。人們通常將此稱爲序號列或Ord。
這是一個糟糕的想法你想要什麼。
例如:你
sr_num
有一個外鍵的其他表,一旦你 更新sr_num
你需要用相同的 值更新其他表作爲sr_num
了。
你是否確定**你想要類似的東西?這意味着你必須手動**更新該表。手動更新與該關係的所有表(等等,級聯)。此外,您的索引將失效。我可以問**的理由嗎?這不正確的用法和主鍵的含義,如果你想要一個漸進式索引只需在你的SELECT中使用'ROW_NUMBER()'... –
如果你刪除了一行並且在同一個鍵上放置了另一個鍵,這也會導致問題。您現在有兩個邏輯行用於同一個密鑰。在別人(用戶)觀察到密鑰後,密鑰不應再使用。 – usr
看到這個:http://stackoverflow.com/questions/2214141/mysql-auto-increment-after-delete?rq=1 – dursk