/ / SQLite: * empêche la réinitialisation de la valeur * PRIMARY KEY après la suppression de toutes les lignes [duplicate]

SQLite: * empêche la réinitialisation de la valeur * PRIMARY KEY après la suppression de toutes les lignes [dupliquer] - sqlite, incrémentation automatique

J'ai une table SQLite, avec quelques colonnes, y compris une colonne "ID" qui est INTEGER PRIMARY KEY.

Lorsque j'insère, cette valeur augmente comme prévu.

Toutefois, lorsque je supprime toutes les lignes, la valeur de cette colonne est remplacée par 1 lors de l’insertion suivante.

Existe-t-il un moyen de continuer à incrémenter la valeur de la colonne à partir de la valeur la plus élevée avant la suppression?

Par exemple:

  • (table vide)
  • insérer
  • insérer

(La valeur de la 2ème ligne est 2, la prochaine insertion serait 3)

  • supprimer toutes les lignes
  • insérer

(La valeur de l'ID pour cette dernière ligne est 1, mais je veux qu'elle soit 3)

Réponses:

2 pour la réponse № 1

Si le mot-clé AUTOINCREMENT apparaît aprèsINTEGER PRIMARY KEY, qui modifie l'algorithme d'affectation automatique ROWID pour empêcher la réutilisation des ROWID pendant la durée de vie de la base de données. En d'autres termes, AUTOINCREMENT a pour but d'empêcher la réutilisation des ROWID à partir de lignes précédemment supprimées.

https://www.sqlite.org/autoinc.html


0 pour la réponse № 2

Quelle version de SQLite utilisez-vous? j'utilise SQLite version 3.8.11.1. Les valeurs de clé primaire ne sont pas réinitialisées.

Créer un tableau et insérer des données

sqlite> create table test (id integer primary key autoincrement, name varchar(20));
sqlite> select * from test;
sqlite> insert into test (name) values ("hello1");
sqlite> insert into test (name) values ("hello2");
sqlite> select * from test;
id          name
----------  ----------
1           hello1
2           hello2
sqlite> select * from sqlite_sequence;
name        seq
----------  ----------
test        2

Dans un autoincrement colonne, sqlite conserve les informations de séquence dans sqlite_sequence table interne que vous pouvez également interroger.

Suprimmer les données. Notez que la séquence reste telle quelle.

sqlite> delete from test;
sqlite> select * from sqlite_sequence;
name        seq
----------  ----------
test        2
sqlite> select * from test;
sqlite> insert into test (name) values ("world1");
sqlite> insert into test (name) values ("world2");
sqlite> select * from test;
id          name
----------  ----------
3           world1
4           world2
sqlite> select * from sqlite_sequence;
name        seq
----------  ----------
test        4

Sur cette base, il semble que les numéros de séquence restent tels quels après la suppression. J'utilise le autoincrement mot-clé.