mysql - 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 ;
解决方案
如果您正在运行 MySQL 8.0,我会推荐检查约束而不是触发逻辑。
alter table employee
add constraint chk_birthdate
check(year(birthdate) > 2003)
;
这会强制执行与触发器相同的检查,但语法要短得多,并且逻辑直接捆绑在表的定义中(因此在某种程度上更容易维护)。当尝试插入违规行时,您会收到以下错误消息:
Check constraint 'chk_birthdate' is violated.
推荐阅读
- r - 为什么在这个特定示例中 sapply 比 for 循环慢
- python - 尝试为模型构建数据输入时出现 StopIteration 错误
- arrays - 你将如何分割一个元素给出分区大小的numpy数组?
- sql - 查找没有特定子行的行
- aws-cdk - 使用 CDK 创建 ECR 存储库的最佳方法是什么?
- c# - 如何从 Unity 上的 C# 静态类获取当前文件夹
- sql - Sqlite 检查逗号分隔的数字字符串是否包含数字
- mysql - 从 mySQL 获取 HTML 重数据到 excel
- algorithm - 为什么二分查找 Log 的复杂度是以 2 为底的?
- chart.js - 圆环图未使用 csv 数据 chart.js 呈现