1

好吧,我在这里为我正在处理的数据库编写一些约束,我想知道我是否可以执行以下操作:

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')
4

3 回答 3

2

不幸的是,MySQL 不支持 CHECK 约束。它们被解析但被忽略。

从参考手册

CHECK 子句被解析,但被所有存储引擎忽略。

在插入行之前,您可以尝试将此检查约束放入您的业务逻辑中。

正如Joe Celko在他的书Joe Celko's SQL for Smarties中所说:

小型“伪 SQL”产品已经出现在开源领域。MySQL 等语言在语法和语义上与标准 SQL 有很大不同,通常只是带有借用保留字的文件系统接口

确实有点苛刻,但在某种程度上他是正确的,因为 MySQL 不支持一堆标准 SQL 特性。

于 2010-03-06T23:05:48.303 回答
2

即使 MySQL 强制执行CHECK约束,我仍然会创建一个COURSE_LEVEL表:

  • COURSE_LEVEL_CODE, VARCHAR(3), 主键
  • COURSE_LEVEL_DESCRIPTION, VARCHAR(120)

COURSE...并在表列上创建 FOREIGN KEY 约束clevel

ALTER TABLE COURSE
ADD FOREIGN KEY (clevel) REFERENCES COURSE_LEVEL(COURSE_LEVEL_CODE)
于 2010-03-06T23:23:20.570 回答
0

MySQL 只支持外键约束,不支持检查约束。无论您从哪里获得该语法,它都不是 MySQL 手册。

于 2010-03-06T23:05:22.747 回答