Infelizmente, o MySQL não suporta restrições de verificação SQL. Você pode defini-los na sua consulta DDL por motivos de compatibilidade, mas eles são ignorados.
Existe uma alternativa simples
Você pode criar BEFORE INSERT
e BEFORE UPDATE
disparar que causa um erro ou define o campo com seu valor padrão quando os requisitos dos dados não são atendidos.
Exemplo para BEFORE INSERT
trabalhar após o 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 do MySQL 5.5, você tinha que causar um erro, por exemplo, chamar um procedimento indefinido.
Nos dois casos, isso causa uma reversão implícita da transação. O MySQL não permite a própria instrução ROLLBACK dentro de procedimentos e gatilhos.
Se você não deseja reverter a transação (INSERT / UPDATE deve passar mesmo com uma falha de "restrição de verificação", você pode sobrescrever o valor usando o SET NEW.ID = NULL
que definirá o ID para o valor padrão dos campos, não faz muito sentido para um ID tho
Edit:
Removida a citação perdida.
Em relação ao :=
operador:
Ao contrário =
, o :=
operador nunca é interpretado como um operador de comparação. Isso significa que você pode usar :=
em qualquer instrução SQL válida (não apenas nas instruções SET) para atribuir um valor a uma variável.
https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
Sobre citações de identificador de backtick:
O caractere de citação do identificador é o backtick ("` ")
Se o modo SQL ANSI_QUOTES estiver ativado, também será permitido citar identificadores entre aspas duplas
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html