“不包含”约束?
问题描述:
感谢您阅读本文。“不包含”约束?
我有这样的表中MySQL
:
Device
表有名称的列表。并且ReservedName
表具有“保留”名称列表的列表。
正如你可以看到,我的设计理念是让Device
表Name
值不应ReservedName
的Name
之一。
当我对Device
表执行INSERT操作时,我可以通过添加几条SQL语句轻松实现此关系。但是我想知道表格模式中是否存在类似“不是”约束的东西?也许与FOREIGN KEY的意义相反?如果有任何其他方式来建立这种关系也是受欢迎的。
答
您可以创建一个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。
您正在查找检查约束。 http://stackoverflow.com/questions/13000698/sub-queries-in-check-constraint可能是有用的 – Kritner