2014-09-01 96 views
0

嗨我正在使用Java和SQL(XAMPP)處理項目數據庫。如何爲自動遞增主鍵生成下一個值

爲什麼「ID」不會增加到下一個可用值。請注意,我從2-8刪除了所有連續的數字。和「ID」有A_I(自動增量)。

ID  username password fname mname lname course address contact status 

1  31231231 123  new old smith BSCS 123  123 USER 

9  123  ASD  ASD ASD ASD BSCpE ASD  123 USER 

爲什麼它是(1,9)不是(1,2)?

+0

''我從2-8刪除了一些連續的數字'' - 它看起來像是從2-8刪除了所有*記錄。如果你刪除了它們,你爲什麼期望它們仍然顯示在你的查詢中? – David 2014-09-01 15:09:19

+0

對不起,這是一個錯字。 – Starvinmarvinnn 2014-09-01 15:27:51

回答

3

你回答了你的問題。您在2-8之間刪除了數字。

所以它是一個MySQL數據庫,自動增量不會增加基於列的最大值的數量。

想一想。計算表中的最大數量並將其增加到下一個記錄的效率會低得多。

取而代之的是記下某個地方在該列上使用的最後一個數字,並且在請求一個新數字時增加該數字會更加有效。

我不是MySQL大師,但MySQL顯然使用內部機制作爲序列來增加列值。

如果刪除一個非連續的數字,那就太好了。事實上,我認爲在大多數情況下,這是可取的。保持原狀。只要這些數字是獨一無二的,那爲什麼還要打擾你呢?

+0

我明白了,我對sql很陌生,這就是爲什麼我冒險去冒險的原因。感謝您的澄清。這只是讓我很難看到(1,6,8,9 ..)比(1,2,3,4 ..)。它會影響任何東西嗎?或者,除非它會,如果我包含「ID」的列是正確的? – Starvinmarvinnn 2014-09-01 15:11:16

+3

重複使用一個數字不僅「效率低下」,而是非常危險。標識符的意思是,確定一些東西。如果兩個不同的對象不完全相同,即使其中一個不再存在,也不應該具有相同的標識符。 – David 2014-09-01 15:11:18

+1

@Starvinmarvinnn:從長遠來看,如果您的標識符不是唯一的,它最終會打擾您*更多*。 – David 2014-09-01 15:11:57

1

由於(a)刪除,或(b)從未提交的事務內部生成的ID,數字可能不連續。

其他答案指出了重用ID的一些問題。最大的問題是當一個ID在與原始數據庫的一致性邊界之外的另一個系統(即複製到另一個SQL Server數據庫,或通過集成中間件到冗長系統)共享後再次使用時發生的情況。

底線:不要重複使用ID。