MySQL-触发器(trigger)-创建、查看、删除

触发器

触发器概述

1.触发器

  • 触发器(TRIGGER)是MySQL的数据库对象之一,
  • 触发器与编程语言中的函数类似,都需要声明、执行等。触发器的执行不是由程序调用也不是由工程师手工启动,而是由事件来触发、 激活从而得以执行。
  • 触发器的执行不是由程序调用,也不是手动启动,而是由事件来触发、激活从而得以执行。

2.触发器使用场景举例

(1)场景1

  • 班级表中有班级编号、学生总数
  • 学生表中有学号、性别、班级编号
  • 学生表中每新增一条记录,班级表中学生总数与之改变

(2)场景2

  • 用户表中有姓名、性别、邮箱、电话、地址等
  • 每次新增记录时,需要检查电话格式是否正确

(3)结论

  • 在表发生更改时, 自动进行相关处理

3.语句限制

  • 执行insert、update、delete、load data、replace可激活触发器,其他SQL语句则不行

创建触发器

1.语法

create trigger triggerName
before | after triggerEVENT on tableName for each row
begin
	triggerSTMT
end

2.参数解释

(1)create trigger

  • 表示创建触发器

(2)triggerName

  • 表示所创建触发器的名字

(3)before 和 after

  • 表示用于指定触发器执行的时机
    • before:触发器事件之前执行触发器语句
    • after:触发器事件之后执行触发器语句

(4)triggerEVENT

  • 表示触发器事件,即触发器执行条件
    • 触发器执行条件:insert、update、delete、load data、replace等
    • insert 和 replace 语句很像,若表中有 primary key 或 unique 索引时,如果插入的数据和原来 primary key 或 unique 索引一致时会先删除原来的数据,然后增加一条新数据。
  • MySQL中不能同时在一张表上建立相同类型的触发器。即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

(5)on tableName

  • 表示触发事件操作表名

(6)for each row

  • 表示任何一条记录上的操作满足触发事件时,都会触发该触发器

(7)begin … end

  • 触发器语法中的BEGIN … END其实与存储过程中BEGIN … END的使用是一样的

(8)triggerSTMT

  • 表示激活 触发器被执行的语句

3.示例代码

(1)数据准备

-- 创建学生表
DROP TABLE IF EXISTS student;
CREATE TABLE student (
	studentID INT,
  studentName VARCHAR(50),
	classID INT
);

-- 创建班级表
DROP TABLE IF EXISTS class;
CREATE TABLE class (
	classID INT,
	studentCount INT
);

-- 向班级表中插入数据
INSERT INTO class (classID,studentCount) VALUES (1,0);
INSERT INTO class (classID,studentCount) VALUES (2,0);
INSERT INTO class (classID,studentCount) VALUES (3,0);

(2)创建触发器

drop trigger if exists triggerName;
delimiter //
create trigger triggerName
after insert on student for each row
begin
	update class set studentCount = studentCount + 1 where classID=NEW.classID;
end //
delimiter ;
-- 向学生表中插入数据
insert into student(studentID,studentName,classID)
values(00001,'lilil',1);
-- 查询
select * from student;
select * from class;
  • NEW关键字。在MySQL中定义了NEW 和 OLD 表示了触发器在所在表中,触发了触发器的哪一行数据
    • 在INSERT型触发器中NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据
    • 在UPDATE型触发器中OLD 用来表示将要(BEFORE)或已经(AFTER)被修改的原数据,NEW用来表示将要(BEFORE)或已经(AFTER)修改的新数据
    • 在 DELETE 型触发器中OLD 用来表示将要(BEFORE)或已经(AFTER)被删除的原数据

查看触发器

show triggers;

删除触发器

1.语法

drop trigger [if exists] 触发器名称;

2.示例

drop trigger if exists triggerName;
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咸鱼不咸鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值