Propriétés des contraintes

Les propriétés de contrainte sont spécifiées dans la clause CONSTRAINT pour une commande CREATE TABLE ou ALTER TABLE.

Dans ce chapitre :

Propriétés des contraintes ANSI SQL

Propriétés pour toutes les contraintes

Les propriétés de contrainte suivantes de la norme ANSI SQL s’appliquent à toutes les contraintes (unique, clé primaire et clé étrangère) :

ENFORCED | NOT ENFORCED

Spécifie si la contrainte est appliquée dans une transaction. Notez que NOT NULL est la seule contrainte imposée par Snowflake. Voir Contraintes d’intégrité référentielle.

DEFERRABLE | NOT DEFERRABLE

Spécifie si, dans les transactions suivantes, le contrôle de contrainte peut être différé jusqu’à la fin de la transaction.

INITIALLY { DEFERRED | IMMEDIATE }

Pour les contraintes DEFERRABLE, spécifie si la vérification des contraintes est différée à partir de la transaction suivante.

Les propriétés par défaut des propriétés de contrainte standard sont les suivantes :

NOT ENFORCED DEFERRABLE INITIALLY DEFERRED

Propriétés pour les contraintes de clé étrangère uniquement

Les propriétés de contrainte suivantes proviennent également de la norme ANSI SQL, mais ne s’appliquent qu’aux clés étrangères :

MATCH { FULL | PARTIAL | SIMPLE }

Spécifie si la contrainte de clé étrangère est satisfaite en ce qui concerne les valeurs NULL dans une ou plusieurs colonnes.

UPDATE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION }

Spécifie l’action effectuée lorsque la clé primaire / unique d’une clé étrangère est mise à jour ou supprimée.

DELETE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION }

Spécifie l’action effectuée lorsque la clé primaire / unique de la clé étrangère est supprimée.

Les valeurs par défaut des propriétés de contrainte de clé étrangère sont les suivantes :

MATCH FULL UPDATE NO ACTION DELETE NO ACTION

Propriétés de contrainte étendue

Les propriétés suivantes ne font pas partie de la norme ANSI SQL, mais sont prises en charge pour la compatibilité avec d’autres bases de données. Elles s’appliquent à toutes les contraintes (unique, clé primaire et clé étrangère) :

ENABLE | DISABLE

Spécifie si la contrainte est activée ou désactivée. Ces propriétés sont fournies pour la compatibilité avec Oracle.

Par défaut, cette propriété de contrainte est définie sur DISABLE.

VALIDATE | NOVALIDATE

Indique si les données existantes de la table doivent être validées lors de la création d’une contrainte. Utilisé uniquement avec la propriété ENABLE | DISABLE.

Par défaut, cette propriété de contrainte est définie sur NOVALIDATE.

RELY | NORELY

Indique si une contrainte en mode NOVALIDATE est prise en compte lors de la réécriture de la requête.

Par défaut, cette propriété de contrainte est définie sur NORELY.

Si vous avez vérifié que les données de la table sont conformes aux contraintes, vous pouvez remplacer cette valeur par RELY pour indiquer que l’optimiseur de requêtes doit s’attendre à ce que les données de la table respectent les contraintes. Ce paramètre peut améliorer la performance des requêtes (par exemple en éliminant les jointures inutiles).

Pour les contraintes de clé primaire et de clé étrangère, définissez cette propriété à la fois sur la contrainte de clé primaire et sur la contrainte de clé étrangère. Par exemple :

ALTER TABLE table_with_primary_key ALTER CONSTRAINT a_primary_key_constraint RELY;
ALTER TABLE table_with_foreign_key ALTER CONSTRAINT a_foreign_key_constraint RELY;
Copy

Valeurs autres que celles par défaut pour les propriétés de contraintes ENABLE et VALIDATE.

Pour la compatibilité syntaxique avec d’autres bases de données, Snowflake prend en charge la spécification de valeurs autres que celles par défaut pour les propriétés des contraintes.

Cependant, si vous spécifiez ENABLE ou VALIDATE (les valeurs autres que celles par défaut de ces propriétés) lors de la création d’une nouvelle contrainte, la contrainte n’est pas créée. Ceci ne s’applique pas à RELY. La spécification de RELY entraîne la création de la nouvelle contrainte.

Notez que Snowflake fournit un paramètre de session, UNSUPPORTED_DDL_ACTION, qui spécifie si la spécification de valeurs autres que les valeurs par défaut lors de la création d’une contrainte génère une erreur.