-- 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”,因此该日期之后的任何其他记录都应标记一条错误消息,说明“未来可能不会注册日期”。我已经在这方面工作了几个小时,但我还是没有得到。有人可以帮帮我吗?到目前为止,这是我的代码。
答案 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