【发布时间】:2012-08-17 03:25:05
【问题描述】:
在我的网站中,我允许我的用户更新他们的电子邮件地址。但是,我要求每个电子邮件地址都是唯一的。如何确保在更新表单中输入的电子邮件地址在数据库中更新之前是唯一的?
【问题讨论】:
-
当他们第一次进入时,您如何确保它是独一无二的?
-
我使用了membershipcreatestatus。
标签: asp.net sql-server
在我的网站中,我允许我的用户更新他们的电子邮件地址。但是,我要求每个电子邮件地址都是唯一的。如何确保在更新表单中输入的电子邮件地址在数据库中更新之前是唯一的?
【问题讨论】:
标签: asp.net sql-server
在存储您的电子邮件地址的列上有一个unique constraint。
您可以使用 UNIQUE 约束来确保没有重复值 在不参与主要的特定列中输入 键。
在具有唯一约束的表中盲目插入会引发异常。为避免这种情况,请在 where 子句中运行选择查询检查此电子邮件地址。
如果您拥有庞大的用户群,请务必为您的电子邮件列编制索引。
【讨论】:
假设你有一些钥匙在桌子上,你最初的陈述是:
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);
但首先检查违规仍然是有益的,即使有约束as I demonstrated here。
【讨论】:
我的第一个建议是将其定义为表中的唯一列 see this。或者,我认为这不是一个很好的方法(但也许由于某种原因你不控制表)你可以在你的插入语句中检查这个。如果您能提供更多信息(表结构/插入语句)我将能够为您提供更好的答案。
【讨论】: