mysql进阶

MySQl进阶

  • 博主简介
  • 1.MySQL触发器

博主简介

毕业于武汉工商,有着两年开发经验,从事全栈工作,从系统需求设计,开发,测试,部署一整套开发体系,熟悉常用的关系型数据库,MySQL、Oracle、SqlServer等 ,也了解部分NoSQL,包括Redis、MongoDB等。实习的时候从事Java开发,熟悉基本的前端框架。现在转型学python,力求做一些自己的小产品,目前把自己学的经验积累给大家。
如果愿意跟着我一起学习可以加入
QQ群 534893126
个人QQ 365926403
如遇个人技术问题可联系我哦

1.MySQL触发器

触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行。
触发器经常用于加强数据的完整性约束和业务规则等。 触发器创建语法四要素:
1.监视地点(table)
2.监视事件(insert/update/delete)
3.触发时间(after/before)
4.触发事件(insert/update/delete)

其中:trigger_time是触发器的触发事件,可以为before(在检查约束前触发)或after(在检查约束后触发);trigger_event是触发器的触发事件,包括insert、update和delete,需注意对同一个表相同触发时间的相同触发事件,只能定义一个触发器;可以使用old和new来引用触发器中发生变化的记录内容。
触发器SQL语法:

create trigger triggerName 
after/before insert/update/delete on 表名 
for each row #这句话在mysql是固定的 
begin 
 sql语句; 
end; 
案例:当新增一条订单记录时,判断订单的商品数量,如果数量大于10,就默认改为10
 
create trigger tg6
before insert on o
for each row
begin
  if new.much > 10 then
    set new.much = 10;
  end if;
  update g set num = num - new.much where id = new.gid;
end$

易出错点:
1.触发器会存在两个点,一个是临时表,一个是永久的那个表,如果sql部分是修改新表,那么可以省略正常sql的update tanle_name
2.触发器的创建一定在客户端工具(sqlyog , Navicat等)的触发器模块新建

你可能感兴趣的:(MySQL)