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 ;
相关推荐
一只游鱼27 分钟前
langchain4j+mysql+历史记录
mysql·langchain4j
不爱写程序的东方不败1 小时前
MySQL出现慢查询或者主从延迟的问题,怎么做根因分析?
数据库·mysql
努力努力再努力wz2 小时前
【MySQL入门系列】掌握表数据的 CRUD:DML 核心语法与执行逻辑解析
android·开发语言·数据结构·数据库·c++·b树·mysql
chy000013 小时前
MySQL
mysql
ん贤3 小时前
数据库事务
数据库·mysql·事务
爱学习的小邓同学3 小时前
MySQL --- MySQL库和表的操作
数据库·mysql
zh_xuan4 小时前
Android gradle任务
android·gradle构建
Bert.Cai4 小时前
MySQL简介
数据库·mysql
摇滚侠4 小时前
Redis 和 MySQL 数据同步方案,ElasticSearch 和 MySQL 数据同步方案
java·redis·mysql
Grackers4 小时前
Android Perfetto 系列 10:Binder 调度与锁竞争
android·binder