59 votes

Définir la valeur de départ pour AUTOINCREMENT dans SQLite

Comment définir la valeur initiale d'un champ AUTOINCREMENT dans SQLite?

102voto

Christian Davén Points 4527

À partir de l'SQLite site web:

SQLite garde une trace de la plus grande ROWID qu'une table a jamais tenu à l'aide de la SQLITE_SEQUENCE table. L' SQLITE_SEQUENCE tableau est créé et initialisé automatiquement chaque fois qu'une normale table qui contient une colonne d'auto-incrémentation est créé. Le contenu de l' SQLITE_SEQUENCE tableau peut être modifié à l'aide d'ordinaire UPDATE, INSERT et DELETE. Mais d'apporter des modifications à cette table sera susceptible de perturber l'auto-incrémentation clé de l'algorithme de génération. Assurez-vous que vous savez ce que vous faites avant de vous lancer dans de telles modifications.

J'ai essayé, et ça fonctionne:

UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = '<table>'

n+1 est le suivant ROWID que vous voulez et de la table est le nom de la table.

Cela pourrait-il être dangereux pour l'intégrité de ma base de données?

27voto

dave mankoff Points 3837

Insérez explicitement la valeur-1 dans la table, puis supprimez la ligne.

8voto

jle Points 4746

Une façon de le faire est d'insérer la première ligne en spécifiant explicitement l'id de la ligne par laquelle vous voulez commencer . SQLite insérera ensuite les identifiants de ligne les plus élevés.

5voto

Raivo Laanemets Points 380

En solution avec la table SQLITE_SEQUENCE, l'entrée dans cette table semble être ajoutée après la première insertion dans la table avec la colonne auto-incrémentée. Dans certains cas, cela peut causer des problèmes (c'est-à-dire que l'auto-incrémentation commence toujours à partir de 1 et non à partir de la valeur souhaitée).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X