0Pricing
SQL Academy · Aula

Restrições NOT NULL e CHECK

Impeça valores ausentes com NOT NULL e valide regras do domínio com CHECK (price > 0, status IN ('active','archived')).

Restrições NOT NULL e CHECK é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

Por que usar restrições?

As restrições transferem a validação para DENTRO do banco de dados. O benefício é enorme: todo aplicativo, script e consulta ad hoc grava dados válidos — ou falha de forma explícita.

NOT NULL

A restrição mais simples: esta coluna deve ter um valor:

CREATE TABLE users (
  id    BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL,
  age   INT                                  -- NULL allowed
);

Adicionando NOT NULL depois

Preencha os dados primeiro e depois adicione a restrição:

UPDATE users SET email = 'unknown@example.com' WHERE email IS NULL;
ALTER TABLE users ALTER COLUMN email SET NOT NULL;

Restrição CHECK

Uma expressão booleana arbitrária que toda linha deve satisfazer:

CREATE TABLE products (
  id BIGSERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  price NUMERIC(10,2) NOT NULL CHECK (price > 0),
  discount NUMERIC(5,2) DEFAULT 0 CHECK (discount BETWEEN 0 AND 100)
);

CHECK com valores semelhantes a um enum

Restrinja uma coluna a um conjunto fixo:

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  status TEXT NOT NULL
    CHECK (status IN ('pending','paid','shipped','cancelled'))
);

NULL passa silenciosamente por CHECK

Uma restrição CHECK passa quando a expressão é NULL (desconhecida). Combine-a com NOT NULL quando precisar de uma garantia absoluta:

CREATE TABLE invoices (
  amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);

CHECK com várias colunas

Você pode fazer referência a várias colunas:

CREATE TABLE bookings (
  start_at TIMESTAMPTZ NOT NULL,
  end_at   TIMESTAMPTZ NOT NULL,
  CHECK (start_at < end_at)
);

Adicionando CHECK depois

Valide primeiro as linhas existentes e depois adicione a restrição:

ALTER TABLE products
  ADD CONSTRAINT positive_price CHECK (price > 0);
-- fails if any row violates it

O truque de NOT VALID para tabelas grandes

Ignore a verificação completa inicial e valide depois em segundo plano:

ALTER TABLE products
  ADD CONSTRAINT positive_price CHECK (price > 0) NOT VALID;
ALTER TABLE products VALIDATE CONSTRAINT positive_price;

Restrições nomeadas

Sempre dê nomes às suas restrições para que as mensagens de erro e as migrações sejam previsíveis:

ALTER TABLE products
  ADD CONSTRAINT products_price_positive CHECK (price > 0);

Não replique a lógica no aplicativo

Se o banco de dados impõe a regra, todos os caminhos do código se beneficiam — não haverá "esqueci de validar". Mantenha a validação duplicada no aplicativo para a experiência do usuário (feedback imediato), mas faça do banco de dados a fonte de verdade.

Recapitulação

NOT NULL e CHECK impedem os dados inválidos mais comuns.

  • NOT NULL: nenhum valor ausente
  • CHECK: regras arbitrárias por linha
  • Use NOT VALID + VALIDATE para adições sem indisponibilidade

Verificação rápida

O que acontece se você escrever CHECK (price > 0) em uma coluna sem NOT NULL?

Perguntas Frequentes

A aula “Restrições NOT NULL e CHECK” é grátis?

Sim — o texto completo de “Restrições NOT NULL e CHECK” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “Restrições NOT NULL e CHECK”?

Impeça valores ausentes com NOT NULL e valide regras do domínio com CHECK (price > 0, status IN ('active','archived')). Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Restrições NOT NULL e CHECK”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Restrições NOT NULL e CHECK
  2. Restrições UNIQUE e chaves compostas
  3. FOREIGN KEY e ações referenciais
  4. Valores DEFAULT e colunas geradas
← Voltar para SQL Academy