Как сделать SQL Вставить или Заменить как операцию без изменения первичного ключа? - PullRequest
1 голос
/ 07 марта 2011

Я пытаюсь вставить запись в таблицу базы данных SQLite. Таблица имеет ограничение «Уникальное» для столбца «URL» и целочисленное значение автоматического увеличения первичного ключа «_id».

Я использую вставку или замену в качестве разрешения конфликта, поскольку мне необходимо сохранить новые данные. Тем не менее, этот метод увеличивает первичный ключ и портит некоторые внешние ключи в других таблицах.

Какой лучший способ перезаписать запись без обновления _id?

Ответы [ 2 ]

5 голосов
/ 07 марта 2011

Простой ответ - прекратить использовать синтаксис Replace.Это приводит к удалению старой записи, а затем к добавлению новой ... что увеличит ваш индекс.

Используйте синтаксис UPDATE для обработки конфликтов вместо

РЕДАКТИРОВАТЬ:

Если вы действительно неравнодушны к синтаксису «Заменить», это обойдется вам дорого.Вам нужно будет написать дополнительный код, который обновит все предыдущие вхождения старого индекса в новый.Не слишком сложно, но это исправит проблему синхронизации индексов

Документация [Перечислено в разделе REPLACE немного вниз по странице]: http://www.sqlite.org/lang_conflict.html

1 голос
/ 03 марта 2012

это мой код SQLite

"CREATE TABLE IF NOT EXISTS posts (" +
"_id integer NOT NULL," +
"id_language integer NOT NULL" +
");" +
"CREATE UNIQUE INDEX posts_idx ON posts(_id, id_language);";


"INSERT OR REPLACE INTO " + DB_TABLE + " (" + formulateColumns() + ") " +
            "VALUES (" + formulateValues(v) + ");");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...