Les contraintes CHECK imposent des conditions sur les valeurs des colonnes. Seules les lignes respectant toutes les contraintes actives peuvent être insérées ou mises à jour.
Versions prises en charge
Version du moteur de base de données : MySQL 8.0
Version minimale de l'instance :
polardb-2.5.0_5.4.20-20241224_xcluster8.4.20-20241213
Pour plus de détails sur les versions, consultez les Notes de version. Pour vérifier votre version actuelle, reportez-vous à la rubrique Consulter et mettre à jour la version d'une instance.
Syntaxe
[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
Les éléments entre crochets ([]) sont facultatifs. Cette syntaxe correspond à celle des contraintes CHECK de MySQL. Pour plus d'informations, voir CHECK Constraints.
| Paramètre | Description |
|---|---|
CONSTRAINT [symbol] |
Nom de la contrainte. En cas d'omission, le système génère un nom au format TableName_chk_N, par exemple t1_chk_1. |
CHECK (expr) |
Condition de la contrainte. expr est une expression booléenne qui retourne TRUE, FALSE ou UNKNOWN pour chaque ligne. La valeur UNKNOWN indique que la colonne contient NULL. Si expr retourne FALSE ou UNKNOWN, la ligne enfreint la contrainte ; l'insertion ou la mise à jour est alors rejetée. |
[NOT] ENFORCED |
Détermine si la contrainte est active : |
- Omis ou défini à ENFORCED : la contrainte est créée et appliquée. Le système vérifie toutes les données insérées et mises à jour. Les lignes existantes ne sont pas contrôlées, sauf lors d'une mise à jour. |
|
- Défini à NOT ENFORCED : la contrainte est créée mais n'est pas vérifiée lors des insertions ou des mises à jour. |
Ajouter des contraintes CHECK
PolarDB-X prend en charge deux types de contraintes CHECK :
Contrainte de table : définie en dehors de la définition d'une colonne ; elle peut référencer une ou plusieurs colonnes.
Contrainte de colonne : définie directement dans la définition d'une colonne ; elle s'applique uniquement à cette colonne.
Ajouter des contraintes avec CREATE TABLE
CREATE TABLE t1
(
CHECK (c1 <> c2), -- Table constraint
c1 INT CHECK (c1 > 10), -- Column constraint
c2 INT CONSTRAINT c2_positive CHECK (c2 > 0),
c3 INT CHECK (c3 < 100),
CONSTRAINT c1_nonzero CHECK (c1 <> 0),
CHECK (c1 > c3)
);
Ajouter des contraintes avec ALTER TABLE
-- Column constraint
ALTER TABLE t1 ADD COLUMN c4 INT CHECK (c4 > 0);
-- Table constraints
ALTER TABLE t1 ADD CHECK (c4 < c3);
ALTER TABLE t1 ADD CONSTRAINT `c4_maximize` CHECK (c4 < 20);
Consulter les contraintes
Exécutez SHOW CREATE TABLE pour lister toutes les contraintes d'une table :
SHOW CREATE TABLE t1;
Exemple de sortie :
CREATE TABLE `t1` (
`c1` int DEFAULT NULL,
`c2` int DEFAULT NULL,
`c3` int DEFAULT NULL,
`c4` int DEFAULT NULL,
CONSTRAINT `c1_nonzero` CHECK (`c1` <> 0),
CONSTRAINT `c2_positive` CHECK (`c2` > 0),
CONSTRAINT `c4_maximize` CHECK (`c4` < 20),
CONSTRAINT `t1_chk_1` CHECK (`c1` <> `c2`),
CONSTRAINT `t1_chk_2` CHECK (`c1` > 10),
CONSTRAINT `t1_chk_3` CHECK (`c3` < 100),
CONSTRAINT `t1_chk_4` CHECK (`c1` > `c3`),
CONSTRAINT `t1_chk_5` CHECK (`c4` > 0),
CONSTRAINT `t1_chk_6` CHECK (`c4` < `c3`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 DEFAULT COLLATE = utf8mb4_general_ci
Les noms générés automatiquement suivent le modèle TableName_chk_N.
Activer ou désactiver les contraintes CHECK
Utilisez ALTER TABLE ... ALTER CONSTRAINT pour modifier l'état d'application d'une contrainte existante :
-- Disable a constraint
ALTER TABLE t1 ALTER CONSTRAINT c1_nonzero NOT ENFORCED;
Pour ajouter une nouvelle contrainte sans l'appliquer immédiatement :
ALTER TABLE t1 ADD CHECK c4_c1_not_equal (c4 <> c1) NOT ENFORCED;
Lorsqu'une contrainte est définie à NOT ENFORCED, les opérations d'insertion et de mise à jour ne sont pas validées. Les données existantes ne sont pas vérifiées, sauf lors d'une mise à jour.
Supprimer une contrainte CHECK
Spécifiez le nom de la contrainte lors de sa suppression :
ALTER TABLE t1 DROP CONSTRAINT t1_chk_1;