Comment puis-je définir la valeur de départ d'un champ AUTOINCREMENT dans SQLite?
Insérez explicitement le value-1
dans le tableau, puis supprimez la ligne.
Modifier: le prochain commentaire vers le bas, qui traite de la modification du SQLITE_SEQUENCE
la table directement est probablement préférable: https://stackoverflow.com/a/692871/1009
Depuis le site Web SQLite :
SQLite conserve la trace du plus grand ROWID qu'une table ait jamais détenu à l'aide de la table spéciale
SQLITE_SEQUENCE
. La tableSQLITE_SEQUENCE
Est créée et initialisée automatiquement chaque fois qu'une table normale contenant une colonne AUTOINCREMENT est créée. Le contenu de la tableSQLITE_SEQUENCE
Peut être modifié à l'aide des instructions UPDATE, INSERT et DELETE ordinaires. Mais apporter des modifications à ce tableau perturbera probablement l'algorithme de génération de clé AUTOINCREMENT. Assurez-vous de savoir ce que vous faites avant d'entreprendre de tels changements.
J'ai essayé ça, et ça marche:
UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = '<table>'
Où n + 1 est le prochain ROWID que vous souhaitez et table est le nom de la table.
J'utilise la requête ci-dessous qui résout le problème lorsque sqlite_sequence n'a pas d'enregistrement pour la table (c'est-à-dire que le premier enregistrement n'a pas encore été ajouté à la table), sinon il met à jour la séquence.
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;
Une façon de le faire est d'insérer la première ligne en spécifiant explicitement l'ID de ligne avec lequel vous voulez commencer. SQLite insérera alors des identifiants de ligne supérieurs au précédent le plus élevé.
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 d'auto-incrémentation. Dans certains cas, cela peut provoquer des problèmes (c'est-à-dire que l'auto-incrémentation démarre toujours à partir de 1, pas à partir de la valeur souhaitée).
Je voulais juste ajouter quelques notes à la réponse très appréciée d'iTech: