As restrições CHECK impõem condições aos valores das colunas. O sistema permite inserir ou atualize apenas linhas que atendam a todas as restrições ative.
Versões compatíveis
Versão do mecanismo de banco de dados: MySQL 8.0
Versão mínima da instância:
polardb-2.5.0_5.4.20-20241224_xcluster8.4.20-20241213
Para obter detalhes sobre as versões, consulte Notas de versão. Para verificar sua versão atual, consulte Visualize e atualize a versão de uma instância.
Sintaxe
[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
Os itens entre colchetes ([]) são opcionais. Esta sintaxe corresponde à sintaxe de restrição CHECK do MySQL. Para mais detalhes, consulte CHECK Constraints.
|
Parâmetro |
Descrição |
|
|
Nome da restrição. Se omitido, o sistema gera um nome no formato |
|
|
Condição da restrição. |
|
|
Defina se a restrição está ativa: |
|
- Se omitido ou definido como |
|
|
- Se definido como |
Adicionar restrições CHECK
O PolarDB-X oferece suporte a dois tipos de restrições CHECK:
Restrição de tabela: definida fora da definição de uma coluna; pode referenciar uma ou mais colunas.
Restrição de coluna: definida inline na definição de uma coluna; aplica-se apenas a essa coluna.
Adicionar restrições com 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)
);
Adicionar restrições com 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);
Visualize restrições
Execute SHOW CREATE TABLE para listar todas as restrições de uma tabela:
SHOW CREATE TABLE t1;
Exemplo de saída:
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
Os nomes gerados automaticamente seguem o padrão TableName_chk_N.
Ative ou desativar restrições CHECK
Use ALTER TABLE ... ALTER CONSTRAINT para alterar o status de aplicação de uma restrição existente:
-- Disable a constraint
ALTER TABLE t1 ALTER CONSTRAINT c1_nonzero NOT ENFORCED;
Para adicionar uma nova restrição sem aplicá-la imediatamente:
ALTER TABLE t1 ADD CHECK c4_c1_not_equal (c4 <> c1) NOT ENFORCED;
Quando uma restrição estiver definida como NOT ENFORCED, o sistema não validará operações de inserção e atualização em relação a ela. Os dados existentes não passarão por verificação, a menos que sejam atualizados.
Remover uma restrição CHECK
Especifique o nome da restrição ao removê-la:
ALTER TABLE t1 DROP CONSTRAINT t1_chk_1;