Je peux trouver des «graphiques» de syntaxe à ce sujet sur le site Web de SQLite, mais aucun exemple et mon code plante. J'ai d'autres tables avec des contraintes uniques sur une seule colonne, mais je souhaite ajouter une contrainte à la table sur deux colonnes. C'est ce que j'ai qui provoque une exception SQLiteException avec le message "erreur de syntaxe".
CREATE TABLE name (column defs)
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE
Je fais cela en fonction de ce qui suit:
Pour être clair, la documentation sur le lien que j'ai fourni indique que cela CONTSTRAINT name
devrait précéder ma définition de contrainte.
Quelque chose qui peut conduire à la solution est que tout ce qui suit mes définitions de colonnes entre parenthèses est ce dont le débogueur se plaint.
Si je mets
...last_column_name last_col_datatype) CONSTRAINT ...
l'erreur est proche de "CONSTRAINT": erreur de syntaxe
Si je mets
...last_column_name last_col_datatype) UNIQUE ...
l'erreur est proche de "UNIQUE": erreur de syntaxe
Réponses:
Placez la déclaration UNIQUE dans la section de définition de colonne; exemple de travail:
la source
ON CONFLICT IGNORE
n'ai pas encore essayé de remplacer) avec plus de 2 colonnes, mais je ne le vois pas honorer la contrainte unique, il ajoute juste joyeusement les doublons.ON CONFLICT REPLACE
peut ne pas être ce que vous voulez - il supprime les lignes préexistantes pour permettre à la nouvelle ligne d'être insérée. Normalement, je voudrais ABORT ou ROLLBACK la violation de contrainte. Clause SQLite ON CONFLICTEh bien, votre syntaxe ne correspond pas au lien que vous avez inclus, qui spécifie:
la source
Faites attention à la façon dont vous définissez la table car vous obtiendrez des résultats différents lors de l'insertion. Considérer ce qui suit
Bien que l'effet d'insertion / mise à jour soit le même, les
id
changements basés sur le type de définition de table (voir le deuxième tableau où `` Alice '' a maintenantid = 4
; la première table fait plus de ce que j'attends d'elle, gardez la clé primaire la même ). Soyez conscient de cet effet.la source
Si vous avez déjà une table et que vous ne pouvez / ne voulez pas la recréer pour une raison quelconque, utilisez des index :
la source