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 |
|
|
Nombre de la restricción. Si se omite, el sistema genera un nombre con el formato |
|
|
Condición de la restricción. |
|
|
Indica si la restricción está activa: |
|
- Si se omite o se establece en |
|
|
- Si se establece en |
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;