为什么MySQL从1开始计数而不是从0开始?

5

在大多数编程语言中,数组的第一个元素的id(索引)为0。MySQL表格的第一行(元素)具有1个(自动增加的)id。后者似乎是个例外。


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
2
AUTO_INCREMENT值不会将类似数组的数据结构赋予表格,行本身仍然是无关且无序的。它们所做的只是确保主键的唯一性。不要将它们视为索引数据结构! - Michael Berkowski
1
SQL通常是基于一的。此外,许多语言中零为falsey,因此如果自动增量从零开始,那么每个人都会抱怨他们无法“if(o.id)”。 - mu is too short
1
@EmanuilRusev,“不具建设性”的规定已经很成熟了。这就是为什么我和其他人投票的原因。我没有回答你的问题,我知道 - 这就是为什么这是一条评论而不是答案的原因。 - Michael Berkowski
1
从零开始索引主要是历史遗物,是指针偏移实现细节泄漏到现实中的结果。如果你想知道为什么MySQL从一开始,请问MySQL开发人员,并可能追踪所有SQL委员会成员。 - mu is too short
显示剩余10条评论
3个回答

4
更好的问题应该是“为什么数组索引从零开始?”这是由指针算术运算引起的。数组的索引是相对于指针地址的偏移量。在C++中,给定数组char x [5],表达式x [1]*(x + 1)是等价的,前提是sizeof(char) == 1

因此,从1开始自动递增的字段是有意义的。数组和这些字段之间没有真正的关联。

1

好知道,但为什么呢? - Emanuil Rusev
1
自动递增是一个主键,与数组的从零开始编号没有关系。它的作用是确保记录的唯一性。您还可以定义递增值(n),并使主键增加n。因此,如果您从1000开始,递增为10,则会得到1010、1020、1030等。这可能与数组的相关性很有趣:http://en.wikipedia.org/wiki/Zero-based_numbering - Roger

0

我认为主要原因是数据库中的一行不是一个数组,自增值也不是索引,就像数组索引一样。主键ID可以是任何值,而且在很大程度上,它只需要是唯一的,不能保证是其他任何值(例如,您可以删除一行,它不会重新编号)。

这有点像比较苹果和橙子!

数组从0开始,因为那是第一个数字。自增字段从任何你想要的数字开始,但在这种情况下,我们都希望它是1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接