Как задать ограничение на запись в 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 ;

SQLize.online

В версии MySQL 8.0 и старше можно использовать CONSTRAINT:

create table `products` (
  id int,
  title varchar(255),
  category_id int,
  CONSTRAINT `category_id_not_2` CHECK (`category_id`<>2)
);

Рабочий пример здесь

→ Ссылка