【问题标题】:Two columns in the same table must match - Mysql同一张表中的两列必须匹配 - Mysql
【发布时间】:2016-02-18 02:11:15
【问题描述】:

如何添加约束来强制同一张表中两列的值相同?

我希望学生班级成绩与学生成绩相匹配。

/*Student Grade = Student Class Grade constraint "BEFORE INSERT" */ 
delimiter //    
CREATE TRIGGER StCGradeCheckBIN BEFORE INSERT ON  STUDENT
FOR EACH ROW
BEGIN
    IF new.Class_Grade <> Grade THEN
    SIGNAL SQLSTATE '10000'
        SET MESSAGE_TEXT = 'Error while filling the Class Grade faild! It is must match the Student.Grade feild';
    END IF;
END;
// delimiter ;


/*Student Grade = Student Class Grade constraint "BEFORE UPDATE" */ 

delimiter //    
CREATE TRIGGER StCGCheckBUP BEFORE UPDATE ON  Student
FOR EACH ROW
BEGIN
    IF new.Class_Grade <> Grade THEN
    SIGNAL SQLSTATE '10000'
        SET MESSAGE_TEXT = 'Error while Updating the Class Grade feild! It is must mathc  the Student.Grade feild';
    END IF;
END;
// delimiter ;

此触发器不起作用,它在插入 STUDENT 表期间导致此错误

Error Code: 1054. Unknown column 'Grade' in 'field list'

使用mysql工作台6.3

提前致谢

【问题讨论】:

    标签: mysql sql mysql-workbench workbench


    【解决方案1】:

    还不能评论,但如果两列必须相等,为什么需要第二列?它没有任何用途。

    【讨论】:

      【解决方案2】:

      问题是触发器不理解Grade。因为它们在同一张桌子上,我认为您可以使用new. 来限定名称:

      delimiter //    
      CREATE TRIGGER StCGradeCheckBIN BEFORE INSERT ON  STUDENT
      FOR EACH ROW
      BEGIN
          IF new.Class_Grade <> new.Grade THEN
      --------------------------^
          SIGNAL SQLSTATE '10000'
              SET MESSAGE_TEXT = 'Error while filling the Class Grade faild! It is must match the Student.Grade feild';
          END IF;
      END;
      // delimiter ;
      

      【讨论】:

        猜你喜欢
        • 2021-03-07
        • 1970-01-01
        • 1970-01-01
        • 2013-04-18
        • 1970-01-01
        • 2015-09-21
        • 1970-01-01
        • 1970-01-01
        • 2020-01-17
        相关资源
        最近更新 更多