2009-05-21 35 views
0

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

+0

看到这个问题http://stackoverflow.com/questions/350950 – 2009-05-21 05:01:38

+0

关于从水能捞到乔纳森水能捞到的问题 - 那不过只是松散的关系。 – 2009-05-21 05:49:37

回答

1

“标识列”不是SQL概念。你必须记住一些具体的实现,它有自己的怪癖和扩展,而不是一般的SQL,因为你的标签声明;请编辑并重新标记您的问题。 (如果你碰巧指的是“Microsoft SQL Server”,答案是“不”,因为微软认为它没有任何意义[而且曾经他们是正确的! - ]])。

1

取决于你的意思是“身份”

有诸如“ROWID”,“OID”等,其目的是使用由DBMS生成的值uniquly标识一行几个具体的实施结构 - 在大多数dbms系统中每行只有一个这样的行。

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

您可以指定一个“独一无二”的约束***县***任何或所有适合的列,每列constaint可以被认为是一个“身份”本身就是这样回答你的问题可能是“是” - 但我从来没有见过这样的真实生活实现。

0

其他人们对“身份”不是SQL标准型点是正确的。

的IBM的Informix动态服务器(IDS)支持类型SERIAL,SERIAL8和BIGSERIAL。这些是具有额外属性的整数类型,如果您向其中插入零(或者如果您未指定要插入的值),则应用下一个较高的先前未使用的值。这与其他DBMS称为标识列的内容大致对应。 (IDS还提供了序列。)

一个好奇(怪癖)是,您可以同时在一个表中同时拥有SERIAL列和SERIAL8或BIGSERIAL列。这样做不被推荐,也不明智;但是,这并不是禁止的。

大多数DBMS不允许在一个表中的两个独立的“身份”列。

相关问题