2013-02-24 140 views
2

數組的第一個元素(在大多數編程語言中)的id(索引)爲0. MySQL表的第一個元素(行)具有(自動遞增的)id。後者似乎是個例外。爲什麼MySQL從1開始計數而不是0?

+1

0行不太響。但是,第一行的確如此。還有'NO_AUTO_VALUE_ON_ZERO'設置。 http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_no_auto_value_on_zero – hank 2013-02-24 18:43:18

+0

也許大多數編程語言,但不是全部(http://en.wikipedia.org/wiki/Comparison_of_programming_languages_ %28array%29#Array%5Fsystem%5Fcross-reference%5Flist) – thebjorn 2013-02-24 18:44:17

+2

AUTO_INCREMENT值不會將類似數組的數據結構賦予表,行本身保持不相關和無序。他們所做的只是確保主鍵的唯一性。不要把它們看作索引數據結構! – 2013-02-24 18:44:19

回答

1

您可以將自動遞增列的起點設置爲任意數量的,就像這樣:

ALTER TABLE tbl AUTO_INCREMENT = 1; 
ALTER TABLE tbl AUTO_INCREMENT = 10; 
ALTER TABLE tbl AUTO_INCREMENT = 100; 

默認值爲1

參見:

http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html

+0

很高興知道,但爲什麼呢? – 2013-02-24 18:48:44

+1

自動增量是一個PK,與數組的基於零的編號沒有關係。在那裏確保記錄是獨一無二的。你也可以定義一個增量值(n),並使PK增加n。所以如果你從1000開始,增量爲10,你得到1010,1020,1030 ......這可能很有趣(與數組有關):http://en.wikipedia.org/wiki/Zero-based_numbering – Roger 2013-02-24 19:19:56

0

的我猜想的主要原因是數據庫中的行不是數組,而且自動增量值不是數組索引所指的索引。主鍵ID可以是任何值,並且在很大程度上它是非常重要的,它是唯一的,不能保證是其他任何東西(例如,你可以刪除一行並且不會重新編號)。

這有點像比較蘋果和橘子!

數組從0開始,因爲這是第一個數字。 Autoinc字段從你想要的任何數字開始,在這種情況下,我們寧願它是1.

2

要問的更好的問題是「數組爲什麼是零索引?」原因與指針算術有關。數組的索引是相對於指針地址的偏移量。在C++中,給定數組char x[5],表達式x[1]和是等效的,因爲sizeof(char) == 1

因此,從1開始的自動遞增字段是有意義的。數組和這些字段之間沒有真正的關聯。

相關問題