2016-08-24 64 views
0

感谢您阅读本文。“不包含”约束?

我有这样的表中MySQL

enter image description here

Device表有名称的列表。并且ReservedName表具有“保留”名称列表的列表。

正如你可以看到,我的设计理念是让DeviceName值不应ReservedNameName之一。

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

+0

您正在查找检查约束。 http://stackoverflow.com/questions/13000698/sub-queries-in-check-constraint可能是有用的 – Kritner

回答

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。