这是我的第一篇文章,我是mysql新手,所以我很抱歉这个问题太长了。
背景
我有一个带有外部字段'cctypeID‘的查找表cctypevals,在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的作用就像一个“多”键查找表,例如:
从cctypeID ='serviceTYPE‘的cctypeID中选择值
可能返回HomeVisit、BackToBase等
我知道每个字段都有一个查找表会更容易,但这就是我所拥有的。
问题
如何约束(在sql create table或alter语句中)具有task.taskSTATE、service.serviceTYPE等字段的表,以便它们只能接受来自cctypevals.value的值,其中cctypeID包含适当的字段名?
发布于 2016-03-29 21:26:29
在create或alter table语句中,您不能这样做,因为check约束可以做到这一点,但是mysql还没有实现check约束(mysql可以解析check约束,但它不能工作)。
您可以创建before insert和update触发器,以检查特定的限制;如果更新的值不满足要求,则创建raise an sql error message。
https://stackoverflow.com/questions/36285483
复制相似问题