为什么SQL主键索引从1开始而不是从0开始?

时间:2018-12-05 11:14:40

标签: mysql sql database

想知道,为什么SQL主键索引从1开始,为什么不从0开始?有什么理由吗?

我不知道这是问这样一个问题的好地方,但在网络上找不到答案。

3 个答案:

答案 0 :(得分:2)

SQL的计数通常以“ 1”开始。例如,子字符串操作对字符串中从1(而不是0)开始的字符进行计数。 row_number()枚举组中从1(而不是0)开始的行。

原因很简单。人类从1开始计数-只是问许多4岁的孩子。在学习编程之前,我们不会从零开始计数。作为一个物种,我们从“ 1”开始计数了几千年,然后在数字万神殿上加了零。

从表计数时,从1开始计数更加直观:第一行的“ 1”几乎不需要解释,特别是对于不是程序员的人。第一行的“ 0”需要说明。

很容易忘记,但是SQL是为非程序员设计的。详细信息大部分是因为它是针对企业用户的。

答案 1 :(得分:0)

使用此SET [GLOBAL|SESSION] sql_mode='NO_AUTO_VALUE_ON_ZERO' 那么它将从0开始

mysql docs

答案 2 :(得分:0)

SQL标准4.15.11标识列- https://www.sis.se/api/document/preview/916885/说:“标识列具有一个起始值,一个终止值,一个增量和一个循环选项”,它没有说它应该以任何特定的数字开头,但由于其目的是提供唯一的行号(如果设置为主键),那么负的起始值将毫无意义。如果您愿意,MYSQL将允许您将起始值设置为0,但我看不出重点。在我看来,允许其他语言的数组下标从0开始总是愚蠢的,而mysql具有从0开始的limit offset子句是一个令人讨厌的不一致之处。