Как задать ограничение на запись в MySQL где значение в колонке из внешней таблицы != 2
Есть две таблицы
Categories
Id | title | type_category
1 | Кат1 | 1
2 | Кат2 | 2
Products
id | title | category_id
Как запретить запись CATEGORY_ID в таблицу PRODUCTS если type_category != 2 ?
Сделать это нужно на уровне базы данных, может быть можно как то связать FOREIGN KEY и CHECK? Или нужно использовать триггеры?
Ответы (1 шт):
Автор решения: Slava Rozhnev
→ Ссылка
В MySQL 5 следует использовать триггер:
DELIMITER $$
CREATE
TRIGGER `products_before_insert` BEFORE INSERT ON `products`
FOR EACH ROW BEGIN
IF NEW.category_id = 2 THEN
SIGNAL sqlstate '45000';
END IF;
END;
$$
DELIMITER ;
В версии MySQL 8.0 и старше можно использовать CONSTRAINT:
create table `products` (
id int,
title varchar(255),
category_id int,
CONSTRAINT `category_id_not_2` CHECK (`category_id`<>2)
);
Рабочий пример здесь