在表中添加字段,并与另一列一起检查条件

时间:2019-07-12 13:37:54

标签: mysql alter

我需要在“注册”表中添加一个字段–日期类型的DOC,还要确保DOC大于DOJ。我尝试过

ALTER TABLE Registration
ADD DOC date
CHECK (DOC>DOJ);

显示错误。我哪里出错了?

3 个答案:

答案 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);