Запрет на вставку, если записи уже существуют в sqlite - PullRequest
2 голосов
/ 20 сентября 2011

Я программирую для iPhone и использую базу данных SQLITE для своего приложения. У меня есть ситуация, когда я хочу вставить записи в таблицу, только если записи ранее не существовали. В противном случае записи не должны вставляться.

Как я могу это сделать? Пожалуйста, любое тело предложит мне подходящий вопрос для этого.

Спасибо всем и каждому,

Ответы [ 2 ]

11 голосов
/ 20 сентября 2011

Просмотр страницы INSERT в SQLite http://www.sqlite.org/lang_insert.html.

Вы можете сделать это, используя следующий синтаксис

INSERT OR IGNORE INTO tablename ....

Пример

INSERT OR IGNORE INTO tablename(id, value, data) VALUES(2, 4562, 'Sample Data');

Примечание: Вам необходимо иметь КЛЮЧ на столбцах таблицы, которые однозначно идентифицируют строку.Только если попытается вставить дубликат KEY, INSERT OR IGNORE не будет вставлять новую строку.

В приведенном выше примере, если у вас есть KEY на id, тогда другая строка с id = 2 не будет вставлен.
Если у вас KEY только на id and value, то комбинация id = 2 and value = 4562 приведет к тому, что новая строка не будет вставлена.

Короче, там должен быть ключом для уникальной идентификации ROW только тогда База данных узнает, что есть дубликат, который НЕ ДОЛЖЕН быть разрешен.

В противном случае если у вас нет КЛЮЧА, вы бынужно перейти на SELECT и затем проверить, есть ли уже строка, маршрут.Но здесь также при любом условии, которое вы используете для столбцов, вы можете добавить их как KEY к таблице и просто использовать INSERT OR IGNORE

. В SQLite невозможно изменить таблицу и добавить ограничение типаУНИКАЛЬНЫЙ или ПРАЙМАЙ КЛЮЧ.Для этого вам нужно воссоздать таблицу.Посмотрите этот FAQ на sqlite.org
http://sqlite.org/faq.html#q11

3 голосов
/ 20 сентября 2011

Здравствуйте, Санкар, что вы можете сделать, это выполнить запрос на выборку с записью, которую вы хотите вставить, и затем проверить ответ с помощью SQLite_NOTFOUND-флага SQLite, который вы можете проверить, существует ли эта запись уже или нет.Если он не существует, вы можете вставить его, иначе пропустите вставку.

Я надеюсь, что это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...