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

guz6ccqo  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(1014)

我想知道,为什么sql主键索引从1开始,为什么不从0开始?有什么原因吗?
我不知道这是不是一个好地方问这样的问题,但在网上找不到答案。

ufj5ltwl

ufj5ltwl1#

sql标准4.15.11标识列-https://www.sis.se/api/document/preview/916885/ 表示“一个标识列有一个起始值、一个结束值、一个增量和一个循环选项”,并不是说它应该从任何特定的数字开始,而是因为它的目的是提供一个唯一的行号(如果设置为主键),然后是一个负的开始价值将毫无意义。如果你愿意,mysql将允许你将start值设置为0,但我看不出有什么意义。在我看来,在其他语言中允许数组下标从0开始总是愚蠢的,mysql有一个从0开始的limit offset子句是一个令人讨厌的不一致性。

2ic8powd

2ic8powd2#

sql中的计数通常以“1”开始。例如,子字符串操作从1(而不是0)开始计算字符串中的字符数。 row_number() 枚举组中的行,从1(而不是0)开始。
原因很简单。人类从1开始数数——问问很多四岁的孩子就知道了。在学习编程之前,我们不会从零开始计数。作为一个物种,我们从“1”开始数了几千年,然后把0加到数字的万神殿。
当从表中计算行数时,从1开始计算要直观得多:“1”对于第一行几乎不需要解释,特别是对于不是程序员的人第一行的“0”需要解释。
很容易忘记,但是sql是为非程序员设计的。很多冗长的内容是因为它是为业务用户设计的。

zqry0prt

zqry0prt3#

用这个 SET [GLOBAL|SESSION] sql_mode='NO_AUTO_VALUE_ON_ZERO' 然后它将从0开始
mysql文档

相关问题