Otrzymujesz jeden za darmo o nazwie ROWID. To jest w każdej tabeli SQLite, czy o to prosisz, czy nie.
Jeśli dołączysz kolumnę typu INTEGER PRIMARY KEY, kolumna ta wskazuje na (jest aliasem) automatyczną kolumnę ROWID.
ROWID (pod jakąkolwiek nazwą go nazwiesz) jest przypisywana wartości za każdym razem, gdy WSTAWISZ wiersz, zgodnie z oczekiwaniami. Jeśli jawnie przypiszesz wartość inną niż NULL do INSERT, otrzyma określoną wartość zamiast automatycznego zwiększania. Jeśli jawnie przypiszesz wartość NULL do INSERT, otrzyma następną wartość z automatycznego zwiększania.
Powinieneś także unikać:
INSERT INTO people VALUES ("John", "Smith");
I użyć
INSERT INTO people (first_name, last_name) VALUES ("John", "Smith");
zamiast. Pierwsza wersja jest bardzo delikatna - jeśli kiedykolwiek dodasz, przeniesiesz lub usuniesz kolumny w definicji tabeli, INSERT albo zakończy się niepowodzeniem, albo wygeneruje niepoprawne dane (z wartościami w niewłaściwych kolumnach).
select rowid from people;
Tak, jest to możliwe. Zgodnie z FAQ SQLite :
źródło
Stan na dzień dzisiejszy - czerwiec 2018 r
Oto, co oficjalna dokumentacja SQLite ma do powiedzenia na ten temat (pogrubienie i kursywa są moje):
źródło
Czytałeś to? Jak utworzyć pole AUTOINCREMENT.
źródło
Nie należy podawać
AUTOINCREMENT
słowa kluczowego nearPRIMARY KEY
. Przykład tworzenia klucza podstawowego z funkcją autoincrement i wstawiania:da:
źródło
Oprócz rowid możesz zdefiniować własne pole automatycznego zwiększania wartości, ale nie jest to zalecane. Zawsze jest lepszym rozwiązaniem, gdy używamy rowid, który jest automatycznie zwiększany.
Przeczytaj tutaj, aby uzyskać szczegółowe informacje.
źródło
SQLite AUTOINCREMENT to słowo kluczowe używane do automatycznego zwiększania wartości pola w tabeli. Możemy automatycznie zwiększać wartość pola, używając słowa kluczowego AUTOINCREMENT podczas tworzenia tabeli z określoną nazwą kolumny, aby ją automatycznie zwiększać.
Słowo kluczowe AUTOINCREMENT może być używane tylko z polem INTEGER. Składnia:
Podstawowe użycie słowa kluczowego AUTOINCREMENT jest następujące:
Na przykład patrz poniżej: Rozważmy utworzenie tabeli COMPANY w następujący sposób:
Teraz wstaw następujące rekordy do tabeli TB_COMPANY_INFO:
Teraz wybierz rekord
źródło
Wiem, że ta odpowiedź jest trochę spóźniona.
Celem mojej odpowiedzi jest odniesienie się do wszystkich, jeśli napotkają tego typu wyzwanie z SQLite teraz lub w przyszłości i mają z tym trudności.
Teraz, patrząc wstecz na twoje zapytanie, powinno wyglądać mniej więcej tak.
To działa z mojej strony. Tak jak tak
Na wypadek, gdybyś pracował z SQLite, proponuję sprawdzić przeglądarkę DB dla SQLite . Działa również na różnych platformach.
źródło
To, co robisz, jest poprawne, ale poprawna składnia „automatycznego inkrementacji” nie powinna zawierać spacji:
(Zwróć też uwagę, że zmieniłem twoje varchar na ciągi znaków. To dlatego, że SQLite wewnętrznie przekształca varchar w ciąg, więc po co się przejmować?)
wtedy twoja wkładka powinna być, w języku SQL jak najbardziej standardowym:
chociaż prawdą jest, że jeśli pominiesz identyfikator, zostanie on automatycznie zwiększony i przypisany, osobiście wolę nie polegać na automatycznych mechanizmach, które mogą się zmienić w przyszłości.
Uwaga na temat autoinkrementacji: chociaż, jak wielu zauważyło, nie jest to zalecane przez osoby korzystające z SQLite, nie podoba mi się automatyczne ponowne wykorzystywanie identyfikatorów usuniętych rekordów, jeśli nie jest używane automatyczne zwiększanie. Innymi słowy, ja podoba że identyfikator usuniętego rekordu nigdy, przenigdy nie pojawi się ponownie.
HTH
źródło