MySQL自学笔记6--触发器

来源:互联网 发布:it程序员学徒干什么的 编辑:程序博客网 时间:2024/04/27 23:04

MySQL自学笔记

使用MySQL 5.5以及MySQL自带命令客户端

触发器:trigger

MySQL中,触发器用来监视某种情况并出发某种操作
比如在一个电子商务中,下订单后库存应该相应的减少,这两个逻辑可以看作是一个整体。
触发器可以监视:增、删、改,可以触发的操作:增、删、改
* 触发器有如下四要素:
1. 监视地点
2. 监视事件
3. 触发时间
4. 触发事件

  • 创建触发器
    语法格式如下:

    create trigger triggerName //触发器名称after/before //触发时间insert/update/delete //监视事件on tableName //监视地点for each row beginSQL语句 # 一句或者多句,得在insert/update/delete 范围内 //触发事件end;# MySQL默认是以英文分号`;`作为结束符,但是如果SQL语句有多句的话,可以修改一下结束符,在SQL中用`;`作为一个句子的结束,在整个语句最后用新设置的结束符来结束# 修改结束符:比如将结束符修改为`$``delimiter $`
  • 删除触发器:drop trigger triggerName;

  • 查看触发器:show triggers;

  • 触发时间的区别:before/after

    • before:在监视事件前触发,即触发的语句先于监视的增、删、改,这样就有机会判断修改即将发生的操作
    • after:在监视事件后触发,即触发语句是在监视的事情完成后才发生,其无法影响监视事件的动作
  • 在触发器中引用行的值

    • insert:对insert而言,新增加的行,用new来表示,对行中列的值用new.colName来表示
    • delete:对delete而言,原来的行被删掉了,想要引用被删掉的这一行数据,可以使用old来表示,对行中的数据用old.colName来表示
    • update:对update而言,对于被修改的行,引用修改前的数据用old.colName,引用修改后的数据用new.colName
  • 使用场合:

    • 向一张表中添加或者删除记录时,需要在相关表中进行同步操作
    • 当表上某列数据和其他表中的数据有联系的时候。比如可以通过设计触发器判断客户累计欠款是否超出最大限度
    • 需要对某一张表进行跟踪的时候
0 0