Todos os produtos
Search
Central de documentação

PolarDB:Restrições CHECK

Última atualização: Jun 28, 2026

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

CONSTRAINT [symbol]

Nome da restrição. Se omitido, o sistema gera um nome no formato TableName_chk_N, por exemplo, t1_chk_1.

CHECK (expr)

Condição da restrição. expr é uma expressão booleana que retorna TRUE, FALSE ou UNKNOWN para cada linha. UNKNOWN indica que o valor da coluna é NULL. Se expr for avaliada como FALSE ou UNKNOWN, a linha violará a restrição e o sistema rejeitará a inserção ou atualização.

[NOT] ENFORCED

Defina se a restrição está ativa:

- Se omitido ou definido como ENFORCED: o sistema crie e aplica a restrição, verificando todos os dados inseridos e atualizados. As linhas existentes não passam por verificação, a menos que sejam atualizadas.

- Se definido como NOT ENFORCED: o sistema crie a restrição, mas não a verifica durante inserções ou atualizações.

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;