2012-08-16 25 views
3

我正在創建在C#中使用MYSQL數據庫的應用程序。我想刪除行並更新表中id的自動增量值。例如,我有兩列的表:id和station,table是station列表。這樣如何在刪除表中的行時更新自動增加的ID?

ID站東西
1 PT1
2 PT2
3 PT3

如果我刪除第二行,刪除表後看起來是這樣的:

ID station
1 pt1
3 pt3

有什麼辦法可以讓我更新表的id,對於這個例子,第三行中的id代替值爲3的值是2? 在此先感謝!

+0

我認爲id是唯一的數據庫標識符?因爲那麼喬斯林的回答將是有效的 – wterbeek 2012-08-16 14:49:43

+0

你能提供你爲什麼想要這樣做的原因嗎? – tsells 2012-08-16 16:55:08

回答

5

根據定義,自動增量列不應手動更改。
如果某些其他表使用此ID(3)作爲外鍵來引用此表中的該記錄,會發生什麼情況?該表應該相應地改變。
(考慮一下,在你的例子中很簡單,但是如果你刪除了最大ID爲100000的表中的ID = 2會發生什麼?主表和引用表中有多少更新?)

最後,如果您的編號存在空白,則不存在實際問題。

+0

Tnx,我想這是因爲我問這個問題,知道它可能與否。我很高興你和其他人清楚地解決了我的疑惑。 – 2012-08-17 14:54:04

6

我建議你在刪除一行時不要做任何特殊的事情。是的,你在ID中會有空白,但你爲什麼在意呢?這只是一個ID。

如果更改id_station的值,則還需要更新具有id_station字段的所有表中的值。它會導致更多不必要的更新。

1

更改其他行中id列值的唯一方法是使用UPDATE語句。沒有內建的機制來完成你想要的東西。

我同意這裏的其他答案;通常,當行被刪除時,我們不會更改其他行中的id列的值。通常,id列是主鍵,理想情況下,主鍵值是不可變的(它被分配一次,但不會改變)。如果它確實改變了,那麼對它的任何引用都需要改變。 (對於外鍵,ON UPDATE CASCADE會將更改傳播到子表,對於像InnoDB這樣的支持外鍵的存儲引擎,但不支持MyISAM。

基本上,更改id值會導致比解決方案更多的問題。

沒有「自動」機制,當行被刪除,改變在其他行的列的值。

隨着開發週期中說,有次在那裏我有「靜」數據,我想要控制id值,並且我已經對id值進行了更改。但是這個 是一個管理exerci se,而不是由應用程序執行的功能。

相關問題