概述
触发器详解
触发器(trigger)也称为触发程序,是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete, update)时就会激活它执行。——百度百科
(一)触发器语法
触发器在MySQL数据库中的关键字TRIGGER,创建触发器的语法如下:
• TRIGGER:触发器是与表有关的数据库对象,当表上出现****特定事件****时,将激活该对象的操作。
• tbl_name:触发程序与命名为tbl_name的表相关。tbl_name必须引用永久性表。不能将触发程序与视图关联起来
• trigger_time:是触发程序的动作时间。它可以是BEFORE或AFTER,以指明触发程序是在激活它的语句之前或之后触发。
• trigger_event指明了激活触发程序的语句的类型。
trigger_event:可以是下述值之一:
• INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。
• UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。
• DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。
(二)触发器案例
商品购买生成订单,由于订单表的数据比较敏感,屏蔽其SQL操作,通过触发器将订单生成过程封装起来。
创建商品表、订单表:
初始化商品数据:
触发器需求:在购买商品时,修改商品库存数量,此时一旦库存数量发生更新,就自动生成订单:
补充: sql中声明局部变量
-- 格式:
declare 变量名 类型 [default 值]
-- 给变量赋值
set 变量名 = 值
-- delimiter 修改默认sql语句结束符
-- d 结束符
备注:由于MySQL一旦在语句中遇到;表示语句即刻执行
使用关键字DELIMITER 重 新 指 定 执 行 符 号 为 重新指定执行符号为 重新指定执行符号为,创建触发器的过程中直到遇到符号$$才会完整执行整段SQL语句,完成触发器的创建
执行SQL语句更新商品表中加湿器的库存数量
此时查询订单表,查看订单生成情况:
更新/购买的商品,已经形成订单,在订单表中存在了,并且更新了购买数量和小计金额。
练习:数据备份,当我们删除user表中的数据时,将删除的数据备份到,备份表
-- 练习:数据备份,当我们删除user表中的数据时,将删除的数据备份到,备份表
CREATE TRIGGER bak_trigger BEFORE DELETE ON user FOR EACH ROW
BEGIN
-- 向备份表添加数据 old 是触发器内置的一个对象 代表旧的数据对象
insert into bak_user(id,name,gender) values(old.id,old.name,old.gender);
END;
-- 删除user中的数据
delete from user where id in (3,4);
练习:定义一个触发器,记录user表中数据的条数
-- 练习:定义一个触发器,记录user表中数据的条数
-- 每当我添加一条数据,cc 表中的count +=1
CREATE TRIGGER count_num AFTER INSERT ON user FOR EACH ROW
BEGIN
UPDATE cc SET count=count+1 WHERE id=1;
END;
INSERT INTO user(name) values('66'),('77');
总结:
触发器,是给表去绑定的
触发器是由指定的事件 自动触发 (insert update delete)
触发器的触发时机: after before
格式:
CREATE TRIGREE 触发器的名字(自定义的) 触发时机(after/before) 事件类型(insert/update/delete) ON 表名 FOR EACH ROW
BEGIN
触发器处理的内容;
END;
最后
以上就是闪闪纸鹤为你收集整理的MySQL进阶--数据库的触发器详解触发器详解的全部内容,希望文章能够帮你解决MySQL进阶--数据库的触发器详解触发器详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复