Добавление строк в базу данных SQLite, где первичный ключ уже может существовать - PullRequest
0 голосов
/ 13 февраля 2011

Я пытаюсь объединить несколько пар баз данных SQLite3 с одинаковыми таблицами (и схемами). Некоторые из таблиц довольно просты и содержат строки простых данных, но некоторые таблицы имеют первичные ключи. Некоторые ключи являются уникальными, например URL (например, url LONGVARCHAR PRIMARY KEY), а некоторые из них являются просто целочисленными индексами, но НЕ имеют автоматического приращения (например, id INTEGER PRIMARY KEY).

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

Мой вопрос: что произойдет, если строка будет добавлена ​​в базу данных, где строка с таким же ключом уже существует? Он должен перезаписать строку с этим ключом, верно? Я надеялся, что он добавит их в таблицу и обновит ключ, но это работает только в том случае, если ключ имеет числовой компонент, для которого установлено правильное автоинкремент?

Может ли кто-нибудь подтвердить мои предположения - и, если возможно, предложить предложение о самом простом способе добавления таких строк?

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 14 февраля 2011

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

Поэтому, когда вы выполняете команду массовой вставки или что-то еще, что используете для вставки значений в новую таблицу, вы просто не предоставляете ввод для поля первичного ключа, и НИКОГДА не будет дубликатов.

Столбцы:

Имя ID

Просто не указывайте поле идентификатора, т.е. /

INSERT INTO tableName ("Synetech")

insert просто добавит это к следующему доступному индексу ID в таблице.

Удачи!

0 голосов
/ 13 февраля 2011

Если вы попытаетесь ВСТАВИТЬ дубликат первичного ключа, он выдаст вам ошибку и не разрешит вставку. SQLite также поддерживает синтаксис «REPLACE INTO», который обновляет дублированный первичный ключ.

Если вы хотите добавить дубликаты, вам нужно будет проверить, существует ли поле с этим ключом, и если да, то заменить ключ на какое-то новое значение. Правильный способ сделать это, вероятно, зависит от вашего приложения. Для целочисленных ключей вы можете просто взять максимум + 1, но для URL-ключей неясно, каким должно быть правильное поведение.

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