Как предотвратить обновление дублирующихся строк в базе данных SQLite? - PullRequest
1 голос
/ 30 мая 2010

Я вставляю новые строки в таблицу SQLite, но не хочу вставлять повторяющиеся строки.

Я также не хочу указывать каждый столбец в базе данных, если это возможно. Я даже не знаю, возможно ли это.

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

Ответы [ 3 ]

3 голосов
/ 30 мая 2010

Это один из самых первых шагов в проектировании и нормализации базы данных . Вы должны иметь возможность явно определить, что вы подразумеваете под дублирующейся строкой , а затем поместить ограничение первичного ключа (или ограничение уникальности) в столбцы таблицы, которые представляют это определение.

Прежде чем вы сможете определить, что означает дубликат , вы должны определить (или решить), что именно должна содержать таблица. то есть, какой объект или абстракцию реального бизнес-домена каждая строка в таблице представляет или будет содержать данные для ...

Как только вы это сделаете, PK или ограничение уникальности остановит вас от вставки повторяющихся строк ... Тот же PK поможет вам найти дублирующуюся строку, когда она существует, и обновит ее значениями, не являющимися дубликатами. -определение (не PK) столбцов, которые отличаются от значений в существующей повторяющейся строке. Только после всего этого может помочь процесс вставки или замены (как определено в SQL Lite). Эта команда проверяет, существует ли дублирующаяся строка (* как определено ограничением yr PK), и, если она существует, вместо вставки новой строки она обновляет столбцы, не определенные в PK, в этой строке значениями, указанными в запросе Replace.

1 голос
/ 30 мая 2010

Ваши желания кажутся взаимно противоречивыми. В то время как insert or replace ответ Андрея приблизит вас к тому, что вы хотите сказать, что, вероятно, должно прояснить для вас, чего вы действительно хотите.

Если вы не хотите указывать каждый столбец и хотите, чтобы (предположительно) частичная строка обновлялась, а не вставлялась, вам, вероятно, следует взглянуть на уникальное ограничение и знать, что неоднозначность вашего требования также предъявлялись комитетом SQL92 .

0 голосов
/ 30 мая 2010

http://www.sqlite.org/lang_insert.html

insert or replace может вас заинтересовать

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