Добавить или отключить ограничение (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;Ограничения Oracle можно временно отключить через DISABLE/ENABLE (полезно при массовой загрузке). ENABLE VALIDATE проверяет существующие строки; NOVALIDATE — нет.
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;В PostgreSQL нет DISABLE для ограничений. Чтобы уменьшить блокировки на большой таблице, добавьте ограничение с NOT VALID и выполните VALIDATE позже. ALTER TABLE ... DISABLE TRIGGER ALL отключает и внутренние триггеры FK и требует superuser; данные, вставленные во время отключения, никогда не проверяются, а повторное включение не проверяет задним числом (риск скрытой потери целостности). Вместо этого выполните DROP ограничения, добавьте его заново с NOT VALID, затем выполните 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;Требуется InnoDB. Вместо отключения отдельного ограничения используется SET FOREIGN_KEY_CHECKS=0 на уровне сессии. Ограничения CHECK реально применяются начиная с MySQL 8.0.16 (раньше игнорировались).
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;В SQL Server ограничения FK/CHECK отключаются через NOCHECK CONSTRAINT. Если при повторном включении не использовать WITH CHECK CHECK CONSTRAINT, ограничение остаётся «not trusted», и оптимизатор запросов не может его использовать.
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 });Внешних ключей нет (обеспечиваются на уровне приложения). Эквивалент UNIQUE — уникальный индекс. Вместо CHECK используйте валидацию $jsonSchema; validationAction: 'warn' даёт эффект отключения.
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:[email protected] 1 NXПонятия реляционной целостности или ограничений нет. Уникальность обеспечивается на стороне приложения через SET ... NX (запись, только если ключа нет) или проверкой отдельного SET/HASH.
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 }Связей и ограничений в движке нет. Проверка типов выполняется через mapping. Для эффекта UNIQUE используйте натуральный ключ как _id (записи с тем же _id перезаписываются) или отклоняйте конфликты через op_type=create.