Primero creé una tabla como
CREATE TABLE Customer (
SD integer CHECK (SD > 0),
Last_Name varchar (30),
First_Name varchar(30)
);
y luego insertó valores en esa tabla
INSERT INTO Customer values ('-2','abc','zz');
MySQL no muestra un error, aceptó los valores.
mysql
check-constraints
JohnRaja
fuente
fuente

Respuestas:
MySQL 8.0.16 es la primera versión que admite restricciones CHECK.
Lea https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html
Si usa MySQL 8.0.15 o anterior, el Manual de referencia de MySQL dice:
Prueba un disparador ...
Espero que ayude.
fuente
CHECKrestricción definida. Ahhh, eso sería demasiado sencillo ...Desafortunadamente, MySQL no admite restricciones de verificación de SQL. Puede definirlos en su consulta DDL por razones de compatibilidad, pero simplemente se ignoran.
Hay una alternativa simple
Puedes crear
BEFORE INSERTyBEFORE UPDATEdisparadores que causen un error o establecer el campo en su valor predeterminado cuando no se cumplen los requisitos de los datos.Ejemplo para
BEFORE INSERTtrabajar después de MySQL 5.5Antes de MySQL 5.5 tenía que causar un error, por ejemplo, llamar a un procedimiento indefinido.
En ambos casos, esto provoca una reversión de transacción implícita. MySQL no permite la declaración ROLLBACK en sí misma dentro de procedimientos y disparadores.
Si no desea revertir la transacción (INSERT / UPDATE debe pasar incluso con una "restricción de verificación" fallida, puede sobrescribir el valor usando el
SET NEW.ID = NULLcual establecerá la identificación en el valor predeterminado de los campos, realmente no tiene sentido para una identificación aunqueEditar: se eliminó la cita perdida.
Sobre el
:=operador:https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
En cuanto a las comillas del identificador de retroceso:
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html
fuente
DELIMITER?CHECKMySQL ignora las restricciones como se explica en un comentario minúsculo en los documentos:CREATE TABLEfuente
CHECKrestricciones, si seCHECKevalúa aFALSEcontinuación, la inserción (o actualización) no se realiza y se produce un error.La
CHECKrestricción no parece implementarse en MySQL.Vea este informe de error: https://bugs.mysql.com/bug.php?id=3464
fuente
Como lo menciona joanq MariaDB ahora parece admitir las restricciones CHECK entre otras cosas:
"Soporte para CHECK CONSTRAINT ( MDEV-7563 )".
https://mariadb.com/kb/en/mariadb/mariadb-1021-release-notes/
fuente
Las restricciones de verificación son compatibles a partir de la versión 8.0.15 (aún no se ha lanzado)
https://bugs.mysql.com/bug.php?id=3464
fuente
Actualice a MySQL 8.0.16 para usar
checks:Documentación de cheques MySQL
fuente
intente con
set sql_mode = 'STRICT_TRANS_TABLES'ORSET sql_mode='STRICT_ALL_TABLES'fuente
CHECKrestricción