我需要在“注册”表中添加一个字段–日期类型的DOC,还要确保DOC大于DOJ。我尝试过
ALTER TABLE Registration
ADD DOC date
CHECK (DOC>DOJ);
显示错误。我哪里出错了?
答案 0 :(得分:0)
首先,prior to MySQL version 8.0.16,MySQL仅允许表CHECK
约束语法的非常有限的版本,该语法已被解析和忽略。因此,如果您的MySQL版本< 8.0.16 ,那么您的ALTER TABLE
语句将无法实现任何目的;以及语法错误的原因。
现在,如果您的版本确实正确;那么您定义的表约束错误。根据{{3}}:
将
CHECK
约束指定为表约束或列 约束:
表约束不会出现在列定义中,并且可以引用任何一个或多个表列。前向引用是 允许列出现在表定义的后面。
列约束出现在列定义中,并且只能引用该列。
由于您的CHECK
约束涉及多个列,因此它是表约束。另外,Documentation添加新的CHECK约束如下:
ALTER TABLE tbl_name
ADD CONSTRAINT [symbol] CHECK (expr) [[NOT] ENFORCED];
请尝试以下操作:
ALTER TABLE Registration
ADD DOC date,
ADD CONSTRAINT chk_doc_greater_doj CHECK (DOC>DOJ);
答案 1 :(得分:0)
ALTER TABLE REGISTRATION
ADD DOC DATE
ADD CONSTRAINT DATE_OF_COMPLETION CHECK(DOC>DOJ);
答案 2 :(得分:0)
嘿,我遇到了同样的问题,我通过编写两个单独的查询来解决它
ALTER TABLE Registration ADD DOC date;
ALTER TABLE Registration ADD CONSTRAINT check_date CHECK (DOC>DOJ);