想知道,为什么SQL主键索引从1开始,为什么不从0开始?有什么理由吗?
我不知道这是问这样一个问题的好地方,但在网络上找不到答案。
答案 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开始
答案 2 :(得分:0)
SQL标准4.15.11标识列- https://www.sis.se/api/document/preview/916885/说:“标识列具有一个起始值,一个终止值,一个增量和一个循环选项”,它没有说它应该以任何特定的数字开头,但由于其目的是提供唯一的行号(如果设置为主键),那么负的起始值将毫无意义。如果您愿意,MYSQL将允许您将起始值设置为0,但我看不出重点。在我看来,允许其他语言的数组下标从0开始总是愚蠢的,而mysql具有从0开始的limit offset子句是一个令人讨厌的不一致之处。