Vic*_*tor 5 database postgresql primary-key postgresql-9.3
我的数据库中有一张表,其ID为0(零)的行。主键是一个串行列。
我习惯于看到以1开头的序列。因此,如果我将此ID保持为零,是否存在问题?
串行数据类型创建自动递增的整数列。因此,您应该能够向该列添加任何整数值(包括0)。
来自文档
类型名称serial和serial4是等效的:都创建整数列。
....(有关串行的更多信息),我们创建了一个整数列,并安排其默认值从序列生成器中分配
http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL
这是作为答案提出的,因为它\xe2\x80\x99s 对于评论来说太长了。
\n你\xe2\x80\x99实际上在这里谈论两件事。
\n主键是指定为表的唯一标识符的列。可能还有其他唯一的列,但主键是您选定的列,可能是因为它\xe2\x80\x99 是最稳定的值。(例如,客户\xe2\x80\x99s 的电子邮件地址是唯一的,但它\xe2\x80\x99s 可能会发生变化,并且\xe2\x80\x99s 更难管理)。
\n主键可以是任何常见的数据类型,只要保证唯一即可。在某些情况下,主键是行数据的自然属性,在这种情况下它就是自然主键。
\n在(大多数?)其他情况下,主键是没有内在含义的任意值。在这种情况下,它称为代理键。
\n最简单的代理键,我喜欢称之为惰性代理键,是一个序列号。从技术上讲,它\xe2\x80\x99s并不是真正的代理,因为序列中有固有的含义,但它是任意的。
\n对于 PostgreSQL,通常与序列号关联的数据类型是integer,并且这在类型中隐含SERIAL。如果您在 MySQL/MariaDB 中执行此操作,则可以使用unsigned integer,它没有\xe2\x80\x99t 负值。PostgreSQL 没有\xe2\x80\x99t unsigned,所以数据确实可能是负数。
关于序列号的一点是它们通常从 开始1并以 递增1。在 PostgreSQL 中,您可以手动设置自己的序列(SERIAL只是一个快捷方式),在这种情况下,您可以从任何您喜欢的值开始,例如100,0甚至等等-100。
实际给出答案:
\n1,因为 \xe2\x80\x99 是我们人类计数的方式。推翻从一开始原则的原因包括:
\n0默认值。id来表示非标准数据,例如用于测试或虚拟值;例如,给出否定的客户id可能表示内部分配。ids 来实现与上述类似的操作。请注意,现代版本的 PostgreSQL 有一个首选的标准替代方案,即GENERATED BY DEFAULT AS IDENTITY. 与现代 SQL 趋势一致,它更加冗长,但比旧的SERIAL.
| 归档时间: |
|
| 查看次数: |
3700 次 |
| 最近记录: |