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 ;
相关推荐
贺biubiu2 小时前
2025 年终总结|总有那么一个人,会让你千里奔赴...
android·程序员·年终总结
xuekai200809013 小时前
mysql-组复制 -8.4.7 主从搭建
android·adb
nono牛4 小时前
ps -A|grep gate
android
萧曵 丶4 小时前
MySQL 主键不推荐使用 UUID 的深层原因
数据库·mysql·索引
未知名Android用户5 小时前
Android动态变化渐变背景
android
nono牛6 小时前
Gatekeeper 的精确定义
android
kaico20187 小时前
MySQL的索引
数据库·mysql
stevenzqzq7 小时前
android启动初始化和注入理解3
android
资生算法程序员_畅想家_剑魔8 小时前
Mysql常见报错解决分享-01-Invalid escape character in string.
数据库·mysql
霖霖总总9 小时前
[小技巧14]MySQL 8.0 系统变量设置全解析:SET GLOBAL、SET PERSIST 与 SET PERSIST_ONLY 的区别与应用
数据库·mysql