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 ;
相关推荐
好的佩奇9 小时前
Dart 之扩展方法
android·flutter·dart
.痞老板.9 小时前
mysql初阶--增删改查操作
数据库·mysql
三少爷的鞋10 小时前
换个思路理解:非阻塞挂起
android
好的佩奇11 小时前
蓝牙之经典蓝牙
android·flutter·蓝牙
传奇开心果编程13 小时前
【Flutter踩坑排雷】第19课:路由硬编码坑|字符串路由书写错误,页面跳转失败排查
android·flutter·ios·移动开发·跨平台·ui框架·声明式ui
浮生若城16 小时前
MySQL:库与表的操作
数据库·mysql
微小的鱼16 小时前
Linux的渲染与显示系统链路
android·java·linux
道尔柯南1 天前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
唐诺1 天前
5、Android JNI 动态注册中的“签名“详解
android·jni
翔云1234561 天前
RocksDB中,客户端每写入一次数据,需要访问几次磁盘
运维·数据库·mysql