數組的第一個元素(在大多數編程語言中)的id(索引)爲0. MySQL表的第一個元素(行)具有(自動遞增的)id。後者似乎是個例外。爲什麼MySQL從1開始計數而不是0?
回答
您可以將自動遞增列的起點設置爲任意數量的,就像這樣:
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
很高興知道,但爲什麼呢? – 2013-02-24 18:48:44
自動增量是一個PK,與數組的基於零的編號沒有關係。在那裏確保記錄是獨一無二的。你也可以定義一個增量值(n),並使PK增加n。所以如果你從1000開始,增量爲10,你得到1010,1020,1030 ......這可能很有趣(與數組有關):http://en.wikipedia.org/wiki/Zero-based_numbering – Roger 2013-02-24 19:19:56
的我猜想的主要原因是數據庫中的行不是數組,而且自動增量值不是數組索引所指的索引。主鍵ID可以是任何值,並且在很大程度上它是非常重要的,它是唯一的,不能保證是其他任何東西(例如,你可以刪除一行並且不會重新編號)。
這有點像比較蘋果和橘子!
數組從0開始,因爲這是第一個數字。 Autoinc字段從你想要的任何數字開始,在這種情況下,我們寧願它是1.
要問的更好的問題是「數組爲什麼是零索引?」原因與指針算術有關。數組的索引是相對於指針地址的偏移量。在C++中,給定數組char x[5]
,表達式x[1]
和是等效的,因爲sizeof(char) == 1
。
因此,從1開始的自動遞增字段是有意義的。數組和這些字段之間沒有真正的關聯。
- 1. 爲什麼增量計數從0開始而不是從1開始?
- 2. 爲什麼應該從0開始而不是從1開始?
- 3. 爲什麼inode數字從1開始而不是0?
- 4. 爲什麼我的集合決定從0開始而不是1開始?
- 5. 爲什麼從std :: placeholders :: _ 1開始而不是_0開始?
- 6. 酒吧從1開始而不是0
- 7. 從1開始代碼而不是0?
- 8. 爲什麼retainCount是0而不是1?
- 9. 爲什麼sqlite3_bind_ *從索引1開始,但sqlite3_column_ *從0開始?
- 10. 在JDBC中,爲什麼準備語句的參數索引從1開始而不是從0開始?
- 11. 爲什麼返回-1而不是0?
- 12. 顯示計數爲-1,而不是0
- 13. 從範圍開始的Excel VBA數組從-1開始而不是0
- 14. 從1而不是0開始json_encode數字鍵
- 15. 爲什麼UIView alpha動畫從1變爲0而不是0到1?
- 16. 如何在Excel宏中使VBA從0開始計數而不是1
- 17. 使用位置計數節點 - 有時枚舉從0開始而不是1
- 18. 爲什麼它會從列表[-1]而不是列表[0]開始計算列表中的元素? (Python 3中)
- 19. 從位置1開始NSArray不是0
- 20. 爲什麼-1 >> 1是-1?而1 >> 1是0!
- 21. 爲什麼對於[0]而不是-1輸出爲0?
- 22. PHP:如何讓我的計數器從2開始計數而不是從0
- 23. 爲什麼0 && 1是1,而1 && 0在紅寶石中是0?
- 24. MSChart的X軸開始從-1而不是0
- 25. PHP:更新值從0開始,而不是1
- 26. 如何使分頁從1而不是0開始
- 27. 豬:排名從索引0開始,而不是1?
- 28. CFCHART - 如何獲得Y軸從1開始,而不是0
- 29. 爲什麼我的數組搜索返回0而不是1?
- 30. 獲取指數開始[1]而不是[0]使用jQuery
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
也許大多數編程語言,但不是全部(http://en.wikipedia.org/wiki/Comparison_of_programming_languages_ %28array%29#Array%5Fsystem%5Fcross-reference%5Flist) – thebjorn 2013-02-24 18:44:17
AUTO_INCREMENT值不會將類似數組的數據結構賦予表,行本身保持不相關和無序。他們所做的只是確保主鍵的唯一性。不要把它們看作索引數據結構! – 2013-02-24 18:44:19