[关闭]
@qq286531097 2017-03-10T07:29:06.000000Z 字数 1375 阅读 170

触发器

mysql


触发器

基本知识

->是一种与表事件相关的特殊存储过程
tip:不能滥用,会造成应用的难以维护

执行格式

  1. CREATE TRIGGER trigger_name
  2. trigger_time
  3. trigger_event ON tbl_name
  4. FOR EACH ROW
  5. trigger_stmt

简单描述

  1. trigger_name:标识触发器名称,用户自行指定;
  2. trigger_time:标识触发时机,取值为 BEFORE AFTER
  3. trigger_event:标识触发事件,取值为 INSERTUPDATE DELETE
  4. tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
  5. trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN END 包含的多条语句。
  6. 由此可见,可以建立6种触发器,即:BEFORE INSERTBEFORE UPDATEBEFORE DELETEAFTER INSERTAFTER UPDATEAFTER DELETE
  7. 另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。

简单例子

  1. DROP TRIGGER IF EXISTS t_afterdelete_on_tab1;
  2. CREATE TRIGGER t_afterdelete_on_tab1
  3. AFTER DELETE ON tab1
  4. FOR EACH ROW
  5. BEGIN
  6. delete from tab2 where tab2_id=old.tab1_id;
  7. END;

查看触发器

  1. show triggers;

删除触发器

  1. drop trigger 触发器名称

华丽丽的分割线,上手玩起来

1.先建一张数据库

  1. CREATE DATABASE atm;

2.再建两张表

a表

  1. CREATE TABLE a (aid VARCHAR(20));

b表

  1. CREATE TABLE b (bid VARCHAR(20));

3.在弄点数据

a表

  1. insert into a values ('1'),('2'),('3');

b表

  1. insert into b values ('1'),('2'),('3');

4.我随便写一个

  1. create trigger test
  2. after delete on a
  3. for each row
  4. delete from b where bid = old.aid;

关键字详解

  1. INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;
  2. UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;
  3. DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据;
  4. 使用方法: NEW.columnName columnName 为相应数据表某一列名)

5.执行一条对应的删除sql

  1. delete from a where aid = 1;

6.查看结果

  1. select * from a;
  2. select * from b;

简单计算(复杂度)

问题

-》求1+2+3+4+...+1000,求累加的值。用PHP去实现

第一种方式

  1. n = 1000; sum = 0;
  2. for(i=1 ; n<1000; i++){
  3. sum = sum + i
  4. }

第二种方式

  1. n = 1000; sum = 0;
  2. sum = (1 + n) * n/2;

第一种算法复杂度 n;
第二种算法复杂度 1;


后续

*触发器是一种特殊的存储过程
*里面可以写一些case then loop等更为复杂的语句,可以自行挖掘

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注