2009-08-23 5 views
1

J'ai une base de données où je dois éviter d'insérer des doublons. Les exigences sont les suivantes:sql contraintes uniques et de réglage sur les insertions

Pour le sous-ensemble de lignes avec la colonne correspondant à 1, il ne peut y avoir qui ont la même colonne 2.

Pour le sous-ensemble de lignes avec la colonne correspondant à 1, il ne peut y avoir que J'ai la même colonne 3 et 4.

Je suis nouveau à SQL donc est-il un moyen de définir ces relations lorsque je crée la base de données (créer une table) ou dois-je faire un select et faire ces vérifications manuellement avant insérer dans la table?

Répondre

4

En effet, vous avez besoin que les colonnes 1 et 2 soient uniques et que les colonnes 1, 3 et 4 soient uniques. Ainsi, lorsque vous créez la table, vous pouvez utiliser deux constantes UNIQUES:

CREATE TABLE tbl (
    col1 varchar(255), 
    col2 varchar(255), 
    col3 varchar(255), 
    col4 varchar(255), 
    CONSTRAINT uc_first UNIQUE(col1, col2), 
    CONSTRAINT uc_second UNIQUE(col1, col3, col4) 
) 
+0

Merci. Une chose, est-il possible de savoir quelle contrainte est déclenchée dans sqlite? Google montre que certaines personnes se plaignent de devoir faire des comparaisons de chaînes (.IsSameAs ("SQLITE_CONSTRAINT [19]: les colonnes 1, 3, 4, ne sont pas uniques")). Semblez klunky. – max

0

juste pour obtenir le roulement à billes ...

Pourriez-vous revenir immédiatement après l'insert et supprimer des lignes dupliquées sur la base des contraintes dont vous avez parlé?

+0

Ugh ... pour être poli à ce sujet. Oui, vous pouvez; mais non, il serait horriblement inefficace de le faire. –

+0

Assez juste. J'ai appris de la réponse de Todd Owen que CONSTRAINT est nécessaire quand la table est créée. Je suppose que cela peut être changé après la création. Retour au manuel ... – pavium

Questions connexes