Todos los productos
Search
Centro de documentos

PolarDB:Restricciones CHECK

Última actualización: Sep 05, 2026

Las restricciones CHECK aplican condiciones a los valores de las columnas. Solo se insertan o actualizan las filas que cumplen todas las restricciones activas.

Versiones compatibles

  • Versión del motor de base de datos: MySQL 8.0

  • Versión mínima de la instancia: polardb-2.5.0_5.4.20-20241224_xcluster8.4.20-20241213

Para conocer los detalles de cada versión, consulte Notas de la versión. Para comprobar su versión actual, consulte View and update the version of an instance.

Sintaxis

[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]

Los elementos entre corchetes ([]) son opcionales. Esta sintaxis coincide con la de las restricciones CHECK de MySQL. Para más información, consulte CHECK Constraints.

Parámetro

Descripción

CONSTRAINT [symbol]

Nombre de la restricción. Si se omite, el sistema genera un nombre con el formato TableName_chk_N, por ejemplo, t1_chk_1.

CHECK (expr)

Condición de la restricción. expr es una expresión booleana que devuelve TRUE, FALSE o UNKNOWN para cada fila. UNKNOWN significa que el valor de la columna es NULL. Si expr se evalúa como FALSE o UNKNOWN, la fila incumple la restricción y se rechaza la inserción o actualización.

[NOT] ENFORCED

Indica si la restricción está activa:

- Si se omite o se establece en ENFORCED: la restricción se crea y se aplica. El sistema comprueba todos los datos insertados y actualizados. Las filas existentes no se validan a menos que se actualicen.

- Si se establece en NOT ENFORCED: la restricción se crea, pero no se valida al insertar ni al actualizar.

Agregar restricciones CHECK

PolarDB-X admite dos tipos de restricciones CHECK:

  • Restricción de tabla: definida fuera de la definición de una columna; puede hacer referencia a una o más columnas.

  • Restricción de columna: definida dentro de la definición de una columna; solo aplica a esa columna.

Agregar restricciones con 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)
);

Agregar restricciones con 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);

Consultar restricciones

Ejecute SHOW CREATE TABLE para listar todas las restricciones de una tabla:

SHOW CREATE TABLE t1;

Salida de ejemplo:

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

Los nombres generados automáticamente siguen el patrón TableName_chk_N.

Habilitar o deshabilitar restricciones CHECK

Use ALTER TABLE ... ALTER CONSTRAINT para cambiar el estado de aplicación de una restricción existente:

-- Disable a constraint
ALTER TABLE t1 ALTER CONSTRAINT c1_nonzero NOT ENFORCED;

Para agregar una restricción nueva sin aplicarla de inmediato:

ALTER TABLE t1 ADD CHECK c4_c1_not_equal (c4 <> c1) NOT ENFORCED;

Cuando una restricción se establece en NOT ENFORCED, las operaciones de inserción y actualización no se validan contra ella. Los datos existentes no se comprueban a menos que se actualicen.

Eliminar una restricción CHECK

Especifique el nombre de la restricción al eliminarla:

ALTER TABLE t1 DROP CONSTRAINT t1_chk_1;