“不包括”约束?

时间:2016-08-24 15:25:43

标签: mysql sql database

感谢您阅读本文。

我在MySQL中有这样的表:

enter image description here

Device表有一个名称列表。 ReservedName表有一个“保留”名单列表。

正如您所看到的,我的设计理念是使Name表的Device值不应该是Name中的ReservedName之一。

当我对Device表执行INSERT操作时,我可以通过添加一些SQL语句来轻松实现此关系。但我想知道表模式中是否存在类似“不是一个”约束的东西?也许FOREIGN KEY的意思相反?如果有任何其他方式可以建立这种关系,也欢迎它。

1 个答案:

答案 0 :(得分:0)

您可以创建BEFORE INSERT个触发器,这些触发器可能会导致错误,或者在不满足数据要求时将字段设置为默认值。

在您的情况下,您可以创建一个触发器,如果​​验证失败,将引发错误,如下所示:

CREATE TRIGGER `validate_before_insert` BEFORE INSERT ON `Device`
FOR EACH ROW
BEGIN
    IF EXISTS (SELECT* FROM ReservedName WHERE Name = new.Name) THEN
        SIGNAL SQLSTATE '12345'
            SET MESSAGE_TEXT := 'check constraint on Device.Name failed';
    END IF;
END

您可以在documentation中阅读有关MySQL triggeres的更多信息。