MySQL进阶:触发器

-- 触发器(trigger)
/*触发器是与表有关的数据库对象,指在insert/update/delete之前(BEFORE)或之后(AFTER),触
发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性
, 日志记录 , 数据校验等操作 。
*/

/*
使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还
只支持行级触发,不支持语句级触发。
 */

-- 创建按触发器
create trigger trigger_insert
    after insert on employee for each row
    begin
        declare c int;
        declare a date;
        set c = (select id from employee where id = NEW.id);
        insert into log values(NEW.id,new.name,now());
    end;

desc employee;

-- 创建日志表
create table Log(
    id int comment '日志id',
    name varchar(30) comment '姓名',
    date date comment '发生时间'
);
alter table log change date datetime datetime comment'发生时间';

-- 查看触发器
show triggers ;

-- 测试触发器
insert into employee values(11,'李白',559,'男','宣传部',2450,2);
insert into employee values(13,'岳飞',35,null,null,null,null);
insert into employee values(14,'高俅',48,null,null,null,null);

select * from log;
select * from employee;

li练习
-- 创建触发器,在employee表中删除员工信息的同时将salary表中该员工的信息删除,以确保数据完整性。
-- 创建完后尝试删除employee表中的一行数据,然后查看salary表中的变化情况
create trigger trigger_delete
   after delete on employee for each row
    begin
        delete from salary where salary.employeeID = OLD.employeeID;
    end;

-- 测试删除一条数据
delete from employee where employeeID = '000001';
select * from employee;
select * from salary;

-- 当修改employee表时,若将employee表中的员工工作时间增加一年,则将收入增加500,增加两年则收入增加1000,以此类推
create trigger trigger_update
    after update on employee for each row
    begin
        declare n int;
        set n = (select new.workYear)-(select old.workYear);
        update salary set income =500*n+income where employeeID = new.employeeID;
    end;

-- 测试更新薪资
update employee set workYear = workYear-2 where employeeID = '000001';
select * from salary;
select * from  employee;

desc employee;
-- 恢复数据
insert into employee values('000001','王浩','大专','1966-01-23',1,8,'中山路32号','83355668','2');
insert into salary values('000001',2100.8,123.09);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL触发器是一种在特定事件发生时自动执行的数据库对象。它们可以用于在表上插入、更新或删除数据时执行特定的操作。当你想要在数据库中行更复杂的逻辑处理时,触发器是非常有用的。 以下是一些MySQL触发器概念和用法: 1. 触发器的语法:创建触发器时,你需要指定触发器的名称、触发器所在的表、触发器事件(如INSERT、UPDATE或DELETE),以及触发器要执行的动作。触发器可以在BEFORE或AFTER事件之前或之后触发。 2. NEW和OLD关键字:在触发器中,你可以使用NEW和OLD关键字来引用插入、更新或删除的数据。NEW关键字表示插入或更新后的数据行,而OLD关键字表示被更新或删除之前的数据行。 3. 触发器的类型:MySQL支持BEFORE和AFTER两种类型的触发器。BEFORE触发器在事件之前执行,可以用于修改即将插入、更新或删除的数据。AFTER触发器在事件之后执行,可以用于记录日志或执行其他操作。 4. 触发器的事件:触发器可以与INSERT、UPDATE和DELETE事件相关联。例如,你可以创建一个AFTER INSERT触发器,在每次插入新行时执行某些操作。 5. 触发器的应用场景:触发器可以用于实现数据完整性约束、自动更新关联数据、记录审计信息等。例如,你可以创建一个BEFORE INSERT触发器来验证插入的数据是否符合特定的规则。 总之,MySQL触发器是一个强大的工具,可以在特定事件发生时自动执行操作。通过触发器,你可以实现更

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快阁东西倚晚晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值