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. Définir la propriétéRELY
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;
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 détermine 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.