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

时间:2016-02-09 11:37:49

标签: mysql check-constraints

这个问题被简化以减少混乱。

在我的数据库中,我有2个表。 1表"产品"和1表&​​#34;通知"。 此产品可以是3种类型,由枚举(mydatafile = cStringIO.StringIO(data) gzipper = gzip.GzipFile(fileobj=mydatafile) decdata = gzipper.read() )定义。

通知包含产品的ForeignKey及其ID。

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

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

2 个答案:

答案 0 :(得分:1)

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

您可以设置外国人密钥值的SELECT以在触发器中对其进行测试,并发布错误。

查看CHECK constraint in MySQL is not working

的第二个答案
  

像这样:

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 ;

答案 1 :(得分:0)

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

加入你的表,然后使用where子句过滤掉你不想要的结果。您没有提供表格的完整详细信息,因此我将举一个您想要做的简单示例。我的枚举是“类型”列。

以简化形式:

            SELECT * 
            FROM products 
            WHERE type = 'APPLICATION'