这是我的第一篇文章,我是一个mysql noob,所以我为这个问题的长度道歉。
背景
我有一个查找表cctypevals
,带有一个外来字段' cctypeID',在mysql中这将是:
CREATE TABLE `cctypevals` (
`cctypevalsKEY` integer NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`cctypeID` varchar(50) NOT NULL, FOREIGN KEY(cctypeID) REFERENCES cctype(cctypeID) ,
`value` varchar(50) )
cctypeID
包含用户表格中的字段名称,例如' taskSTATE',' serviceTYPE',' projectCAT'等。
值字段包含这些用户表字段的唯一允许值。
因此,cctypevals
的行为就像一个多元的'键控查找表,例如:
从cctypevals中选择值,其中cctypeID =' serviceTYPE'
可能会返回HomeVisit,BackToBase等
我知道每个字段有一个查找表会更容易,但这就是我所拥有的。
问题
如何约束(在sql create table或alter语句中)包含task.taskSTATE,service.serviceTYPE等字段的表,以便它们只能接受cctypevals
中的值。value
其中{ {1}}包含相应的字段名称?
答案 0 :(得分:1)
在create或alter table语句中你不能这样做,因为check
约束能够做到这一点,但是mysql还没有实现check
约束(mysql可以解析检查约束,但它不起作用。)
您可以在插入和更新触发器之前创建检查特定限制的内容,如果更新的值不符合要求,则可以raise an sql error message。