2013-07-24 2 views
3

Я пытаюсь выяснить, что проблема в течение нескольких часов :(Sqlite ИЛИ ВСТАВИТЬ REPLACE INTO не работает, как ожидалось

Таблица выглядит следующим образом:

CREATE TABLE IF NOT EXISTS pages(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    title TEXT, 
    parent INTEGER DEFAULT NULL, 
    content TEXT, 
    time INTEGER, 
    FOREIGN KEY(category) REFERENCES categories(id) ON DELETE CASCADE, 
    FOREIGN KEY(parent) REFERENCES pages(id) ON DELETE CASCADE, 
    UNIQUE(title) ON CONFLICT REPLACE 
) 

Вставка запрос:

INSERT OR REPLACE INTO pages (title, parent, content, time) VALUES (?, ?, ?, ?) 

title должен быть уникальным, поэтому, если он обнаружил запись с тем же названием, она должна быть заменена, она заменяется, но идентификатор тоже меняется! Это проблема, потому что все другие записи, которые были havin g родительское поле, указывающее на старый идентификатор, удаляется :(

Почему это происходит?

ответ

4

Ваш ID установлен на автоматическое приращение так, когда вы заменить что-то, ID также changes.because замена средства удаления старых строк и вставляя новый один. Я не знаю, имеет ли sqlite INSERT ... ON DUPLICATE KEY UPDATE

+0

ОК, что имеет смысл:/Думаю, мне нужно проверить, существуют ли записи и обновить запрос, иначе вставьте .. – thelolcat

+0

Вот еще один поток, который я нашел: http://stackoverflow.com/questions/16942109/sqlite-replace-without -автоматическое приращение – Mihai

0

Я думаю, вам нужно заменить тип TEXT для

VARCHAR 
+1

Добро пожаловать в Stack Overflow. «Я думаю» не ответы, а комментарий. Пожалуйста, уточните, почему это будет ответом на его проблему. – UnholyRanger

Смежные вопросы