基于另一个表列的MYSQL表列约束

时间:2016-03-29 13:18:04

标签: mysql sql

这是我的第一篇文章,我是一个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}}包含相应的字段名称?

1 个答案:

答案 0 :(得分:1)

在create或alter table语句中你不能这样做,因为check约束能够做到这一点,但是mysql还没有实现check约束(mysql可以解析检查约束,但它不起作用。)

您可以在插入和更新触发器之前创建检查特定限制的内容,如果更新的值不符合要求,则可以raise an sql error message