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 itO 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
- Restrições NOT NULL e CHECK
- Restrições UNIQUE e chaves compostas
- FOREIGN KEY e ações referenciais
- Valores DEFAULT e colunas geradas