SQLite Réinitialiser Le Champ De Clé Primaire
J'ai quelques tables dans SQLite et j'essaie de comprendre comment réinitialiser le champ de base de données auto-incrémenté.
J'ai lu que DELETE FROM tablename
devrait tout supprimer et réinitialiser le champ d'incrémentation automatique à 0
, mais quand je fais cela, il supprime simplement les données. Lorsqu'un nouvel enregistrement est inséré, l'auto-incrémentation reprend là où elle s'était arrêtée avant la suppression.
Mes propriétés de Champ ident
sont les suivantes:
-
Type De Champ:
integer
-
champ Drapeaux:
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 serait géniale.
4 réponses
, Essayez ceci:
delete from your_table;
delete from sqlite_sequence where name='your_table';
SQLite garde la trace des plus grands ROWID qu'une table a déjà tenu en utilisant le spécial
SQLITE_SEQUENCE
Tableau. LeSQLITE_SEQUENCE
la table est créée et initialisé automatiquement chaque fois qu'un table normale qui contient un La colonne AUTOINCREMENT est créée. Le contenu de la table SQLITE_SEQUENCE peut être modifié en utilisant la mise à jour ordinaire, Insérer et supprimer des instructions. Mais apporter des modifications à ce tableau va probablement perturber L'AUTOINCREMENT algorithme de génération de clés. Assurer tu sais ce que tu fais devant toi 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';
Comme option alternative, si vous avez le navigateur de base de données Sqlite et que vous êtes plus enclin à une solution GUI, vous pouvez modifier la table sqlite_sequence où field name est le nom de votre table. Double-cliquez sur la cellule du champ seq et modifiez la valeur à 0 dans la boîte de dialogue qui apparaît.
Si vous voulez réinitialiser chaque 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);
}