mysql(创建/修改删除)触发器(含实战练习)

本文深入探讨MySQL触发器的创建、修改和删除,包括INSERT、UPDATE、DELETE触发器的应用场景及注意事项,通过具体实例演示如何利用触发器保护和操作数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博文源于mysql基础,旨在对触发器的创建/修改删除做学习与相应练习。
完成此章节的学习,需要创建如下表

create table tb_emp8(id int(11) primary key,
name varchar(22) unique,deptId int(11) not null,
salary float default 0,
constraint fk_emp_dept1 foreign key(deptId) references tb_dept1(id));

CREATE TABLE tb_emp6(id INT(11) PRIMARY KEY,name VARCHAR(25),
deptId INT(11),salary FLOAT);



 CREATE TABLE tb_emp7(id INT(11) PRIMARY KEY,name VARCHAR(25),deptId INT(11),
 salary FLOAT default 0);

为什么要使用触发器

触发器是被指定关联到一个表的数据库对象,当一个表的特定事件发生时,它将会被激活。主要用于保护表中的数据。mysql所支持的触发器一共有三种:INSERT触发器、UPDATE触发器、DELETE触发器.

INSERT触发器

在INSERT语句执行之前或之后响应的触发器。应注意如下:

  • 对于AUTO_INCREMENT列,NEW在INSERT执行之前包含的值是0,在INSERT执行之后将包含新的自动生成值

UPDATE触发器

在UPDATE语句执行之前或之后响应的触发器。应注意如下:

  • 在UPDATE触发器代码内,可引用一个名为NEW(不区分大小写)的虚拟表来访问更新的值。
  • 在BEFORE UPDATE触发器中,NEW中的值也可以被更新,即允许更改将要用于UPDATE语句中的值(只要具有对应的操作权限)
  • OLD的值全部是只读的,不能被跟新。
  • 在UPDATE触发器代码内,可引用一个名为OLD(不区分大小写)的虚拟表来访问UPDATE语句执行前的值。

DELETE触发器

在DELETE语句执行之前或之后响应的触发器。应注意如下:

  • OLD的值全部是只读的,不能被跟新。
  • 在DELETE触发器代码内,可引用一个名为OLD(不区分大小写)的虚拟表来访问被删除的行。

创建触发器

基本语法

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

创建BEFORE类型触发器

例子:数据表tb_emp8为员工信息表,包含id、name、deptId和salary字段,创建一个名为SumOfSalary的触发器,触发的条件是向数据表tb_emp8中插入数据之前,对新插入的salary字段值进行求和计算

需要先创建表

create table tb_emp8(id int(11) primary key,
name varchar(22) unique,deptId int(11) not null,
salary float default 0,
constraint fk_emp_dept1 foreign key(deptId) references tb_dept1(id));
create trigger SumOfSalary
before insert on tb_emp8
for each row
set @sum = @sum + NEW.salary;


SET @sum=0;
insert into tb_emp8 values(1,'A',1,1000),(2,'B',1,500);
select @sum;

在这里插入图片描述

创建AFTER类型触发器

例子:创建一个名为double_salary的触发器,触发的条件是向数据表tb_emp6中插入数据之后,再向数据表tb_emp7中插入相同的数据,并且salary为tb_emp6中新插入的salary字段值的2倍
 create trigger double_salary after insert on tb_emp6 
 for each row 
 insert into tb_emp7 values (NEW.id,NEW.name,NEW.deptId,2*NEW.salary);


 insert into tb_emp6 values(9,'C',1,6000);

在这里插入图片描述

修改和删除触发器

修改触发器就是删掉重新再创建。

基本语法

DROP TRIGGER [IF EXISTS] [数据库名] <触发器>

删除触发器

例子:删除double_salary触发器
 drop trigger double_salary;

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值