2013-08-09 11 views
5

Mam bazę danych, w której utworzyłem jedną tabelę o nazwie "SectionDetails". W tej tabeli ustawiłem "id" jako klucz podstawowy z właściwością AUTOINCREMENT. I wstawiam moje dane do tej tabeli.Czy sqlite "wstaw lub zamień" działa na klucz podstawowy AUTOINCREMENT?

Jednak doszedłem do scenariusza, w którym muszę sprawdzić, czy rekord, który wstawiam, jest już obecny, czy nie (jeśli rekord jest obecny, zamień go na te same wartości lub pomiń go, A jeśli rekord nie jest obecny, wstaw nowy jeden).

Ale kiedy próbowałem wstawić rekord z tymi samymi wartościami kolumny, zwiększa klucz podstawowy i wstawia ten sam wiersz ponownie zamiast zastępowania.

Moje pytanie brzmi: Czy sqlite "wstaw lub zamień" działa z kluczem głównym AUTOINCREMENT?

Używam następujące zapytanie:

insert or replace into SectionDetails(Name,Month,Title,Url)values('Deepak',"August","None","www.dd619.com") 

tutaj kolumna „id” nie pojawia się, ponieważ jej klucz podstawowy z AUTOINCREMENT nieruchomości.

Odpowiedz

8

Krótka odpowiedź: nie, to nie.

"Wstaw lub zamień" działa dobrze tylko po określeniu klucza podstawowego. Dzięki autoinkrecji w opisywanym setupie to nie działa.

Prawdopodobnie najszybszym sposobem na to jest utworzenie niestandardowej metody wstawiania/aktualizacji dla przypadku użycia.

15

Będziesz musiał dodać kilka unikalnych ograniczeń do innych kolumn, aby to działało, a nawet wtedy będziesz musiał zmienić swoje identyfikatory.

insert or replace jest naprawdę insert ze strategią rozwiązywania konfliktów . Oznacza to, że gdy insert narusza pewne ograniczenia, wszystkie sprzeczne wiersze są najpierw usuwane, a wstawianie odbywa się tylko wtedy. Mechanizm autoincrement wygeneruje dla Ciebie nową wartość ID.

Aby uzyskać więcej informacji: http://www.sqlite.org/lang_conflict.html

+0

Naprawdę ładna odpowiedź – Ata