Adicionar ou desabilitar uma constraint (FK/CHECK/UNIQUE)
Oracle
-- Add a foreign key
ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customer(id);
-- CHECK
ALTER TABLE product ADD CONSTRAINT chk_price CHECK (price >= 0);
-- Disable / enable
ALTER TABLE orders DISABLE CONSTRAINT fk_customer;
ALTER TABLE orders ENABLE CONSTRAINT fk_customer;As constraints do Oracle podem ser desligadas temporariamente com DISABLE/ENABLE (útil em cargas em massa). ENABLE VALIDATE verifica as linhas existentes; NOVALIDATE não.
PostgreSQL
-- Foreign key and CHECK
ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customer(id);
ALTER TABLE product ADD CONSTRAINT chk_price CHECK (price >= 0);
-- Instead of disabling the FK: NOT VALID + validate later
ALTER TABLE orders ADD CONSTRAINT fk2 FOREIGN KEY (c_id) REFERENCES customer(id) NOT VALID;
ALTER TABLE orders VALIDATE CONSTRAINT fk2;
ALTER TABLE orders DROP CONSTRAINT fk2;O PostgreSQL não tem DISABLE de constraint. Para reduzir o lock em uma tabela grande, adicione a constraint com NOT VALID e faça VALIDATE depois. ALTER TABLE ... DISABLE TRIGGER ALL também desabilita os triggers internos da FK e exige superuser; os dados inseridos enquanto estão desligados nunca são validados, e reabilitar não verifica retroativamente (risco de perda silenciosa de integridade). Em vez disso, faça DROP da constraint, adicione-a novamente com NOT VALID e depois execute VALIDATE CONSTRAINT.
MySQL
-- Foreign key and CHECK
ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customer(id);
ALTER TABLE product ADD CONSTRAINT chk_price CHECK (price >= 0);
-- Temporarily disable FK checks for the session
SET FOREIGN_KEY_CHECKS = 0;
-- ... bulk operation ...
SET FOREIGN_KEY_CHECKS = 1;Requer InnoDB. Em vez de desabilitar uma única constraint, usa-se SET FOREIGN_KEY_CHECKS=0 em nível de sessão. As constraints CHECK só são de fato aplicadas a partir do MySQL 8.0.16 (antes eram ignoradas).
SQL Server
-- Foreign key and CHECK
ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customer(id);
ALTER TABLE product ADD CONSTRAINT chk_price CHECK (price >= 0);
-- Disable / re-enable (validate with WITH CHECK)
ALTER TABLE orders NOCHECK CONSTRAINT fk_customer;
ALTER TABLE orders WITH CHECK CHECK CONSTRAINT fk_customer;No SQL Server, as constraints FK/CHECK são desabilitadas com NOCHECK CONSTRAINT. Se WITH CHECK CHECK CONSTRAINT não for usado ao reabilitar, a constraint fica 'not trusted' e o otimizador de consultas não pode usá-la.
MongoDB
// Constraint-like checks with schema validation rules
db.runCommand({ collMod: "product",
validator: { $jsonSchema: { required: ["price"], properties: { price: { bsonType: "number", minimum: 0 } } } },
validationLevel: "strict"
});
// Unique index for uniqueness
db.customer.createIndex({ email: 1 }, { unique: true });Não há chaves estrangeiras (são garantidas na camada da aplicação). O equivalente a UNIQUE é um índice único. Em vez de CHECK, use validação $jsonSchema; validationAction: 'warn' produz o efeito de desabilitá-la.
Redis
# Not applicable: Redis has no FK/CHECK/UNIQUE constraints. Uniqueness is enforced at the application level with SET or
# SETNX/conditional writes.
SET customer:email:sample@x.com 1 NXNão existe o conceito de integridade relacional ou constraints. A unicidade é controlada no lado da aplicação com SET ... NX (grava apenas se não existir) ou verificando um SET/HASH separado.
Elasticsearch
# Not applicable: Elasticsearch has no FK/CHECK. Field types are enforced with the mapping,
# and uniqueness with a fixed _id.
PUT product/_doc/ABC-123
{ "price": 100 }Relações e constraints não existem no engine. A verificação de tipos é feita pelo mapping. Para um efeito de UNIQUE, use a chave natural como _id (escritas no mesmo _id sobrescrevem) ou rejeite conflitos com op_type=create.