Sql将两列的值组合为主键

时间:2016-06-30 12:56:11

标签: sql primary-key

我有一个SQL服务器表,我在其上插入帐户明智的数据。相同的帐号不应在同一天重复,但如果日期更改,则可以重复。

客户根据日期和帐号检索数据。

简而言之,日期+帐号是唯一的,不应重复。

由于两者都是不同的字段,我应该连接两个字段并创建第三个字段作为主键,或者可以选择在合并值上使用主键。

请以最佳方式指导。

4 个答案:

答案 0 :(得分:2)

您可以创建复合主键。创建表时,可以在SQL Server中执行此类操作;

CREATE TABLE TableName (
  Field1 varchar(20),
  Field2  INT,
  PRIMARY KEY (Field1, Field2))

看看这个有助于SQL的每种风格的问题

How can I define a composite primary key in SQL?

答案 1 :(得分:1)

完全没有。只需使用主键约束:

alter table t add constraint pk_accountnumber_date primary key (accountnumber, date)

您也可以在create table声明中包含此内容。

但是,我可能会建议您使用自动递增/标识/串行主键 - 每行的唯一编号。然后将帐号/日期组合声明为唯一键。我更喜欢这样的合成主键有几个原因:

  • 它们可以很容易地引用外键关系中的一行。
  • 它们会在表格中显示插入顺序,因此您可以轻松查看最后插入的行。
  • 他们可以轻松识别单行以进行更新和删除。
  • 它们隐藏了引用表和应用程序中行的“id”信息。

答案 2 :(得分:1)

另一种方法是使PK为自动递增数,然后在自然键上放置唯一的唯一索引。通过这种方式,可以保留唯一性,但您可以尽可能快地加入任何子表。如果表不会有子表,那么复合PK是个好主意。如果有很多子表,这可能是更好的选择。

答案 3 :(得分:1)

请看一下,它将清除大部分疑问!

我们可以声明2列或更多列作为主键。

在这种情况下,主键中包含的每一列都将被调用复合键

请注意,复合键永远不能为空

现在,首先让我向您展示如何将2列或更多列用作主键。

create table table_name ( col1 type, col2 type, primary key(col1, col2));

好处是: 1)我 col1的值为(X),而 col2的值为(Y),那么其他任何行都不能将col1设置为(X),col2设置为(Y)。

2) col1,col2必须具有一些值,它们不能为null!

希望有帮助