|NO.Z.00069|——————————|BigDataEnd|——|Java&MySQL索引/存储过程/触发器.V10|——|MySQL.v10|触发器介绍|

一、什么是触发器
### --- 什么是触发器

~~~     #  触发器(trigger)
——>     是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,
——>     它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,
——>     而是由事件来触发,比如当对一个表进行操作(insertdeleteupdate)时就会激活它执行。
——>     ——百度百科
~~~     # 简单理解: 
——>     当我们执行一条sql语句的时候,这条sql语句的执行会自动去触发执行其他的sql语句。
### --- 触发器创建的四个要素

——>        1. 监视地点(table)
——>        2. 监视事件(insert/update/delete)
——>        3. 触发时间(before/after)
——>        4. 触发事件(insert/update/delete
### --- 创建触发器
——>        语法格式

delimiter $ -- 将Mysql的结束符号从 ; 改为 $,避免执行出现错误
CREATE TRIGGER Trigger_Name -- 触发器名,在一个数据库中触发器名是唯一的
before/after(insert/update/delete-- 触发的时机 和 监视的事件
on table_Name -- 触发器所在的表
for each row -- 固定写法 叫做行触发器, 每一行受影响,触发事件都执行
begin
    -- begin和end之间写触发事件
end
$ -- 结束标记
### --- 向商品中添加一条数据

~~~     # 向商品中添加一条数据
INSERT INTO goods VALUES(1,'book',40);
### --- 需求: 在下订单的时候,对应的商品的库存量要相应的减少,卖出商品之后减少库存量。
——>        编写触发器

-- 1.修改结束标识
DELIMITER $
-- 2.创建触发器
CREATE TRIGGER t1
-- 3.指定触发的时机,和要监听的表
AFTER INSERT ON orders
-- 4.行触发器 固定写法
FOR EACH ROW
-- 4.触发后具体要执行的事件
BEGIN
    -- 订单+1 库存-1
    UPDATE goods SET num = num -1 WHERE gid = 1;
END$
### --- 查询 goods表中的数据

### --- 向订单表中添加一条数据

INSERT INTO orders VALUES(1,1,25);
### --- goods表中的数据随之 -1
二、sql语句
### --- sql语句

/*
    触发器
        当我们执行一条sql语句的时候,这条sql语句的执行会自动去触发执行其他的sql语句。
    
    触发器创建的四个要素
        1. 监视地点(table2. 监视事件(insert/update/delete)  
        3. 触发时间(before/after)  
        4. 触发事件(insert/update/delete) 
    
    创建触发器
    语法结构
        delimiter $ -- 自定义结束符号
        create trigger  触发器名
        after/before(insert/update/delete) -- 触发的时机 和监视的事件
        on tableName -- 触发器所在表
        for each row -- 固定写法 表示行触发器
        begin
            -- 被触发的事件
        end $
*/
-- 向商品表中插入数据
INSERT INTO goods VALUES(4,'book',40);
-- 需求: 在下订单的时候,对应的商品的库存量要相应的减少,卖出商品之后减少库存量
/*
    监视的表 orders
    监视的事件 insert
    触发的时间 after
    触发的事件 update
*/
-- 1.修改结束符号
DELIMITER $
-- 2.创建触发器
CREATE TRIGGER t1
-- 3.设置触发的时间 以及监视的事件 监视的表
AFTER INSERT ON orders
-- 4.行触发器
FOR EACH ROW
-- 5.触发后要执行的操作
BEGIN
    -- 执行修改库存的操作 订单+1 库存-1
    UPDATE goods SET num = num - 1 WHERE gid = 4;
END $
-- 向orders表插入一个订单
INSERT INTO orders VALUES(1,4,25);

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(20)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示