You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:24:03