我在这里为我正在处理的数据库编写一些约束,我想知道我是否可以执行以下操作:
ALTER TABLE Course
ADD CONSTRAINT cs_level
CHECK (clevel in ('P','I','II','III'))
......而不是:
ALTER TABLE Course
ADD CONSTRAINT cs_level
CHECK (clevel = 'P' OR clevel = 'I' OR clevel = 'II' OR clevel = 'III')
答案 0 :(得分:2)
不幸的是,MySQL不支持CHECK约束。它们被解析但被忽略。
CHECK子句被解析但被所有存储引擎忽略。
在插入行之前,您可以尝试将此检查约束放在业务逻辑中。
正如Joe Celko在他的书Joe Celko's SQL for Smarties中所说:
小型“伪SQL”产品已经出现在开源领域。 MySQL之类的语言在语法和语义方面与标准SQL非常不同,通常只是带有借用保留字的文件系统接口
确实有点苛刻,但在某种程度上他是正确的,因为MySQL不支持一堆标准SQL功能。
答案 1 :(得分:2)
即使MySQL强制执行CHECK
限制,我仍然会创建一个COURSE_LEVEL
表:
COURSE_LEVEL_CODE
,VARCHAR(3),主键COURSE_LEVEL_DESCRIPTION
,VARCHAR(120) ...并在COURSE
表格clevel
列上创建一个FOREIGN KEY约束:
ALTER TABLE COURSE
ADD FOREIGN KEY (clevel) REFERENCES COURSE_LEVEL(COURSE_LEVEL_CODE)
答案 2 :(得分:0)
MySQL仅支持外键约束,不支持约束。无论你从哪里获得这种语法,都不是MySQL手册。