SQLite
 sql >> Base de données >  >> RDS >> SQLite

La clé SQLite PRIMARY AutoIncrement ne fonctionne pas

À partir de la documentation :

Une table créée à l'aide de CREATE TABLE AS n'a pas de PRIMARY KEY et aucune contrainte d'aucune sorte. La valeur par défaut de chaque colonne est NULL.

Vous n'êtes pas obligé d'ajouter UNIQUE contrainte sur une COLONNE qui a PRIMARY KEY contrainte.
Explication :

Une contrainte UNIQUE est similaire à une contrainte PRIMARY KEY, sauf qu'une seule table peut avoir n'importe quel nombre de contraintes UNIQUE.

Ajoutez plutôt NOT NULL .C'est pourquoi :

Selon le standard SQL, PRIMARY KEY doit toujours impliquer NOTNULL. Malheureusement, en raison d'un bogue dans certaines premières versions, ce n'est pas le cas dans SQLite. Sauf si la colonne est une INTEGER PRIMARY KEY ou si la table est une table SANS ROWID ou si la colonne est déclarée NOT NULL, SQLite autorise les valeurs NULL dans une colonne PRIMARY KEY. SQLite pourrait être corrigé pour se conformer à la norme, mais cela pourrait casser les applications héritées. Par conséquent, il a été décidé de simplement documenter le fait que SQLite autorise les valeurs NULL dans la plupart des colonnes PRIMARY KEY.


Je recommande d'utiliser cette définition de colonne :

CREATE TABLE conversations (
    conversation_id INTEGER PRIMARY KEY NOT NULL AUTOINCREMENT,
...
}