【问题标题】:Why do I get an "This version of MySQL doesn't yet support '...'" error?为什么我会收到“此版本的 MySQL 尚不支持'...'”错误?
【发布时间】:2009-05-15 09:43:05
【问题描述】:

我有如下查询:

delimiter $$
DROP TRIGGER IF EXISTS TR_SCIN_BANK_UPD$$
CREATE TRIGGER TR_SCIN_BANK_UPD
AFTER UPDATE ON SCIN_BANK
FOR EACH ROW
BEGIN
  IF OLD.BANK_NAME != NEW.BANK_NAME THEN
    INSERT into SCIN_BANK_LOG SET BANK_ID=OLD.BANK_ID, BANK_NAME=OLD.BANK_NAME, LAST_UPD_USER_ID=OLD.LAST_UPD_USER_ID, LAST_UPD_TS=now();
  END IF;
  IF OLD.BANK_DESC != NEW.BANK_DESC THEN
    INSERT into SCIN_BANK_LOG SET BANK_ID=OLD.BANK_ID, BANK_DESC=OLD.BANK_DESC, LAST_UPD_USER_ID=OLD.LAST_UPD_USER_ID, LAST_UPD_TS=now();
  END IF;
END$$

执行时我得到

此版本的 MySQL 尚不支持“一个表具有相同动作时间和事件的多个触发器”

这个错误谁能提供解决方案?

【问题讨论】:

    标签: mysql sql mysql-error-1235


    【解决方案1】:

    我猜该表上已经有一个AFTER UPDATE 触发器,但它没有命名为TR_SCIN_BANK_UPD,这意味着您的DROP TRIGGER IF EXISTS 行什么都不做。

    【讨论】:

      【解决方案2】:

      将 Mysql 升级到 5.6.27 版本为我解决了这个问题:

      服务器版本:5.6.27-0ubuntu0.14.04.1 (Ubuntu)

      【讨论】:

        【解决方案3】:

        是的,如果您同时使用具有不同触发器名称的相同事件,mysql 不支持此功能。

        更好,为此你应该在这里使用 if 条件:如下所示:

        delimiter $$
        create trigger trigger_name
        AFTER insert
        on t1
        for each row
        begin
          if new.col1 like '%Sabcd%'
          then
            update t2 inner join t3 on t2.col1=t1.col1
            set t2.col2=0 ;
          end if;
          if new.col1 like '%dcba%'
          then
            update t2 inner join t3 on t2.col1=t1.col1
            set t2.col2=02;
          end if;
        end;
        $$ 
        

        【讨论】:

        • 它为我工作,先生..告诉我是什么让你这样想
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-01
        • 2013-06-19
        • 2021-04-27
        • 2021-01-21
        • 2013-07-17
        • 2018-06-22
        • 2016-01-01
        相关资源
        最近更新 更多