Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一个表中可以有多个标识列吗?_Sql - Fatal编程技术网

Sql 一个表中可以有多个标识列吗?

Sql 一个表中可以有多个标识列吗?,sql,Sql,我们可以在一个表中指定2个标识列吗?如果没有,为什么?如果是,为什么“标识列”不是SQL概念。您必须考虑到一些特定的实现,它们有自己的怪癖和扩展,而不是像您的标记所断言的一般SQL;请编辑并重新标记您的问题。(如果你的意思是“Microsoft SQL Server”,那么答案是“不,因为Microsoft认为这毫无意义[而且这一次他们是对的!-)”)。取决于你所说的“身份” 有几种特定于实现的构造,如“rowid”、“oid”等,其目的是使用DBMS生成的值唯一地标识一行-在大多数DBMS系统

我们可以在一个表中指定2个标识列吗?如果没有,为什么?如果是,为什么“标识列”不是SQL概念。您必须考虑到一些特定的实现,它们有自己的怪癖和扩展,而不是像您的标记所断言的一般SQL;请编辑并重新标记您的问题。(如果你的意思是“Microsoft SQL Server”,那么答案是“不,因为Microsoft认为这毫无意义[而且这一次他们是对的!-)”)。

取决于你所说的“身份”

有几种特定于实现的构造,如“rowid”、“oid”等,其目的是使用DBMS生成的值唯一地标识一行-在大多数DBMS系统中,每行只有一个

行的“标识”也可以表示主键。ANSI sql支持由许多列组成的主键,在大多数DBMS中,可以在主键中包含任何或所有合适的列。然后,标识由主键中所有列的组合组成——但这是一个很大的标识,但从逻辑上讲,它仍然构成一个标识


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

其他人关于“标识”不是SQL标准中的一种类型的观点是正确的

IBMInformixDynamicServer(IDS)支持SERIAL、SERIAL8和BIGSERIAL类型。这些是具有额外属性的整数类型,如果在其中插入零(或未指定要插入的值),则将应用下一个更高的以前未使用的值。这大致相当于其他DBMS所称的标识列。(IDS还提供序列。)

一个奇怪的(怪癖)是允许在一个表中同时包含一个串行列和一个SERIAL8或BIGSERIAL列。这样做是不建议的,也是不明智的;但是,这并不是禁止的


大多数DBMS不允许在一个表中有两个单独的“identity”列。

请参阅关于t'other Jonathan的t'other问题,这只是一个松散的关系。您是否特别提到SQL Server中的identity数据类型?来吧,拥有两个具有不同种子和增量的identity列会很有趣!说真的,也许他说的是主键?