感谢您阅读本文。
我在MySQL
中有这样的表:
Device
表有一个名称列表。 ReservedName
表有一个“保留”名单列表。
正如您所看到的,我的设计理念是使Name
表的Device
值不应该是Name
中的ReservedName
之一。
当我对Device
表执行INSERT操作时,我可以通过添加一些SQL语句来轻松实现此关系。但我想知道表模式中是否存在类似“不是一个”约束的东西?也许FOREIGN KEY的意思相反?如果有任何其他方式可以建立这种关系,也欢迎它。
答案 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的更多信息。