lintcode-2577 · 数据更新备份触发器

392 阅读1分钟

描述

请为教师表 teachers 设计一个触发器,当 teachers 更新数据时,将旧的数据复制到结构相同的备份表 teachers_bkp 中

表定义:teachers(教师表)

列名类型注释
idint unsigned主键
namevarchar讲师姓名
emailvarchar讲师邮箱
ageint讲师年龄
countryvarchar讲师国籍

表定义:teachers_bkp(备份表)

列名类型注释
idint unsigned主键
namevarchar讲师姓名
emailvarchar讲师邮箱
ageint讲师年龄
countryvarchar讲师国籍

样例

表内容1:teachers

idnameemailagecountry
1'Eastern heretic''eastern.heretic@gmail.com'20'UK'
2'Northern Beggar''northern.beggar@qq.com'21'CN'
3'Western Venom''western.venom@163.com'28'USA'
4'Southern Emperor''southern.emperor@qq.com'21'JP'
5'Linghu Chong'None18'CN'

表内容2:teachers_bkp

idnameemailagecountry

返回结果:

idnameemailagecountry
1'Southern Emperor''southern.emperor@qq.com'21'JP'
2'Western Venom''western.venom@163.com'28'USA'
3'Eastern heretic''eastern.heretic@gmail.com'20'UK'
4'Linghu Chong'None18'CN'

题解

在mysql 中,可以使用 CREATE TRIGGER 语句创建触发器。

具体的语法格式如下:

CREATE TRIGGER <触发器名> < BEFORE | AFTER >
<INSERT | UPDATE | DELETE >
ON <表名> FOR EACH Row<触发器主体>

触发的事件是update,=>after update on teachers for each row.更改表中某一行数据时激活触发器

这里判断字段的值有没有变化,只要其中的一个值发生了变化,就会去执行insert into语句,把数据插入到teachers_bkp中。

create trigger after_teachers_update
after update on teachers for each row
begin
    if new.id != old.id or
    new.name !=old.name or 
    new.email!=old.email or 
    new.age!=old.age or 
    new.country != old.country then
        insert into teachers_bkp(name,email,age,country)
        values(old.name, old.email, old.age, old.country);
    end if;
end