Mysql
觸發器跳過第一個插入
我面臨一個非常奇怪的問題,因為我在 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 ;