1

在我的网站上,我允许我的用户更新他们的电子邮件地址。但是,我要求每个电子邮件地址都是唯一的。如何确保在更新表格中输入的电子邮件地址在数据库中更新之前是唯一的?

4

3 回答 3

1

对存储您的电子邮件地址的列具有唯一约束

您可以使用 UNIQUE 约束来确保在不参与主键的特定列中没有输入重复值。

盲目地插入具有唯一约束的表中会引发异常。为避免这种情况,请在 where 子句中运行选择查询检查此电子邮件地址。

如果您拥有庞大的用户群,请务必为您的电子邮件列编制索引。

于 2012-08-17T03:34:53.423 回答
0

假设您在桌子上有一些钥匙,并且您最初的陈述是:

UPDATE dbo.foo SET Email = @Email WHERE Key = @key;

然后您可以先检查值:

IF EXISTS (SELECT 1 FROM dbo.foo WHERE Email = @Email AND Key <> @Key)
BEGIN
  RAISERROR('Sorry, that e-mail is already in use.', 11, 1);
END
ELSE
BEGIN 
  UPDATE dbo.foo SET Email = @Email WHERE Key = @key;
END

现在,无论如何你都应该对表有一个约束,例如

ALTER TABLE dbo.foo ADD CONSTRAINT UQ_Email
 UNIQUE(Email);

但是,首先检查违规仍然是有益的,即使有约束,正如我在这里演示的那样

于 2012-08-17T03:45:01.767 回答
-1

我的第一个建议是将其定义为表中的唯一列,请参阅this。或者,我认为这不是一个很好的方法(但也许由于某种原因你不控制表)你可以在你的插入语句中检查它。如果您能提供更多信息(表结构/插入语句)我将能够为您提供更好的答案。

于 2012-08-17T03:31:45.967 回答