MySQL—触发器(Trigger)(十三)

一、触发器(Trigger)

触发器(Trigger):是由事件来出发某个操作。这些事件包括insert语句、update语句和delete语句。当数据库系统执行这些操作的时候,就会激发触发器执行相应的操作。
 

1 创建只有一个执行语句的触发器

创建语句:

CREATE TRIGGER 触发器名 before | after 触发器事件
ON 表名 FOR EACH ROW 执行语句

1> 触发器名:给创建的触发器起的名字
2> before:指在触发事件之前执行触发器语句
3> after: 在触发事件之后执行触发器语句
4> 触发事件:指触发的条件,其中包括insert、update和delete
5> 表名:指触发事件操作的表的名称
6> FOR EACH:表示任何一条记录上的操作满足触发事件都会触发该触发器
7> 执行语句:指触发器被触发后执行的程序

1.1 案例举例

-- 创建教师表
CREATE TABLE teacher(
tea_num VARCHAR(10) PRIMARY KEY COMMENT "教师编号",-- 主键
name VARCHAR(30) COMMENT "姓名",
gender CHAR(2) COMMENT "性别",
age INT COMMENT "年龄",
department VARCHAR(30) COMMENT "部门",
institute VARCHAR(50) COMMENT "学院",
salary DECIMAL(10,2) COMMENT "薪水",
hire_date date COMMENT "入职时间"
)ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;

-- 创建trigger_time表
CREATE TABLE trigger_time(
tri_time datetime
);

-- 1.1.1 创建触发器tea_trig1
CREATE TRIGGER tea_trig1 before INSERT
ON teacher FOR EACH ROW
INSERT INTO trigger_time VALUES(NOW());

-- 1.1.2 测试触发器tea_trig1
INSERT INTO teacher VALUES("100001","旗木卡卡西","男",30,"综合科","火影学院",2000.56,"1988-12-21");

-- 验证触发器是否执行
SELECT * FROM trigger_time;

-- 查看表信息
SELECT * FROM teacher;

2 创建有多个执行语句的触发器

创建语句:

CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
     执行语句列表
END

2.1 案例举例

-- 2.1.1 创建触发器tea_trig2
DELIMITER $
CREATE TRIGGER tea_trig2 AFTER DELETE
ON teacher FOR EACH ROW
BEGIN
INSERT INTO trigger_time VALUES('2023-01-01 20:20:20');
INSERT INTO trigger_time VALUES('2023-01-01 20:08:08');
END $

-- 2.1.2 测试tea_trig2
DELETE FROM teacher WHERE tea_num = "100001";

/*
注意:MYSQL中,一个表在相同触发时间的相同触发条件,只能创建一个触发器。例如,teacher表中触发事件insert,触发时间为before的触发器
			只能有一个。但是,可以定义触发器事件为insert的after的触发器。
*/

3 查看触发器

-- 3 查看触发器
-- 3.1 show triggers语句查看触发信息
SHOW TRIGGERS;

-- 3.2 在triggers表中查看触发器
-- 在mysql中,所有触发器的定义都在infromation_schema数据库下的triggers表中,查询triggers表,可以查看到数据库中所有触发器的详细信息
-- 3.2.1 查看所有触发器
SELECT * FROM information_schema.triggers;

-- 3.2.2 查看指定触发器
SELECT * 
FROM information_schema.triggers 
WHERE TRIGGER_NAME = 'tea_trig1';

4 触发器的使用

-- 4 触发器的使用
-- 在mysql中,触发器的顺序是before触发器、表操作(insert、update、delete)和after触发器
CREATE TABLE trigger_test(
info VARCHAR(50)
);

-- 4.1 创建两个触发器
-- 创建before_insert触发器
CREATE TRIGGER before_insert BEFORE INSERT
ON teacher FOR EACH ROW
INSERT INTO trigger_test VALUES("before_insert");
-- 创建after_insert触发器
CREATE TRIGGER after_insert AFTER INSERT
ON teacher FOR EACH ROW
INSERT INTO trigger_test VALUES("after_insert");

-- 4.2 测试触发器
INSERT INTO teacher VALUES("1000001","旗木卡卡西","男",30,"综合科","火影学院",2000.56,"1988-12-21");

 5 删除触发器

-- 5 删除触发器 语法:drop trigger 触发器名
DROP TRIGGER before_insert;
DROP TRIGGER after_insert;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值