/ / W jakich przypadkach należy używać AUTOINCREMENT zamiast domyślnego ROW ID? - sqlite, sqlite3

W jakich przypadkach należy używać AUTOINCREMENT zamiast domyślnego ROW ID? - sqlite, sqlite3

W Sqlite istnieją dwa sposoby na tworzenie monotonicznie rosnących wartości klucza podstawowego generowanych przez silnik bazy danych, za pośrednictwem wartości domyślnych ROWID mechanizm lub poprzez AUTOINCREMENT mechanizm.

sqlite> -- Through the default ROWID mechanism
sqlite> CREATE TABLE foo(id INTEGER NOT NULL PRIMARY KEY, foo);
sqlite> INSERT INTO foo (foo) VALUES ("foo");
sqlite> INSERT INTO foo (foo) VALUES ("bar");
sqlite> SELECT * FROM foo;
1|foo
2|bar
sqlite>
sqlite> -- Through the AUTOINCREMENT mechanism
sqlite> CREATE TABLE bar(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, bar);
sqlite> INSERT INTO bar (bar) VALUES ("foo");
sqlite> INSERT INTO bar (bar) VALUES ("bar");
sqlite> SELECT * FROM bar;
1|foo
2|bar
sqlite> -- Only the AUTOINCREMENT mechanism uses the sqlite_sequence table
sqlite> SELECT * FROM sqlite_sequence WHERE name in ("foo", "bar");
bar|2

The dokumentacja wydaje się sugerować, że za pomocą AUTOINCREMENT jest zły:

Słowo kluczowe AUTOINCREMENT nakłada dodatkowy procesor, pamięć, przestrzeń dyskową i narzuty we / wy dysku i powinno się go unikać, jeśli nie jest to bezwzględnie potrzebne. Zwykle nie jest potrzebne.

Jeśli słowo kluczowe AUTOINCREMENT pojawi się poINTEGER PRIMARY KEY, który zmienia algorytm automatycznego przypisywania ROWID, aby zapobiec ponownemu wykorzystaniu ROWIDów przez cały okres istnienia bazy danych. Innymi słowy, celem AUTOINCREMENT jest zapobieganie ponownemu użyciu ROWIDs z wcześniej usuniętych wierszy.

[Z AUTOINCREMENT,] SQLite śledzinajwiększy ROWID, który kiedykolwiek był w tabeli przy użyciu wewnętrznej tabeli o nazwie "sqlite_sequence". Tabela sqlite_sequence jest tworzona i inicjowana automatycznie za każdym razem, gdy tworzona jest normalna tabela zawierająca kolumnę AUTOINCREMENT. Zawartość tabeli sqlite_sequence można zmodyfikować za pomocą zwykłych instrukcji UPDATE, INSERT i DELETE. Jednak modyfikowanie tej tabeli prawdopodobnie zakłóci działanie algorytmu generowania kluczy AUTOINCREMENT. Upewnij się, że wiesz, co robisz, zanim podejmiesz takie zmiany.


W jakich przypadkach należy używać słowa kluczowego AUTOINCREMENT?

Odpowiedzi:

2 dla odpowiedzi № 1

Dokumentacja mówi, że

celem AUTOINCREMENT jest zapobieganie ponownemu użyciu ROWIDs z wcześniej usuniętych wierszy.

Dlatego właściwe jest użycie AUTOINCREMENTsłowo kluczowe, gdy chcesz zapobiec ponownemu użyciu ROWIDs z wcześniej usuniętych wierszy. Może to być konieczne, jeśli masz zewnętrzne odwołania do usuniętych wierszy i nie należy mylić ich z nowymi wierszami.