Mysql

觸發器跳過第一個插入

  • December 17, 2015

我面臨一個非常奇怪的問題,因為我在 tableA 上實現了一個觸發器,它確實加密數據並將數據插入另一個 tableB 並將列更新為 4 位。

問題是第一個插入以某種方式被跳過,它從第二個插入開始得到糾正,不知道為什麼第一個插入被跳過。任何幫助都會很棒。

os是Linux,MySQL版本是5.7.9

       create table tableA(c1 varchar(10));

   create table tableB(c1 varchar(60)); 

   delimiter //
       CREATE TRIGGER trig1 before INSERT
       ON  tableA FOR EACH ROW
       BEGIN
             IF LENGTH(LTRIM(RTRIM(new.c1))) > 4 then
               BEGIN
               insert into tableB(c1) select AES_ENCRYPT(new.c1,'test') from tableA;
               Set  new.C1 = RIGHT(LTRIM(RTRIM(new.C1)),4) ;       
                END;
          end if;
       END;
       //
delimiter ;

insert into tableA values('423423544');

select count(*) from tableA;--1
select count(*) from tableB;--0

我認為這是因為您從 tableA 中選擇。我想正確的方法是:

insert into tableB(c1) values (AES_ENCRYPT(new.c1,'test'));

所以,觸發器會變成這樣:

delimiter //
   CREATE TRIGGER trig1 before INSERT
   ON  tableA FOR EACH ROW
   BEGIN
         IF LENGTH(LTRIM(RTRIM(new.c1))) > 4 then
           BEGIN
           insert into tableB(c1) values (AES_ENCRYPT(new.c1,'test'));
           Set  new.C1 = RIGHT(LTRIM(RTRIM(new.C1)),4) ;       
            END;
      end if;
   END;
   //
delimiter ;

引用自:https://dba.stackexchange.com/questions/123979