Incremento de la base de datos de la base de datos de Android SQLite mientras que la inserción

StackOverflow https://stackoverflow.com//questions/9663061

  •  12-12-2019
  •  | 
  •  

Pregunta

Tengo una tabla en mi base de datos con un campo declarado como

_id integer primary key

no hay autoincremento.

Aquí tengo dudas sobre cómo se actualizará Rowid durante el inserto después de un borrado.Lo que observé es

  1. Si la última ID de la fila es X y se elimina, la siguiente fila insertada obtiene ID x.

    Pero si borro algunas otras filas con ID

    Confirmar por favor es mi derecho de observación (Rowid se reutiliza solo si las últimas filas se eliminan y no están entre filas).

    Vi la explicación de autoincremento.Quiero saber el comportamiento cuando no se establece autoincremento

¿Fue útil?

Solución

No se requiere la palabra clave AutoIncrement para las tablas SQLite para generar valores de clave primarios automáticamente. Lo que agregue a la base de datos se agregará como la última fila ... así que si eliminas la última fila (x) .. Se agregará nuevo elemento en la posición x .. Si se borra del medio o no .. Nuevo elemento en ..La adición irá a la posición X + 1 ...

En el uso de incremento automático. Si elimina el último elemento en la posición X, la siguiente ID x + 1 será generada por algoritmo de autoincrement .. Makin la siguiente adición en la posición X + 1.

Otros consejos

Sin un conjunto de autoindiciones automáticos, la fila sería un alias para el ROWID ...

Esto es lo que dice las preguntas frecuentes:

Si no se especifica RADID en el inserto, o si el ROADID especificado tiene un valor de NULL, entonces se crea un RADID apropiado automáticamente. El algoritmo habitual es dar una fila recién creada un RowID que sea más grande que el RowID más grande de la tabla antes del inserto. Si la tabla está inicialmente vacía, se usa un rowid de 1. Si el RADID más grande es igual al INTEGER POSIBLE POSIBLE (9223720368547775807), el motor de la base de datos comienza a seleccionar Rowids de candidatos positivos al azar hasta que encuentre uno que no se usa previamente. Si no se puede encontrar RADID no utilizado después de un número razonable de intentos, la operación de inserción falla con un error SQLite_Full. Si no se insertan explícitamente que no se insertan valores de RowID negativo, los valores generados automáticamente serán siempre mayores que cero.

El algoritmo de selección de rowid normal descrito anteriormente generará un cruce único monótonico que aumenta los risas únicos, siempre y cuando nunca use el valor máximo de RowID y nunca elimine la entrada en la tabla con el RowID más grande. Si alguna vez elimina las filas o si alguna vez crea una fila con el máximo máximo de RADID posible, entonces se pueden reutilizar a RowID de las filas previamente eliminadas cuando se crean nuevas filas y los RowIDs recién creados pueden no estar en orden estrictamente ascendente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top