我面临一个非常奇怪的问题,因为我在 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'));
所以,触发器会变成这样: