mysql 触发器小结

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 触发器可以监视某种数据操作(insert/update/delete)并触发(insert/update/delete)(创建触发器4要素监视地点 -----监视事件----触发时间----触发事件触发器:tri...
触发器可以监视某种数据操作(insert/update/delete)
并触发(insert/update/delete)(

创建触发器4要素
监视地点 -----监视事件----触发时间----触发事件

触发器:trigger:
需求:
我们有商品表goods,订单表 ord,当下一个订单时,对应的商品要减少

分析:
监视谁:ord表
监视动作:insert
触发事件:after
触发事件:goods表中库存减少事件,update

create trigger  t1
after
insert
on ord
for each row
begin
update goods xxxxx
end;

create table goods(
    gid int,
    name varchar(20),
    num smallint
);

create table ord(
    oid int,
    gid int,
    much smallint
);

insert into goods values
(1,'cat',34),
(2,'dog',65),
(3,'pig',21);

delimiter $
create trigger  t1
after
insert
on ord
for each row
begin
update goods set num=num-2 where gid=1;
end$

查看触发器:
show triggers \G
删除已有的triggers
drop trigger t1

insert(被监测的语句)产生的数据,能否在触发器中被引用
create trigger  t2
after
insert
on ord
for each row
begin
update goods set num=num-new.much where gid=new.gid;
end$

ERROR 1235 (42000): This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'


#在mysql编程中的for each row 是干什么的?
在oracle 触发器中,触发器分为语句级的触发器和行级触发器

比如
create trigger tn
after update
on xxtable
for each row  #每一行受影响,触发器都指行,叫做行级触发器
begin
    sqlN
end$
指行:update xxxtable se xxx=xxx where id>100;  影响100条
那么sqlN会被触发几次?100次

在oracle 中
for each 如果不写,
无论update语句一次影响了多少行,都只执行1次

mysql不支持语句级触发器。必须写上。





查看已有的triggers:show triggers
删除已有的triggers: drop trigger triggerName

撤回一个订单时:

create trigger t3
after
delete
on ord
for each row
begin
    update goods set num=num+old.much where gid=old.gid;
end$
#改订单数量
create trigger t4
before
update
on ord
for each row
begin
    update goods set num=num+old.much-new.much where gid=old.gid;
end$

思考:before 和after的区别
如果发生爆仓情况,如何处理呢?

#在t2的基础上,完成much 与num的判断
create trigger  t5
before
insert
on ord
for each row
begin
declare rnum int;
select num into rnum from goods where gid=new.gid;
if new.much>rnum then
    set new.much=rnum;
end if;

update goods set num=num-new.much where gid=new.gid;
end$
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
关系型数据库 MySQL
Mysql基础第二十八天,使用触发器
Mysql基础第二十八天,使用触发器
28 0
Mysql基础第二十八天,使用触发器
|
1月前
|
存储 SQL 关系型数据库
【MySQL 数据库】10、MySQL 的触发器
【MySQL 数据库】10、MySQL 的触发器
20 0
|
2月前
|
SQL 存储 关系型数据库
MySQL技能完整学习列表8、触发器、视图和事务——1、触发器(Triggers)的使用——2、视图(Views)的创建和使用——3、事务(Transactions)的管理
MySQL技能完整学习列表8、触发器、视图和事务——1、触发器(Triggers)的使用——2、视图(Views)的创建和使用——3、事务(Transactions)的管理
37 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL触发器 使用案例
MySQL触发器 使用案例
29 0
|
4月前
|
SQL 关系型数据库 MySQL
MySQL之如何使用触发器
MySQL之如何使用触发器
40 1
|
4月前
|
SQL 关系型数据库 MySQL
⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。
⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。
38 0
|
4月前
|
SQL 关系型数据库 MySQL
My Sql 触发器
My Sql 触发器
|
16天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)
|
5天前
|
关系型数据库 MySQL 数据库
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
28 4
|
29天前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 中apt 安装MySQL数据库
Ubuntu 中apt 安装MySQL数据库
69 0