我有一个用户可以添加更新和删除记录的应用程序,我想知道避免重复记录的最佳方法。在这个避免重复记录的应用程序中我在表上创建了一个索引,这是一个好习惯还是还有其他?
答案 0 :(得分:2)
有几种方法可以做到这一点。如果您在字段上有唯一索引,并且尝试插入重复值SQL Server并抛出错误。我首选的方法是使用
测试插入前的存在IF NOT EXISTS (SELECT ID FROM MyTable WHERE MyField = @ValueToBeInserted)
BEGIN
INSERT INTO MyTable (Field1, Field2) Values (@Value1, @Value2)
END
您还可以返回一个值,让您知道INSERT
是否使用上述代码中的ELSE
进行了。
如果您选择索引字段,则可以将IGNORE_DUP_KEY
设置为忽略任何重复的插入。如果要插入多行,则将忽略任何重复项,并且将继续插入非重复项。
答案 1 :(得分:1)
根据我的说法,桌子的id几乎是强制性的。为避免重复插入行,您只需使用:
INSERT IGNORE INTO Table(id, name) VALUES (null, "blah")
这适用于MySQL,我不确定SQL Server。
答案 2 :(得分:1)
您可以在不希望重复的列或列上使用UNIQUE
constraints;另见http://www.w3schools.com/sql/sql_unique.asp。
以下是单列和多列唯一约束的示例:
CREATE TABLE [Person]
(
…
[SSN] VARCHAR(…) UNIQUE, -- only works for single-column UNIQUE constraint
…
[Name] NVARCHAR(…),
[DateOfBirth] DATE,
…
UNIQUE ([Name], [DateOfBirth]) -- works for any number of columns
)