/ / In quali casi è necessario utilizzare AUTOINCREMENT anziché l'ID ROW predefinito? - sqlite, sqlite3

In quali casi è necessario utilizzare AUTOINCREMENT anziché l'ID ROW predefinito? - sqlite, sqlite3

In Sqlite, ci sono due modi per creare valori di chiavi primarie che aumentano in modo monotono generato dal motore del database, attraverso l'impostazione predefinita ROWID meccanismo o attraverso il AUTOINCREMENT meccanismo.

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

Il documentazione sembra suggerire che l'uso AUTOINCREMENT è cattivo:

La parola chiave AUTOINCREMENT impone CPU, memoria, spazio su disco e overhead di I / O su disco aggiuntivi e dovrebbe essere evitata se non strettamente necessario. Di solito non è necessario.

Se la parola chiave AUTOINCREMENT viene visualizzata dopoINTEGER PRIMARY KEY, che modifica l'algoritmo di assegnazione ROWID automatico per impedire il riutilizzo dei ROWID per tutta la durata del database. In altre parole, lo scopo di AUTOINCREMENT è impedire il riutilizzo dei ROWID dalle righe cancellate in precedenza.

[Con AUTOINCREMENT,] SQLite tiene traccia diil più grande ROWID che una tabella abbia mai usato usando una tabella interna chiamata "sqlite_sequence". La tabella sqlite_sequence viene creata e inizializzata automaticamente ogni volta che viene creata una tabella normale che contiene una colonna AUTOINCREMENT. Il contenuto della tabella sqlite_sequence può essere modificato utilizzando le istruzioni UPDATE, INSERT e DELETE ordinarie. Tuttavia, apportare modifiche a questa tabella probabilmente perturba l'algoritmo di generazione chiavi AUTOINCREMENT. Assicurati di sapere cosa stai facendo prima di intraprendere tali cambiamenti.


In quali casi è appropriato utilizzare la parola chiave AUTOINCREMENT?

risposte:

2 per risposta № 1

La documentazione dice questo

lo scopo di AUTOINCREMENT è impedire il riutilizzo dei ROWID dalle righe precedentemente cancellate.

Quindi è appropriato usare l'AUTOINCREMENTparola chiave quando è necessario impedire il riutilizzo dei ROWID dalle righe cancellate in precedenza. Questo potrebbe essere necessario se hai riferimenti esterni a quelle righe eliminate e non devi confonderle con nuove righe.