Mysql触发器

创建触发器

delimiter $ 把mysql结束符号 变成$
CREATE TRIGGER <触发器名称>        <-----触发器名字
{ BEFORE | AFTER }                <-----触发时间
触发时间:触发器有执行的时间设置:可以设置为事件发生前或后
{ INSERT | UPDATE | DELETE }
ON <表名称>       <-----表名称
触发器是属于某一个表的:当在这个表上执行插入、更新或删除操作的时候就导致触发器的激活,我们不能给同一张表的同一个事件安排两个触发器。
FOR EACH ROW
FOR EACH ROW子句通知触发器每隔一行执行一次动作,而不是对整个表执行一次。
<触发器SQL语句>
触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句,包括复合语句,但是这里的语句受的限制和函数的一样。

创建带有触发器的表

CREATE TABLE t22 (s1 INTEGER)//

CREATE TRIGGER t22_bi
BEFORE INSERT ON t22
FOR EACH ROW
BEGIN
SET NEW.s1 = 55;
END;

创建了一个名字为t22的表,然后在表t22上创建了一个触发器t22_bi,当我们要向表中的行插入时,触发器就会被激活,执行将s1列的值改为55的动作

查看已有触发器

show triggers;

删除触发器

drop trigger <触发器名称>

old和new

在触发器的SQL语句中,你可以关联表中的任意列。但你不能仅使用列的名称去标识,那会使系统混淆,因为那里可能会有列的新名(这可能正是你要修改的,你的动作可能正是要修改列名),还有列的旧名存在。因此你必须用这样的语法来标识:

  “NEW . 列名”或者”OLD . 列名”.这样在技术上处理(NEW | OLD )新和旧的列名, 属于创建了过渡变量

insert 原本没有这一行数据但是你插入了这一条数据所以就是新
delete 原本这一行是有 但是删了之后这一行是没有的 所以就是旧
update 曾经的数据是旧 改之后的数据是新

小问题

库亏量仅有3个 但客户买了10个 避免库存量变成负数

create trigger t1
BEFORE   在触发之前
insert
on ord
for each row
begin

#在触发器中声明一个变量
declare
rnum int;

#把库存量num赋值给rnum
select num into rnum from goods where gid=new.gid;
#much 你要买的数量
if new.much>rnum
如果购买的数量大于库亏量的情况下就把当前库存量赋值给要购买的数量
    set new.much=rnum;
end if;
然后在修改 goods表  库存量减去当前的购买量
update goods set num=num-new.much where gid=new.gid;
end$
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值