Tous les produits
Search
Centre de documentation

PolarDB:Contraintes CHECK

Dernière mise à jour :Aug 11, 2026

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;