Mysql 触发器问题

标签 mysql database triggers

我创建了两个表 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/

相关文章:

PHP 检查 SQL 条目是否存在会产生不同的输出

mysql - 改变当前的 MySql 查询以根据 id 组合结果

mysql - macOS 上 my.cnf 文件的位置

数据库、表和列命名约定?

sql-server - SQL Server - 为用户创建一个新数据库,只授予他们对该数据库的访问/查看权限

php - 设置证书验证位置时出错 - PayPal IPN Listener

mysql - 使用单个查询将 id 替换为名称

mysql - mysql 触发器编译但在必要时不会触发

sql - 更新触发中的更新语句是否会再次触发?

postgresql - 事务——Oracle 与 PostgreSQL