MySQL触发器

1.创建第一个触发器

sql 复制代码
mysql> delimiter //
mysql> create trigger after_insert_orders_trigger
    -> after insert on orders for each row
    -> begin
    ->      update goods set num=num-new.enum where gid=new.gid;
    -> end //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

验证触发器是否能实现预期效果

sql 复制代码
mysql> insert into orders (gid,name,price,enum,otime) values ('A0001','橡皮',2.5,10,now());

向订单表插入一条购买订单后,商品表触发更新(橡皮的数量从100减到90)

2.创建第二个触发器

sql 复制代码
mysql> delimiter //
mysql> create trigger after_delete_orders_trigger
    -> after delete on orders for each row
    -> begin
    ->      update goods set num=num+old.enum where gid=old.gid;
    -> end //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

验证触发器是否能实现预期效果(删除刚刚创建的订单,橡皮的库存数恢复100)

3.创建第三个触发器

sql 复制代码
mysql> delimiter //
mysql> create trigger after_update_orders_trigger
    -> after update on orders for each row
    -> begin
    ->      update goods set num=num+old.enum where gid=old.gid;
    ->      update goods set num=num-new.enum where gid=new.gid;
    -> end //
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

验证触发器是否能实现预期效果

sql 复制代码
插入一个订单
mysql> insert into orders (gid,name,price,enum,otime) values ('B0001','小楷
本',2.8,20,now());
Query OK, 1 row affected, 1 warning (0.00 sec)

更新订单信息
mysql> update orders set enum=100 where oid=4;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
sql 复制代码
删除订单信息(小楷本的库存恢复为210)
mysql> delete from orders where oid=4;
Query OK, 1 row affected (0.01 sec)

4.创建存储过程proc001

sql 复制代码
mysql> delimiter //
mysql> create procedure proc001()
    -> begin
    ->      select name,incoming from emp_new;
    -> end //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

5.创建存储过程proc002

sql 复制代码
mysql> delimiter //
mysql> create procedure proc002(in emp_name varchar(50))
    -> begin
    ->     select age from emp_new where name=emp_name;
    -> end //
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

6.创建存储过程proc003

sql 复制代码
mysql> delimiter //
mysql> create procedure proc003(in dept_id int,out avg_incoming decimal(10,2))
    -> begin
    ->    select round(avg(incoming),2) into avg_incoming from emp_new where deptt2=dept_id;
    -> end //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
相关推荐
三少爷的鞋36 分钟前
Android 架构指南:suspend 如何响应取消?别再给 Repository 加 `cancel()`
android
迪飞特科技1 小时前
【无标题】
android·人工智能·本地化大模型
FlightYe2 小时前
视界原理之2D视频(二):视频文件里有什么
android·linux·网络·c++·ffmpeg·音视频·aac
传奇开心果编程2 小时前
【Flutter入门练中学】第8课:动画与过渡
android·学习·flutter·ui·ios
数据库小学妹3 小时前
MySQL大表怎么优化?2亿行表的分区归档与冷热分离实战
数据库·mysql·分库分表·分区表·数据库运维·冷热分离
传奇开心果编程4 小时前
【Flutter入门练中学】第11课:状态管理进阶与声明式路由
android·学习·flutter·ui·ios
这个DBA有点耶4 小时前
连接池与MySQL交互实战:连接风暴、连接泄漏与连接状态异常排查
数据库·mysql·架构
JasonSJX4 小时前
四端自建播放器怎么落地:Android、iOS、tvOS、Tizen 的 DRM 播放 SDK 技术盘点
android·ios·音视频·视频防录屏·加密保护课程·直播安全
需要8264 小时前
MySQL MVCC 与事务隔离级别:从一条 update 看版本链
java·数据库·spring boot·mysql·spring cloud
驰骋工作流4 小时前
工作流引擎四大流程模块功能点统计:769 项能力清单梳理低代码工作流引擎表单
android·低代码·rxjava