如果将来是EnrolledDate,如何让我的student_before_update触发器显示我的错误消息?

时间:2017-04-20 23:12:39

标签: mysql triggers

-- Create a trigger that will prevent  an update to a student table if EnrolledDate is in the future

USE College ;

DROP TRIGGER IF EXISTS  Student_Before_Update; 

DELIMITER $$

        CREATE TRIGGER Student_Before_Update
        BEFORE UPDATE ON Student 
        FOR EACH ROW 
        
      BEGIN 
      
	IF NEW.EnrolledDate > '2016-10-18'  THEN 
				 SIGNAL SQLSTATE VALUE '45000'
				  SET MESSAGE_TEXT= 'Enrolled date may not be in the future';
		END IF; 

      END $$

DELIMITER ;

UPDATE Student
SET EnrolledDate= DATE(now())
WHERE ID= 1; 

UPDATE Student
SET EnrolledDate= DATE_ADD(now(),INTERVAL 1 DAY)
WHERE ID=1; 

大家好,

我正在创建一个BEFORE UPDATE触发器,如果​​我用将来的日期更新学生的EnrolledDate,它将显示错误消息。例如,带有EnrolledDate的学生记录中的最后一个插入日期是“2016-10-18”,因此该日期之后的任何其他记录都应标记一条错误消息,说明“未来可能不会注册日期”。我已经在这方面工作了几个小时,但我还是没有得到。有人可以帮帮我吗?到目前为止,这是我的代码。

1 个答案:

答案 0 :(得分:0)

你不能直接在MySQL中这样做,但有一个hack可以让你这样做here

IF NEW.EnrolledDate > GetDate()  THEN         
    DECLARE dummy INT;

    SELECT 
    'Your meaningful error message goes here
    INTO dummy 
        FROM mytable
      WHERE mytable.id=new.id
END IF; 

编辑1 还提供GetDate()而非硬编码日期;假设EnralledDate确实是一个日期字段

编辑2 调整代码,因为它是MySQL