У меня есть приложение, в котором пользователи могут добавлять обновления и удалять записи, я хотел знать, как лучше всего избежать дублирования записей. В этом приложении, чтобы избежать дублирования записей, я создал индекс в таблице, это хорошая практика или есть другие?Хорошая практика, чтобы избежать дублирования записей
ответ
Вы можете использовать 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
)
Идентификатор для стола почти обязателен в зависимости от меня. Чтобы избежать дубликатов при вставке строки, вы можете просто использовать:
INSERT IGNORE INTO Table(id, name) VALUES (null, "blah")
Это работает в MySQL, я не уверен, что SQL Server.
AFAIK, этот точный синтаксис не существует в диалоговом окне SQL Server SQL (T-SQL). Вместо этого используйте ['MERGE ... WHEN NOT MATCHED'] (http://msdn.microsoft.com/de-ch/library/bb510625.aspx). – stakx
Есть несколько способов сделать это. Если у вас есть уникальный индекс в поле, и вы пытаетесь вставить дублирующее значение 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
, чтобы просто игнорировать любые дубликаты вставок. Если вы вставляете несколько строк, любые дубликаты будут проигнорированы, а не дубликаты будут по-прежнему вставлены.
вы объясните еще кое-что, как ваши поля и таблицу. И какое дублирование вы хотите избежать. – Sandesh
Я согласен с @Sandesh - чего вы хотите избежать? Вы хотите заблокировать пользователя, вставляя повторяющиеся данные, или хотите сохранить несколько строк с одинаковыми данными? вы хотите, чтобы ошибка отображалась, или просто продолжайте, как будто ничего не случилось? – ShayD
Как дублируются записи в системе? Являются ли пользователи, отправляющие данные более одного раза? Вводят ли несколько пользователей одни и те же данные? –