MYSQL编写触发器如何获取星期几 实现周末禁止插入数据功能?
MySQL 周末禁止插入触发器实现说明
原代码存在的核心问题
你写的代码是 SQL Server 语法,完全不兼容 MySQL,除此之外还有几处逻辑错误:
- 触发器时机选择错误:
AFTER INSERT是数据已经写入表后才触发,此时回滚会产生不必要的性能开销,应该用BEFORE INSERT在写入前拦截 - 变量未赋值就判断:你声明了
@dayName但没有给它赋值,变量始终是空值,判断条件永远不会触发 - 错误抛出语法不兼容:MySQL 没有
RAISERROR语法,抛出自定义错误需要用SIGNAL语句
MySQL 获取星期几的方法
有两种常用方案:
DAYNAME(CURDATE()):直接返回当前日期的星期英文名称,和你原本的逻辑匹配DAYOFWEEK(CURDATE()):返回数字,周日对应1、周六对应7,不受数据库系统语言影响,兼容性更好
正确的触发器代码
-- 临时修改语句分隔符,避免触发器内的分号被提前解析 DELIMITER // CREATE TRIGGER t1 BEFORE INSERT ON contact FOR EACH ROW BEGIN -- 直接用DAYOFWEEK判断更稳妥,不用额外声明变量 IF DAYOFWEEK(CURDATE()) IN (1,7) THEN -- 抛出自定义错误,插入操作会自动终止,不需要手动回滚 SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'data insertion is prohibited in weekends.'; END IF; END // -- 改回默认的分号分隔符 DELIMITER ;
如果你更习惯用星期名称判断,也可以把判断条件替换为:
IF DAYNAME(CURDATE()) IN ('Saturday','Sunday') THEN
内容的提问来源于stack exchange,提问作者PHP Beginner
相关产品推荐
相关产品推荐

