doctor5999 2023-03-20 21:01 采纳率: 100%
浏览 14
已结题

mysql触发器语句问题


我想建一个触发器,当插入brxx表前,对插入的数据字段fbsj(data类型)进行处理,转化为“yy春”,通过newbing写出了下面的代码:

create trigger brxxfbjd
before insert on brxx 
for each row
BEGIN
    declare mm int;
    set mm=month(new.fbsj);
    case mm
    WHEN mm=3 OR mm=4 OR mm=5 THEN SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '春');
    WHEN mm=6 OR mm=7 OR mm=8 THEN SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '夏');
    WHEN mm=9 OR mm=10 OR mm=11 THEN SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '秋');
    else  SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '冬');
   END CASE;
END;

INSERT INTO brxx ( brmc, brxb, brqy, jbmc, fbsj ) 
VALUE
    ( 'xxx', '男', '浙江', '新冠', '2022-09-24' );
INSERT INTO brxx ( brmc, brxb, brqy, jbmc, fbsj ) 
VALUE
    ( 'xyz', '男', '浙江', '新冠', '2021-05-12' );
INSERT INTO brxx ( brmc, brxb, brqy, jbmc, fbsj ) 
VALUE
    ( 'wxy', '男', '浙江', '新冠', '2022-07-2' );

但是插入数据后fbjd全是冬
如图
​​

img

这是为什么?这个触发器应该怎么改?

  • 写回答

2条回答 默认 最新

  • David1055259499 2023-03-20 21:13
    关注

    触发器中出现问题的是 CASE 语句中的判断条件,应该是 WHEN mm=3 OR mm=4 OR mm=5 而不是 WHEN mm=3 OR mm=4 OR mm=5 THEN。因此,每个分支都会被执行,导致最终结果是最后一个分支所设置的结果。

    以下是修改后的代码:

    CREATE TRIGGER brxxfbjd
    BEFORE INSERT ON brxx 
    FOR EACH ROW
    BEGIN
        DECLARE mm INT;
        SET mm = MONTH(NEW.fbsj);
        CASE
            WHEN mm = 3 OR mm = 4 OR mm = 5 THEN
                SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '春');
            WHEN mm = 6 OR mm = 7 OR mm = 8 THEN
                SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '夏');
            WHEN mm = 9 OR mm = 10 OR mm = 11 THEN
                SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '秋');
            ELSE
                SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '冬');
        END CASE;
    END;
    
    
    

    在上述代码中,判断条件已被纠正,以避免所有情况都被执行的问题。请注意,使用 WHEN 关键字后不需要加上 THEN。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 3月20日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装