我们可以在表中有多个标识列吗?

时间:2009-05-21 04:59:34

标签: sql

我们可以在表中指定2个标识列。如果没有原因?如果是,为什么

3 个答案:

答案 0 :(得分:1)

“标识列”不是SQL概念。您必须记住一些具有自己的怪癖和扩展的特定实现,而不是SQL,因为您的标记断言;请编辑并重新标记您的问题。 (如果您的意思是“Microsoft SQL Server”,答案是“不,因为微软认为这没有任何意义[并且一旦他们做得对了! - ”])。)。

答案 1 :(得分:1)

取决于“身份”的含义

有几个特定于实现的构造,例如“rowid”“oid”等,其目的是使用DBMS生成的值单独识别行 - 在大多数dbms系统中,每行只有一个且只有一个。

行的“标识”也可能意味着主键。 ANSI sql支持由许多列组成的主键,在大多数DBMS中,您可以在主键中包含任何或所有合适的列。然后,身份由主键中所有列的组合组成 - 但这是一个很大但在逻辑上这仍构成一个单一身份。

您可以在任何或所有合适的列上指定'唯一'约束*** s ***,每个constaint本身可以被视为“身份”,因此您的问题的答案可能是“是” - 但我从未见过现实生活中的这一点。

答案 2 :(得分:0)

其他人关于“身份”不是SQL标准类型的观点是正确的。

IBM Informix Dynamic Server(IDS)支持SERIAL,SERIAL8和BIGSERIAL类型。这些是具有额外属性的整数类型,如果向其中插入零(或者如果未指定要插入的值),则会应用下一个更高的先前未使用的值。这与其他DBMS调用标识列的内容大致相对应。 (IDS也提供序列。)

一个好奇心(怪癖)是允许您在单个表中同时拥有SERIAL列和SERIAL8或BIGSERIAL列。不建议这样做,并且不明智;但是,这并不是禁止的。

大多数DBMS不允许在一个表中使用两个单独的“标识”列。