¿Cómo puedo establecer el valor de inicio para un campo AUTOINCREMENT en SQLite?Establecer el valor de inicio para AUTOINCREMENT en SQLite
Respuesta
Inserte explícitamente el value-1
en la tabla, luego elimine la fila.
Editar: el siguiente comentario abajo, que discute la edición de la tabla SQLITE_SEQUENCE
directa es probablemente preferible: https://stackoverflow.com/a/692871/10093
Una forma de hacerlo es insertar la primera fila especificar explícitamente el identificador de fila que desea comenzar con . SQLite luego insertará identificadores de fila que son más altos que el anterior más alto.
Desde el SQLite web site:
SQLite no pierde de vista el ROWID más grande que una tabla se ha mantenido siempre el uso de la mesa especial
SQLITE_SEQUENCE
. La tablaSQLITE_SEQUENCE
se crea e inicializa automáticamente cada vez que se crea una tabla normal que contiene una columna AUTOINCREMENT. El contenido de la tablaSQLITE_SEQUENCE
se puede modificar mediante las instrucciones ordinarias UPDATE, INSERT y DELETE. Pero hacer modificaciones en esta tabla probablemente perturbe el algoritmo de generación de clave AUTOINCREMENT. Asegúrese de saber lo que está haciendo antes de emprender tales cambios.
yo probamos este, y funciona:
UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = '<table>'
Donde n 1 es la siguiente ROWID que desee y tabla es el nombre de la tabla.
No estoy seguro, ya que no estoy seguro de cómo funciona sqlite internals. Vale la pena señalar que jle y mis sugerencias anteriores son cómo la biblioteca MDB2 de PHP apoya la modificación de la identificación. Eche un vistazo a su fuente de controlador sqlite: http://cvs.php.net/viewvc.cgi/pear/MDB2/MDB2/Driver/sqlite.php?view=markup –
La integridad no es el problema (creo que no un experto o cualquier cosa).El problema que creo que advierten es si elimina una fila con una ID inferior a MAX (ID) y trata de configurar manualmente el incremento automático de esta manera. Se quedará atrapado después de la primera fila insertada debido a una violación de clave principal. – Assimilater
El algoritmo exacto está documentado en la página vinculada y no se modificará en ninguna versión 3.x para preservar la compatibilidad. –
En solución con la tabla SQLITE_SEQUENCE, la entrada en esta tabla parece agregarse después de que se agrega la primera inserción en la tabla con la columna de autoincremento. En algunos casos, esto puede causar problemas (es decir, la autoincrementación aún comienza desde 1, no desde el valor deseado).
Estoy utilizando la siguiente consulta que resuelve el problema cuando sqlite_sequence no tiene un registro para la tabla (es decir, el primer registro no se ha agregado aún a la tabla), de lo contrario, actualiza la secuencia.
BEGIN TRANSACTION;
UPDATE sqlite_sequence SET seq = <n> WHERE name = '<table>';
INSERT INTO sqlite_sequence (name,seq) SELECT '<table>', <n> WHERE NOT EXISTS
(SELECT changes() AS change FROM sqlite_sequence WHERE change <> 0);
COMMIT;
Esta es la única solución completamente correcta aquí. Sin embargo, los cambios en el vudú hacen que mis ojos se llenen de lágrimas;) – w00t
Ahora he usado esto como mi solución:
REPLACE INTO sqlite_sequence (name, seq) VALUES ('<table>', <n>)
Este trabajo para mí. Gracias por la respuesta anterior.
- 1. Restablecimiento Autoincrement en Android SQLite
- 2. Autoincrement SQLite - ¿Cómo insertar valores?
- 3. SQLite: autoincrement preguntas claves primarias
- 4. ¿Cómo devolver el valor de autoincrement en Insertar consulta en SQLite?
- 5. Configuración SQLAlchemy AutoIncrement valor inicial
- 6. ¿Puedo establecer el valor de inicio enum en Java?
- 7. Tratar con asignación de columna SQLite Autoincrement en LinqToSql
- 8. Autoincrement uniqueidentifier
- 9. estableciendo un valor predeterminado para una columna en SQLite
- 10. sqlite insertar nuevo valor en la vista
- 11. Establecer punto de inicio para CGAffineTransform
- 12. ¿Cómo agregar el valor predeterminado en SQLite?
- 13. SQLite insertando el valor bool
- 14. cómo establecer una columna como indexador único en SQLite
- 15. seleccionar el valor distinto en sqlite androide
- 16. ¿Cómo puedo restablecer un número de secuencia de autoincrement en sqlite
- 17. Establecer valor para llvm :: ConstantInt
- 18. ¿Cómo puedo establecer el formato de autoincrement en 0001 en MySQL?
- 19. Almacenar valor booleano en SQLite
- 20. Android - Establecer punto de inicio de Spinner
- 21. ¿Cómo establecer el valor predeterminado para sysdate en MySql?
- 22. ¿Cómo establecer el valor alfa para dibujable en un StateListDrawable?
- 23. ¿Cómo establecer el valor predeterminado para POCO en EF CF?
- 24. ¿Cómo establecer valores predeterminados para .mode y .headers para controlar el formato de salida en SQLite?
- 25. Error en near 'Autoincrement'
- 26. Cómo establecer algunas variables personalizadas en el inicio de Matlab
- 27. ¿Establecer el valor predeterminado en un DataContract?
- 28. Cómo establecer el valor div
- 29. Campos de AutoIncrement en bases de datos sin campo de autoincrement
- 30. SQLite: ¿cómo obtener el valor promedio?
Supongo que esta es la mejor manera de hacerlo, pero no es bonita. –
Esto no funciona para mí. Si tengo una tabla "Usuarios" con solo 1 entrada (ID 1), mientras que el incremento automático está en 3, entonces se inserta otro usuario con ID -1 luego se elimina, el siguiente usuario insertado sigue siendo id 4 (Extensión del administrador SQLite para firefox , si hace una diferencia) – Assimilater
parece una solución. prefiero abordar el registro de la tabla sqlite_sequence para la tabla en cuestión. –