我创建了两个表 customerbkp(客户备份)和另一个名为 customer 的表。 我的目的是复制客户表中所做的所有修改..
但是当我使用时代码无法编译
delimiter //
create trigger custtrig
before insert or update or delete on customer
for each row
//statements
我尝试了一些变体,因为我正在创建单独的触发器,下面的代码似乎在语法上是正确的,但它只在备份表中输入空值。 谁能解释一下为什么我会得到这个结果(即 null ),有什么方法可以记录我的备份表中的所有更改
create table customerbkp(cid int, cname varchar(25), cemail varchar(25), phone int, operation varchar(10));
create table customer(cid int, cname varchar(25), cemail varchar(25), phone int);
delimiter //
create trigger custtrig
before insert on customer
for each row
begin
insert into customerbkp(cid) values (cid);
end;
//
delimiter;
insert into customer values(101,'cust1','cust1@gmail.com',1111);
最佳答案
MySQL 不支持插入、更新或删除
。您需要创建 3 个单独的
触发器。
使用 AFTER xxx 而不是 BEFORE xxx 触发器,否则您将无法获得自动增量字段(或许还有其他字段)的值。
您插入的行仅包含 cid
值。您应该将其与所有值一起插入:
...
begin
INSERT INTO customerbkp(cid,cname,cemail,phone,operation)
VALUES (NEW.cid, NEW.cname, NEW.cemail, NEW.phone, 'insert');
end;
...
将'insert'
更改为每个触发器的适当值。此外,您还需要在 AFTER DELETE 触发器中使用 OLD
而不是 NEW
(或者可能有 NULL's...)。
关于Mysql 触发器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22915315/