0

我有一个表,其中包含 3 个主键(我们称它们为 FirstName、SecondName、VersionID)和一个数据列(EmailAddress)。

我想确保在插入数据时,数据列对于前两列中的任何一列都是唯一的。

即,任何电子邮件地址对于 FirstName、SecondName 的任何组合都是唯一的。然而,同一个 EmailAddress 的多个值可以具有相同的 FirstName 和 SecondName 但不同的 versionID。

我最初的想法是在这些列上创建一个索引以确保唯一性,但我无法完全弄清楚如何做到这一点......然后我考虑了触发器,但我不确定如何构建它们。

什么是最有效的方法,我将如何进行?

4

3 回答 3

0
# firstname, secondname & emailaddress together must be unique
ALTER TABLE mytable
ADD CONSTRAINT ux_email_firstname_secondname_versionid
UNIQUE (firstname, secondname, emailaddress);

# emailaddress and versionid together must be unique
ALTER TABLE mytable
ADD CONTRAINT ex_emailaddress_versionid
UNIQUE (emailaddress, versionid);

类似的东西使三列的组合独一无二,但如果一个变化它不再是一个相似的匹配。

于 2013-04-07T01:09:27.190 回答
0

多个唯一约束:

ALTER TABLE your_table
  ADD CONSTRAINT constraint_name_name UNIQUE (FirstName, SecondName, versionID , EmailAddress)
于 2013-04-07T01:09:59.873 回答
0

对于你所说的,我会抛出任何关于触发器的想法。根据您上面的评论,您只需要对电子邮件地址进行唯一约束。

ALTER TABLE Table_Name
  ADD CONSTRAINT constraint_name UNIQUE (EmailAddress)

我建议不要这样做,因为用户可能输入错误的电子邮件地址,这会阻止其他用户正确输入他们的电子邮件地址。

最好的办法是使用@TheEwook 编写的查询:

多个唯一约束:

ALTER TABLE your_table ADD CONSTRAINT constraint_name_name UNIQUE (FirstName, SecondName, versionID , EmailAddress) 共享|编辑

如果您担心有 2 个用户尝试使用相同的电子邮件地址,那么您可能希望在插入时通过检查每个用户的最大版本来处理该问题,并将该电子邮件与插入的电子邮件进行比较.

于 2013-04-07T01:50:12.967 回答