将另一个主键添加到UNIQUE表中

gdu*_*ubs 1 sql-server primary-key sql-server-2008

我在向表中添加另一个主键时遇到问题.我有3列:

  1. 帐户ID(身份)
  2. 电子邮件ID
  3. 数据字段

当我创建表格时,我有这个使帐户ID和电子邮件ID唯一.

PRIMARY KEY (AccountID, EmailID)
Run Code Online (Sandbox Code Playgroud)

我认为这会让我的emailid变得独一无二,但是在我尝试使用相同的emailid插入另一行后,它就完成了.所以我以为我错过了一些东西.

现在我的问题:

  1. 如果,我必须使用alter,如何更改表/ PK约束以修改EmailID字段并使其成为唯一?
  2. 如果我决定放弃这个表并制作一个新表,我该如何使这两个主键唯一?

Mik*_*scu 6

您可以更改表并在EmailID列上添加新的UNIQUE CONSTRAINT.

-- This will create a constraint which enforces that the field EmailID
-- have unique values
ALTER TABLE Your_Table_Name
ADD CONSTRAINT unique_constraint_name UNIQUE (EmailID)
Run Code Online (Sandbox Code Playgroud)

但值得注意的是,更改表以添加此新的唯一约束并不意味着您必须删除为(AccountID,EmailID)对添加的其他PRIMARY KEY约束.当然,除非您的业务逻辑决定它,否则.

当您对(AcountID,EmailID)PRIMARY KEY进行分组时,它指定AcountID和EmailID都参与唯一标识该表中的每个单独记录.因此,这意味着您可以在表中包含以下记录:

 AccountID  |  EmailID                  |  Other Fields
----------------------------------------------------------
 100        |  user@company.com         |     ....
 101        |  user2@othermail.com      |     ....
 100        |  user_alternate@mail.com  |     ....
Run Code Online (Sandbox Code Playgroud)

在前面的示例中,可以有两个具有相同AccountID的记录,这是有效的,因为PRIMARY KEY指定只有(AccountID,EmailID)对必须是唯一的 - 它是唯一的.它没有规定AccountID是独立的.

总之,您可能希望在AccountID上添加另一个UNIQUE约束.或者只是将AccountID单独作为PRIMARY KEY,然后在EmailID上添加UNIQUE约束.