Primeiro eu criei uma tabela como
CREATE TABLE Customer (
SD integer CHECK (SD > 0),
Last_Name varchar (30),
First_Name varchar(30)
);
e depois inseri valores nessa tabela
INSERT INTO Customer values ('-2','abc','zz');
O MySQL não mostra um erro, ele aceitou os valores.
mysql
check-constraints
JohnRaja
fonte
fonte
Respostas:
O MySQL 8.0.16 é a primeira versão que suporta restrições CHECK.
Leia https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html
Se você usa o MySQL 8.0.15 ou anterior, o Manual de Referência do MySQL diz:
Tente um gatilho ...
Espero que ajude.
fonte
CHECK
restrição definida. Ahhh, isso seria muito simples ...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
eBEFORE 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.5Antes 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 thoEdit: Removida a citação perdida.
Em relação ao
:=
operador:https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
Sobre citações de identificador de backtick:
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html
fonte
DELIMITER
?CHECK
restrições são ignoradas pelo MySQL, conforme explicado em um minúsculo comentário nos documentos:CREATE TABLE
fonte
CHECK
restrições, se aCHECK
avaliação atéFALSE
então a inserção (ou atualização) não for feita e um erro for causado.A
CHECK
restrição não parece ser implementada no MySQL.Consulte este relatório de bug: https://bugs.mysql.com/bug.php?id=3464
fonte
Conforme mencionado por joanq, o MariaDB agora parece suportar restrições de CHECK entre outros itens:
"Suporte para CHECK CONSTRAINT ( MDEV-7563 )."
https://mariadb.com/kb/en/mariadb/mariadb-1021-release-notes/
fonte
As restrições de verificação são suportadas a partir da versão 8.0.15 (ainda a ser lançada)
https://bugs.mysql.com/bug.php?id=3464
fonte
Atualize para o MySQL 8.0.16 para usar
checks
:Documentação de verificações do MySQL
fonte
tente com
set sql_mode = 'STRICT_TRANS_TABLES'
OUSET sql_mode='STRICT_ALL_TABLES'
fonte
CHECK
restrição