和顺网站建设,网络优化工具,山东省建设备案网站审批,做后期哪个网站素材好一、什么是触发器#xff1f;
1.概念#xff1a;
简单来说触发器就是一种特殊的存储过程#xff0c;在数据库服务器触发事件的时候会自动执行其SQL语句集。
2.构成四要素#xff1a;
#xff08;1#xff09;名称#xff1a;要符合标识符命名规则
#xff08;2
1.概念
简单来说触发器就是一种特殊的存储过程在数据库服务器触发事件的时候会自动执行其SQL语句集。
2.构成四要素
1名称要符合标识符命名规则
2定义的目标必须要定义在表上或者视图上
3触发逻辑触发事件之后如何处理
4触发事件类型 在MySQL中,触发器有时候需要同时表示某个字段更新前后的数据或者新增的、删除的数据。因此 “NEW.列名”表示新增数据行的列或更新后的列“OLD.列名”表示更新或删除它之前的已有行的列 触发事件类型NEW和OLD的使用INSERTNEW表示将要或者已经新增的数据UPDATEOLD用来表示将要或者已经被删除的数据NEW表示将要或者已经修改的数据DELETEOLD表示将要或者已经被删除的数据 3.种类
触发器类型描述Before触发器在触发事件发生之前执行的触发器After触发器在触发事件发生之后执行的触发器 4.与存储过程的区别
两者最明显的区别就是调用执行方式的不同。
触发器 主要是通过事件进行触发而被执行的具有极强的及时性代码量也不大无需人工手动干预去执行。 因而也具有一定的缺点就是性能不高因为触发器基于行的变化而触发所以增删改的操作可能都会激活触发器可移植性不高就和存储过程一样也就是创建好后若是想要去更改里面触发事件执行的SQL语句集是修改不了的只能通过删掉重建 存储过程可以通过存储过程名字结合CALL语句而被直接调用。 二、触发器的作用是什么
简单一句话来说就是用于强制执行业务规则和数据完整性.
1强化约束能够实现比约束更为复杂的业务规则约束
2跟踪变化侦测数据库内的操作从而不允许数据库中未经许可的指定更新和变化以防止恶意的或者不正确的插入、更新和删除操作
3级联运行可以侦测数据库内的操作自动地级联影响整个数据库的相关内容
4差异记录触发器能够找出某一表在数据修改前后状态发生的差异。并且还可以根据差异执行相应的处理 三、MySQL语句创建、查看验证、删除触发器
1.创建触发器
MySQL创建触发器语句的语法如下
CREATE TRIGGER trigger_name trigger_time trigger_eventON tb_name FOR EACH ROW trigger_stmt a. trigger_name触发器名称。 b.trigger_time触发时机。也就是选择哪一种触发器可以是Before也可以是After表示触发器是在激活其语句之前还是之后触发。 c.trigger_event触发事件类型。 d.tb_name建立触发器的基础表。这里要注意的是同一个表不能拥有两个具有相同触发时机和事件的触发器如果出现两个相同的那么在语句激活的时候系统此时不是不知道选择哪一个触发器去执行相应操作而是会两个一起执行。 e.FOR EACH ROW表示受触发器影响的每一行激活触发器的动作。比如对于插入多行数据的sql语句触发器便会对要插入数据的行执行相应的触发器操作。 f.trigger_stmt触发器的程序体也就是触发器激活时要执行的语句集。当需要执行多条语句的时候需要使用Begin开始标志和End结束标志。 2.查看验证触发器
MySQL查看所有触发器情况语句的语法如下
SHOW TRIGGERS;SELECT * FROM information_schema.triggers WHERE TRIGGER_NAMEtrigger_name;
其中trigger_name表示要查看的触发器的名称。 3.删除触发器
MySQL删除触发器语句的语法如下
DROP TRIGGER 触发器名 四、例题演练 1、创建一个触发器tr_delb 在图书管理系统中若删除书籍信息bookinfo 表时需同时删除所有该书籍的借阅信息BookLended 表。需实现上述功能且需通过数据进行验证。 delimiter //
create trigger tr_delb After delete
on bookinfo FOR EACH ROW
begin
delete from booklended where bookidold.bookid;
end //
delimiter; 1创建成功 2删除操作前两张表 3删除操作后两张表 delete from bookinfo where bookname数据库系统原理及应用; 2、创建一个触发器tr_upnum。 在图书管理系统中若插入书籍借阅信息BookLended 表时需同时更新读者表reader中该读者的借阅书籍本数num字段在原有借阅书籍本数上加1。需实现上述功能且需通过数据进行验证。 delimiter //
create trigger tr_upnum After insert
on booklended FOR EACH ROW
begin
update reader set numnum1 where readeridnew.readerid;
end //
delimiter; 1创建成功 2添加信息前两张表 3添加信息后两张表 mysql insert into booklended(bookid,readerid,lendtime,backtime) values (21-03-01-012024,1000003112,now(),now()); ps这里因为之前创建了一个重名的触发器也是执行相应操作数据才会加了两次