5

我有如下查询:

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 尚不支持“一个表具有相同操作时间和事件的多个触发器”

这个错误任何人都可以为此提供解决方案吗?

4

3 回答 3

8

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

于 2009-05-15T10:29:34.353 回答
1

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

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

于 2016-02-23T06:47:30.270 回答
0

是的,如果您同时使用具有不同触发器名称的相同事件,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;
$$ 
于 2013-05-03T13:59:48.877 回答