数组的第一个元素(在大多数编程语言中)的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