SQL合并两列的值作为主键

Dan*_*k12 6 sql primary-key

我有一个SQL Server表,可以在上面插入帐户数据。同一帐号不应在同一天重复,但如果日期更改,可以重复。

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

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

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

请以最佳方式进行指导。

Ric*_*ner 5

您可以创建复合主键。当你创建表时,你可以在SQL Server中做这样的事情;

CREATE TABLE TableName (
  Field1 varchar(20),
  Field2  INT,
  PRIMARY KEY (Field1, Field2))
Run Code Online (Sandbox Code Playgroud)

看看这个问题,它对每种 SQL 风格都有帮助

如何在 SQL 中定义复合主键?


Gor*_*off 2

一点也不。只需使用主键约束:

alter table t add constraint pk_accountnumber_date primary key (accountnumber, date)
Run Code Online (Sandbox Code Playgroud)

您还可以将其包含在create table声明中。

不过,我可能建议您使用自动递增/身份/序列主键——每行都有一个唯一的编号。然后将帐号/日期组合声明为唯一键。我更喜欢这种合成主键有几个原因:

  • 它们使引用外键关系中的行变得容易。
  • 它们显示表中的插入顺序,因此您可以轻松查看最后插入的行。
  • 它们使识别单个行的更新和删除变得简单。
  • 它们对引用表和应用程序隐藏行的“id”信息。