首页 > 解决方案 > MySQL:如何制作拒绝未成年员工的触发器?

问题描述

我想创建一个拒绝插入未成年员工的触发器,未成年我的意思是他的出生年份是 2004 年或更多。我编写了以下代码,它运行没有错误,但它不允许我插入任何员工,因为它说:错误:未知列 'BIRTHDATE' IN 'field list'

当我放下触发器时,一切正常。

DELIMITER $$
CREATE TRIGGER REJECT_EMP
BEFORE INSERT ON EMPLOYEE
FOR EACH ROW
BEGIN
    IF YEAR(BIRTHDATE) > 2003 THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'An error occurred';
    END IF;
END$$
DELIMITER ;

标签: mysqlsqldatetimetriggerssql-insert

解决方案


如果您正在运行 MySQL 8.0,我会推荐检查约束而不是触发逻辑。

alter table employee
    add constraint chk_birthdate
    check(year(birthdate) > 2003)
;

这会强制执行与触发器相同的检查,但语法要短得多,并且逻辑直接捆绑在表的定义中(因此在某种程度上更容易维护)。当尝试插入违规行时,您会收到以下错误消息:

Check constraint 'chk_birthdate' is violated.

推荐阅读