【问题标题】:MySQL Trigger and Error Code 1362MySQL 触发器和错误代码 1362
【发布时间】:2015-06-15 15:26:14
【问题描述】:

所以我对触发器有以下查询:

DELIMITER $$
CREATE TRIGGER user_log_update BEFORE UPDATE on user_log
FOR EACH ROW
BEGIN
insert into user_log
(id, user_id, name, username, password, email, user_type_id, created)
VALUES(OLD.id, OLD.user_id, OLD.name, OLD.username, OLD.password, OLD.email, OLD.user_type_id, OLD.created);
IF (OLD.id = 1) THEN
SET OLD.id = OLD.id +1;
END IF;
SELECT * FROM user_log;
END$$
DELIMITER ;

当我尝试执行这部分脚本时,我得到Error Code: 1362. Updating of OLD row is not allowed in trigger

我不知道为什么会出现这个错误,我也没有发现语法有任何问题。

有人知道怎么解决吗?

【问题讨论】:

    标签: mysql triggers mysql-workbench


    【解决方案1】:

    所以,改为增加new

    DELIMITER $$
    CREATE TRIGGER user_log_update BEFORE UPDATE on user_log
    FOR EACH ROW
    BEGIN
        insert into user_log(id, user_id, name, username, password, email, user_type_id, created)
            VALUES(OLD.id, OLD.user_id, OLD.name, OLD.username, OLD.password, OLD.email, OLD.user_type_id, OLD.created);
        IF (OLD.id = 1) THEN
            SET NEW.id = OLD.id +1;
        END IF;
    END$$
    DELIMITER ;
    

    【讨论】:

    • 如何处理“错误代码:1415。不允许从触发器返回结果集”?
    • 删除最后的select,就像我刚刚做的那样。
    【解决方案2】:
     delimiter |
    create trigger display_student_table 
            before insert on student_table
            for each row
    
    Begin
        set new.student_name=trim(new.student_name);
        set new.branch=trim(new.branch);
        set new.address=trim(address);
    End ;
    
    |
        delimiter ;
    

    【讨论】:

    • 请避免仅使用代码回答。请添加一些解释,这段代码的作用以及为什么它是问题的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    相关资源
    最近更新 更多