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 INSERT
yBEFORE UPDATE
disparadores que causen un error o establecer el campo en su valor predeterminado cuando no se cumplen los requisitos de los datos.
Ejemplo para BEFORE INSERT
trabajar después de MySQL 5.5
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test`
FOR EACH ROW
BEGIN
IF CHAR_LENGTH( NEW.ID ) < 4 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT := 'check constraint on Test.ID failed';
END IF;
END$$
DELIMITER ;
Antes 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 = NULL
cual establecerá la identificación en el valor predeterminado de los campos, realmente no tiene sentido para una identificación aunque
Editar: se
eliminó la cita perdida.
Sobre el :=
operador:
A diferencia =
, el :=
operador nunca se interpreta como un operador de comparación. Esto significa que puede usar :=
cualquier instrucción SQL válida (no solo en las instrucciones SET) para asignar un valor a una variable.
https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
En cuanto a las comillas del identificador de retroceso:
El carácter de comilla del identificador es la tecla de retroceso ("" ")
Si el modo ANSI_QUOTES SQL está habilitado, también está permitido citar identificadores dentro de comillas dobles
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html