J'ai quelques tables dans SQLite et j'essaie de comprendre comment réinitialiser le champ de base de données auto-incrémenté.
Je lis ça DELETE FROM tablename
devrait tout supprimer et réinitialiser le champ d’incrémentation automatique sur 0
, mais lorsque je le fais, les données sont supprimées. Lorsqu'un nouvel enregistrement est inséré, l'auto-incrémentation reprend là où elle s'était arrêtée avant la suppression.
Les propriétés de mon champ ident
sont les suivantes:
integer
PRIMARY KEY
, AUTOINCREMENT
, UNIQUE
Est-ce important que j'ai construit la table dans SQLite Maestro et que j'exécute également l'instruction DELETE
dans SQLite Maestro?
Toute aide est la bienvenue.
Essaye ça:
delete from your_table;
delete from sqlite_sequence where name='your_table';
SQLite garde la trace du plus grand ROWID qu'une table ait jamais eu en utilisant le spécial
SQLITE_SEQUENCE
table . LeSQLITE_SEQUENCE
table est créée et initialisée automatiquement chaque fois qu'une table normale contenant une colonne AUTOINCREMENT est créée. Le contenu de la table SQLITE_SEQUENCE peut être modifié à l'aide des instructions ordinaires UPDATE, INSERT et DELETE. Mais apporter des modifications à cette table perturbera probablement l'algorithme de génération de clé AUTOINCREMENT. Assurez-vous de savoir ce que vous faites avant d'entreprendre de tels changements.
Vous pouvez réinitialiser par séquence de mise à jour après les lignes supprimées dans votre table
UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name';
Si vous souhaitez réinitialiser tous les RowId via le fournisseur de contenu, essayez ceci:
rowCounter=1;
do {
rowId = cursor.getInt(0);
ContentValues values;
values = new ContentValues();
values.put(Table_Health.COLUMN_ID,
rowCounter);
updateData2DB(context, values, rowId);
rowCounter++;
while (cursor.moveToNext());
public static void updateData2DB(Context context, ContentValues values, int rowId) {
Uri uri;
uri = Uri.parseContentProvider.CONTENT_URI_HEALTH + "/" + rowId);
context.getContentResolver().update(uri, values, null, null);
}
Si vous avez le navigateur de base de données SQLite et que vous êtes plus enclin à utiliser une solution graphique, vous pouvez modifier la table sqlite_sequence où nom de champ est le nom de votre table. Double-cliquez sur la cellule du champ seq et changez la valeur en 0 dans la boîte de dialogue qui s’affiche.