2009-10-21 14 views
87

Tengo algunas tablas en SQLite y estoy tratando de encontrar la forma de restablecer el campo de base de datos autoincrementado.Restablecimiento de SQLite Campo de clave principal

He leído que DELETE FROM tablename debería eliminar todo y restablecer el campo de incremento automático de nuevo a 0, pero cuando lo hago, simplemente elimina los datos. Cuando se inserta un nuevo registro, la autoincrementación comienza donde lo dejó antes de la eliminación.

Mis ident propiedades de campo son las siguientes:

  • Tipo de campo: integer
  • Banderas de campo: PRIMARY KEY, AUTOINCREMENT, UNIQUE

qué importa I construyó la tabla en SQLite Maestro y estoy ejecutando el stateme DELETE nt en SQLite Maestro también?

Cualquier ayuda sería genial.

Respuesta

177

Prueba esto:

delete from your_table;  
delete from sqlite_sequence where name='your_table'; 

SQLite Autoincrement

SQLite no pierde de vista el mayor ROWID que una tabla se ha mantenido siempre usando el especial SQLITE_SEQUENCE mesa. Se crea la tabla SQLITE_SEQUENCE y se inicializa automáticamente cuando se crea una tabla normal que contiene una columna AUTOINCREMENT. El contenido de de la tabla SQLITE_SEQUENCE se puede modificar utilizando las instrucciones UPDATE, INSERT y DELETE ordinarias. Pero haciendo modificaciones a esta tabla probablemente perturbe el algoritmo de generación de clave AUTOINCREMENT . Asegúrese de que sepa lo que está haciendo antes de que realice dichos cambios.

+3

Gracias que funcionaba perfectamente. – Nathan

+3

Solo una pequeña nota al margen: El nombre de la tabla en donde la cláusula distingue mayúsculas de minúsculas – 321X

+0

@ 321X, ese es un muy buen punto. Gracias. –

0

Como una opción alternativa, si tiene el navegador de la base de datos Sqlite y está más inclinado a una solución GUI, puede editar la tabla sqlite_sequence donde nombre de campo es el nombre de su tabla. Haga doble clic en la celda para el campo seq y cambie el valor a 0 en el cuadro de diálogo que aparece.

0

Si desea restablecer cada RowId a través de proveedor de contenido de prueba este

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); 
} 
23

puede restablecer por la secuencia de actualización de filas después de eliminados en su mesa

UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name'; 
Cuestiones relacionadas