175 votes

Existe-t-il un AUTO INCREMENT dans SQLite ?

J'essaie de créer une table avec une fonction d'auto-incrémentation. primary key en Sqlite3 . Je ne sais pas si c'est vraiment possible, mais j'espère n'avoir à désigner que les autres champs.

Par exemple :

CREATE TABLE people (id integer primary key auto increment, first_name varchar(20), last_name varchar(20));

Ensuite, lorsque j'ajoute une valeur, j'espérais n'avoir qu'à faire :

INSERT INTO people
VALUES ("John", "Smith");

Est-ce possible ?

Je cours sqlite3 sous cygwin dans Windows 7.

233voto

Larry Lustig Points 28706

Vous en obtenez un gratuitement, appelé ROWID. Il est présent dans toutes les tables SQLite, que vous le demandiez ou non.

Si vous incluez une colonne de type INTEGER PRIMARY KEY, cette colonne pointe vers (est un alias de) la colonne ROWID automatique.

ROWID (quel que soit le nom que vous lui donnez) se voit attribuer une valeur chaque fois que vous insérez une ligne, comme vous vous y attendez. Si vous attribuez explicitement une valeur non-NULL lors de l'INSERT, il recevra la valeur spécifiée au lieu de l'auto-incrémentation. Si vous attribuez explicitement une valeur NULL lors de l'INSERT, il obtiendra la prochaine valeur d'auto-incrémentation.

En outre, vous devriez essayer d'éviter :

 INSERT INTO people VALUES ("John", "Smith");

et utiliser

 INSERT INTO people (first_name, last_name) VALUES ("John", "Smith");

au lieu de cela. La première version est très fragile : si vous ajoutez, déplacez ou supprimez des colonnes dans la définition de votre table, l'insertion échouera ou produira des données incorrectes (avec les valeurs des mauvaises colonnes).

119voto

Matt Hulse Points 1350

Oui, c'est possible. D'après le FAQ SQLite :

Une colonne déclarée INTEGER PRIMARY KEY sera autoincrémentée.

58voto

A ce jour - juin 2018


Voici ce que la documentation officielle de SQLite s'exprime sur le sujet (les caractères gras et italiques sont de moi) :

  1. En AUTOINCREMENT Le mot-clé impose des coûts supplémentaires en termes de CPU, de mémoire, d'espace disque et d'espace de stockage. de l'espace disque et des E/S du disque et doit être évitée si elle n'est pas strictement nécessaire. Il n'est généralement pas nécessaire.

  2. En SQLite, une colonne de type INTEGER PRIMARY KEY est un alias de la fonction ROWID (sauf dans les tables WITHOUT ROWID) qui est al 64 bits.

  3. Sur un INSERT, si la colonne ROWID ou INTEGER PRIMARY KEY n'est pas explicitement une valeur, elle sera remplie automatiquement avec une valeur de nombre entier non utilisé, généralement un de plus que le plus grand ROWID actuellement en utiliser. Ceci est vrai indépendamment du fait que l'AUTOINCREMENT n'est pas utilisé.

  4. Si le AUTOINCREMENT le mot-clé apparaît après INTEGER PRIMARY KEY , modifie l'algorithme d'attribution automatique du ROWID en empêcher la réutilisation de ROWIDs pendant la durée de vie de la base de données. I AUTOINCREMENT a pour but d'empêcher la réutilisation des ROWIDs de des lignes précédemment supprimées.

17voto

mkumar0304 Points 467

SQLite AUTOINCREMENT est un mot-clé utilisé pour incrémenter automatiquement la valeur d'un champ dans la table. Nous pouvons incrémenter automatiquement la valeur d'un 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. La syntaxe est la suivante

L'utilisation de base du mot-clé AUTOINCREMENT est la suivante :

CREATE TABLE table_name(
   column1 INTEGER AUTOINCREMENT,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
);

Voir l'exemple ci-dessous : Considérons la table de l'ENTREPRISE à créer comme suit :

sqlite> CREATE TABLE TB_COMPANY_INFO(
   ID INTEGER PRIMARY KEY   AUTOINCREMENT,
   NAME           TEXT      NOT NULL,
   AGE            INT       NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Insérez maintenant les enregistrements suivants dans la table TB_COMPANY_INFO :

INSERT INTO TB_COMPANY_INFO (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'MANOJ KUMAR', 40, 'Meerut,UP,INDIA', 200000.00 );

Sélectionnez maintenant l'enregistrement

SELECT *FROM TB_COMPANY_INFO
ID      NAME            AGE     ADDRESS             SALARY
1       Manoj Kumar     40      Meerut,UP,INDIA     200000.00

13voto

Uku Loskit Points 15705

Avez-vous lu ceci ? Comment créer un champ AUTOINCREMENT.

INSERT INTO people
VALUES (NULL, "John", "Smith");

Insérez toujours NULL comme identifiant.

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