如何检查外键对象是否属于某种类型

How can I check if the foreign key object is of a certain type

此问题已简化以减少混乱。

在我的数据库中有 2 个 table。 1 table "product" 和 1 table "notification"。 该产品可以有 3 种类型,由枚举 ( ENUM('SERVER', 'SERVICE', 'APPLICATION') ) 定义。

通知包含产品的外键及其 ID。

当我创建通知时,我想检查给定的 ForeignKey 是否属于 'APPLICATION' 类型。我可以进行这样的检查吗?如果是这样,这是由 CHECK 完成的吗?

据我所知,我唯一可以检查的是一个值(例如 CHECK(foo > 0)

如果它是一个枚举,您应该能够检查该值是否等于您想要的结果。

加入您的 tables,然后使用 where 子句过滤掉您不想要的结果。您没有提供 table 的完整详细信息,因此我将举一个简单的示例来说明您想要做什么。我的枚举是列 "type".

简化形式:

            SELECT * 
            FROM products 
            WHERE type = 'APPLICATION'

最简单的方法是一个触发器 Before Insert 和第二个触发器 Before Update

你可以SELECT你的外国人键值在触发器中测试它,并释放一个错误。

看看CHECK constraint in MySQL is not working

的第二个答案

Like this :

DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test`
FOR EACH ROW
BEGIN
    IF CHAR_LENGTH( NEW.ID ) < 4 THEN
        SIGNAL SQLSTATE '12345'
            SET MESSAGE_TEXT := 'check constraint on Test.ID failed';
    END IF;
END$$   
DELIMITER ;