欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

一篇帮你吃透 mysql 触发器的文章

最编程 2024-06-13 20:36:07
...

之前出了一篇文章讲触发器的,后来做了一些案例,发现当时写的文章太片面太官方了,以至于我在写期末项目时候,只会写列题变形,对于其他的,有一些不清楚。 那么我们就来重新认识一下触发器吧

触发器概述

触发器概述MySQL从5.0.2版本开始支持触发器。MySQL的触发器和存储过程一样,都是嵌入到MySQL服务器的一段程序。 触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE、DELETE事件。所谓事件就是指用户的动作或者触发某项行为。如果定义了触发程序,当数据库执行这些语句时候,就相当于事件发生了,就会自动激发触发器执行相应的操作。当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。

触发器创建

我们来看下触发器的创建的语法结构:

Create trigger 触发器名字
{before|after}{insert|update|delete} on 表名
for each row
触发器执行语句块

说明: 表名:表示触发器监控的对象。 BEFORE|AFTER:表示触发的时间。 BEFORE表示在事件之前触发; AFTER表示在事件之后触发。 INSERT|UPDATE|DELETE:表示触发的事件。 INSERT表示插入记录时触发; UPDATE表示更新记录时触发; DELETE表示删除记录时触发。 触发器执行的语句块:可以是单条SQL语句,也可以是由BEGIN…END结构组成的复合语句块。

案例

创建触发器,需要了解逻辑,当我们创建了某个触发器,我们在进行对应操作的事件会自动触发我们触发器里面的内容。

比如 建表

create tabel test_trigger(
   id int primary key auto_increment,
   t_note varchar(30)
);
create tabel test_trigger_log(
   id int primary key auto_increment,
   t_log varchar(30)
);

写触发器

create trigger brfore_insert 
brfore insert on test_trigger
for each row
begin
insert into test_trigger_log(t_log) values('insert ok.....');
end;

按照这个触发器,我们在对test——trigger表进行插入时候,会自动触发向log表里面插入"insert ok"的信息。

同理:对数据修改

create trigger brfore_update 
BEFORE update on test_trigger
for each row
begin
update test_trigger_log set t_log="update ok";
end;


update test_trigger set t_note=" vvvvv";

当我们修改test_trigger之前,我们会修改test_trigger_log里面的t_log;

删除:

create trigger after_delete
after delete on test_trigger
for each row
begin
update test_trigger_log set t_log="delete on";
end;



delete from test_trigger;

删除后,修改成xx

检查数据 比如插入之前,看看某个字段是不是合法的

创建触发器,保证表中的性别仅能男和女。
CREATE TRIGGER sex__check BEFORE INSERT ON student FOR EACH ROW
BEGIN
DECLARE xsex CHAR(5);
SET xsex=new.ssex;
IF(xsex='男' OR xsex='女')THEN
SET@choice=1;
ELSE
SET@choice=0;
INSERT INTO student VALUES(1);
END IF;
END;

优点:1.触发器可以确保数据的完整性。2.触发器可以帮助我们记录操作日志3.触发器还可以用在操作数据前,对数据进行合法性检查

缺点:1.触发器最大的一个问题就是可读性差。2.相关数据的变更,可能会导致触发器出错