Mysql 如何防止在我的学生表中出现日期?

Mysql 如何防止在我的学生表中出现日期?,mysql,triggers,Mysql,Triggers,--创建一个触发器,该触发器将在EnrolledDate在将来出现时阻止对学生表的更新 使用大学; 如果在更新前存在学生\u,则丢弃触发器; 分隔符$$ 更新前创建触发学生\u 更新学生资料前 每行 开始 如果NEW.EnrolledDate>2016-10-18,则 信号SQLSTATE值“45000” SET MESSAGE_TEXT='登记日期可能不在将来'; 如果结束; 结束$$ 定界符; 更新学生 设置EnrolledDate=DATE(现在为()) 其中ID=1; 更新学生 设置En

--创建一个触发器,该触发器将在EnrolledDate在将来出现时阻止对学生表的更新
使用大学;
如果在更新前存在学生\u,则丢弃触发器;
分隔符$$
更新前创建触发学生\u
更新学生资料前
每行
开始
如果NEW.EnrolledDate>2016-10-18,则
信号SQLSTATE值“45000”
SET MESSAGE_TEXT='登记日期可能不在将来';
如果结束;
结束$$
定界符;
更新学生
设置EnrolledDate=DATE(现在为())
其中ID=1;
更新学生
设置EnrolledDate=DATE\u ADD(现在(),间隔1天)
其中ID=1请尝试以下操作:

-- 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 DATE_FORMAT(NEW.EnrolledDate,'%Y-%m-%d') > DATE_FORMAT(NOW(),'%Y-%m-%d')  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;

怎么用?您正在与过去(2016-10-18)而不是现在的硬编码日期方式进行比较。@Sloan Thrasher我应该使用GetDate()吗?我试过了,但没用。有什么建议吗?
DATE(NOW())
应该可以。@Sloan Thrasher如果注册日期在后天通过,我需要做什么来修复我的if语句?我的if语句没有产生正确的结果。请参阅我的答案…-但是如果注册日期未超过当前日期,则不应显示错误消息。正确的?但事实确实如此。但是如果您的列是一个时间戳,其中包括时间,那么您需要删除日期和现在的时间部分。也就是说,如果您只想比较日期。My EnrolledDate是一种日期数据类型。您尝试过吗?如何取消日期的时间?