Vous en obtenez un gratuitement, appelé ROWID. C'est dans chaque table SQLite que vous le demandiez ou non.
Si vous incluez une colonne de type INTEGER PRIMARY KEY, cette colonne pointe vers (est un alias pour) la colonne ROWID automatique.
ROWID (quel que soit le nom que vous appelez) se voit attribuer une valeur chaque fois que vous INSÉRER une ligne, comme vous vous en doutez. Si vous affectez explicitement une valeur non NULL sur INSERT, il obtiendra cette valeur spécifiée au lieu de l'incrémentation automatique. Si vous attribuez explicitement une valeur NULL sur INSERT, il obtiendra la prochaine valeur d'incrémentation automatique.
Aussi, vous devriez essayer d'éviter:
INSERT INTO people VALUES ("John", "Smith");
et utilise
INSERT INTO people (first_name, last_name) VALUES ("John", "Smith");
au lieu. La première version est très fragile - si jamais vous ajoutez, déplacez ou supprimez des colonnes dans votre définition de table, INSERT échouera ou produira des données incorrectes (avec les valeurs dans les mauvaises colonnes).
select rowid from people;
Oui, c'est possible. Selon la FAQ SQLite :
la source
À partir d'aujourd'hui - juin 2018
Voici ce que la documentation officielle de SQLite a à dire sur le sujet (gras et italique sont à moi):
la source
Avez-vous lu ceci? Comment créer un champ AUTOINCREMENT.
la source
Il ne faut pas spécifier de
AUTOINCREMENT
mot clé à proximitéPRIMARY KEY
. Exemple de création d'une clé primaire auto-incrémentée et d'insertion:va donner:
la source
En plus de rowid, vous pouvez définir votre propre champ d'incrémentation automatique, mais ce n'est pas recommandé. C'est toujours une meilleure solution lorsque nous utilisons rowid qui est automatiquement augmenté.
Lisez ici pour des informations détaillées.
la source
SQLite AUTOINCREMENT est un mot clé utilisé pour l'incrémentation automatique d'une valeur d'un champ dans la table. Nous pouvons incrémenter automatiquement une valeur de champ en utilisant le mot-clé AUTOINCREMENT lors de la création d'une table avec un nom de colonne spécifique pour l'incrémenter automatiquement.
Le mot clé AUTOINCREMENT ne peut être utilisé qu'avec le champ INTEGER. Syntaxe:
L'utilisation de base du mot clé AUTOINCREMENT est la suivante:
Par exemple, voir ci-dessous: Considérez que la table COMPANY doit être créée comme suit:
Maintenant, insérez les enregistrements suivants dans la table TB_COMPANY_INFO:
Maintenant, sélectionnez l'enregistrement
la source
Je sais que cette réponse est un peu tardive.
Mon but pour cette réponse est que tout le monde puisse s'y référer s'ils rencontrent ce type de défi avec SQLite maintenant ou dans le futur et qu'ils ont du mal avec cela.
Maintenant, en repensant à votre requête, cela devrait être quelque chose comme ça.
Cela fonctionne de mon côté. Ainsi,
Juste au cas où vous travaillez avec SQLite, je vous suggère de consulter DB Browser pour SQLite . Fonctionne également sur différentes plates-formes.
la source
Ce que vous faites est correct, mais la syntaxe correcte pour 'auto incrémentation' doit être sans espace:
(Veuillez également noter que j'ai changé vos varchars en chaînes. C'est parce que SQLite transforme en interne un varchar en chaîne, alors pourquoi s'embêter?)
alors votre insert doit être, en langage SQL aussi standard que possible:
s'il est vrai que si vous omettez id, il sera automatiquement incrémenté et attribué, je préfère personnellement ne pas me fier à des mécanismes automatiques qui pourraient changer à l'avenir.
Une note sur l'auto-incrémentation: bien que, comme beaucoup l'ont souligné, cela ne soit pas recommandé par les utilisateurs de SQLite, je n'aime pas la réutilisation automatique des identifiants des enregistrements supprimés si l'auto-incrémentation n'est pas utilisée. En d'autres termes, j'aime que l'identifiant d'un enregistrement supprimé n'apparaisse plus jamais.
HTH
la source