lintcode-2577 · 数据更新备份触发器
        【摘要】 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。 描述请为教师表 teachers 设计一个触发器,当 teachers 更新数据时,将旧的数据复制到结构相同的备份表 teachers_bkp 中表定义:teachers(教师表)列名类型注释idint unsigned主键namevarchar讲师姓名emailvarchar讲师邮箱ageint讲师年龄countryvarchar...
    
    
    
    - 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
描述
请为教师表 teachers 设计一个触发器,当 teachers 更新数据时,将旧的数据复制到结构相同的备份表 teachers_bkp 中
表定义:teachers(教师表)
| 列名 | 类型 | 注释 | 
|---|---|---|
| id | int unsigned | 主键 | 
| name | varchar | 讲师姓名 | 
| varchar | 讲师邮箱 | |
| age | int | 讲师年龄 | 
| country | varchar | 讲师国籍 | 
表定义:teachers_bkp(备份表)
| 列名 | 类型 | 注释 | 
|---|---|---|
| id | int unsigned | 主键 | 
| name | varchar | 讲师姓名 | 
| varchar | 讲师邮箱 | |
| age | int | 讲师年龄 | 
| country | varchar | 讲师国籍 | 
样例
表内容1:teachers
| id | name | age | country | |
|---|---|---|---|---|
| 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’ | None | 18 | ‘CN’ | 
表内容2:teachers_bkp
| id | name | age | country | 
|---|
返回结果:
| id | name | age | country | |
|---|---|---|---|---|
| 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’ | None | 18 | ‘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
            【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
                cloudbbs@huaweicloud.com
                
            
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)