Date: 20140305
Auth: Jin

一、概念
1、基本概念
触发器是一个被指定关联到一个表的数据对象,触发器是不需要调用的,当对一个表的特别事件出现时,它就被激活。
触发器的代码也是由SQL语句组成的,因此用在存储过程中的语句也可以用在触发器的定义中。
触发器是一类特殊的存储过程。

2、类型
SQL2008中分为:DML和DDL触发器
1)DML触发器
当数据库发生DML事件时将调用DML触发器。INSERT,UPDATE,DELETE
2)DDL触发器
当数据库发生DDL事件时将调用DDL触发器。CREATE,ALTER,DROP

二、SQL2008
1、创建DML触发器
CREATE TRIGGER trigger_name
ON table|view
[WITH ENCRYPTION]
{FOR|AFTER|INSTEAD OF}
{[INSERT|UPDATE|DELETE]}
[WITH APPEND]
[NOT FOR REPLICTION]
AS {SQL
}
简单说明
ON table|view:指定在其上执行触发器的表或视图
AFTER 用于说明触发器在指定操作都成功执行后触发,比如AFTER INSERT
表示向表中插入数据时激活触发器
INSTEAD OF :指定使用DML触发器中的操作代替触发语句的操作。

实例1
create table table1(a int);
CREATE TRIGGER table1_insert
ON table1 AFTER INSERT
AS
BEGIN
DECLARE @str char(50)
SET @str='TRIGGER IS WORKING'
PRINT @str
END

实例2
当向CJB中插入一个学生的成绩时,讲XSB表中该学生的总学分加 上添加的课程学分
CREATE TRIGGER cjb_insert
ON CJB AFTER INSERT
AS
BEGIN
DECLARE @num char(6),@kc_num char(3)
DECLARE @xf int
select @num=学号,@kc_num=课程号 from inserted
select @xf=学分 FROM KCB where 课程号=@kc_num
UPDATE XSB SET 总学分=总学分+@xf WHERE 学号=@num
PRINT ‘修改成功’
END
SET @str='TRIGGER IS WORKING'
PRINT @str
在UPDATE之后触发
ON CJB AFTER UPDATE
在DELETE之后触发
ON CJB AFTER DELETE

2、创建DDL触发器
CREATE TRIGGER trigger_name
ON {ALL SERVER|DATABASE }
[WITH ENCRYPTION]
{FOR|AFTER} {event_type|event_group}
AS {SQL
}

三、MYSQL方式
参考:
http://www.cnblogs.com/hitwtx/archive/2011/07/25/2116014.html
1.创建表:
create table t(s1 integer);

2.创建触发器:
delimiter |
create trigger t_trigger before insert on t for each row
begin set @x = "hello trigger";
set NEW.s1 = 55;
end;
|
delimiter ;

3 查看触发器
SELECT * FROM information_schema.`TRIGGERS`\G

*************************** 1. row ***************************
TRIGGER_CATALOG: NULL
TRIGGER_SCHEMA: dbtest
TRIGGER_NAME: t_trigger
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: NULL
EVENT_OBJECT_SCHEMA: dbtest
EVENT_OBJECT_TABLE: t
ACTION_ORDER: 0
ACTION_CONDITION: NULL
ACTION_STATEMENT: begin set @x = "hello trigger";
set NEW.s1 = 55;
end
ACTION_ORIENTATION: ROW
ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
ACTION_REFERENCE_OLD_ROW: OLD
ACTION_REFERENCE_NEW_ROW: NEW
CREATED: NULL
SQL_MODE:
DEFINER: root@localhost
CHARACTER_SET_CLIENT: latin1
COLLATION_CONNECTION: latin1_swedish_ci
DATABASE_COLLATION: utf8_general_ci
1 row in set (0.01 sec)

4. 如果触发器创建错误,可能只能删除了,至少我试过不能replace

drop trigger t_trigger;

5. 当执行insert 时:

insert into t values(1);

6. 会执行触发器t_trigger

select @x,t.* from t;

7. 可以看到结果:
+---------------+------+
| @x | s1 |
+---------------+------+
| hello trigger | 55 |
+---------------+------+

四、记忆

1.查看触发器
SELECT * FROM information_schema.`TRIGGERS`\G
SELECT * FROM information_schema.`TRIGGERS` where TRIGGER_NAME='t_trigger'\G

2.删除,不能replace
drop trigger t_trigger;

3.CRATE TRIGGER
create table t(s1 integer);
delimiter |
CRATE TRIGGER t_trigger before insert ON t for each row
BEGIN set @x = "hello trigger";
set NEW.s1 = 55;
END;
|
delimiter ;

4.迁移
为每个转储的表转储触发器。该选项默认启用;用--skip-triggers禁用它。
实际上dump出来 被注释掉了

触发器也是特殊的存储过程,所以迁移时使用存储过程的方法-R即可迁移

MYSQL复习笔记13-触发器trigger的更多相关文章

  1. MYSQL复习笔记1-物理文件和系统架构

    date:20140101auth:Jin 一.物理组成(一) 日志文件参考:http://dev.mysql.com/doc/refman/5.1/en/server-logs.html1.错误日志 ...

  2. mysql复习笔记

    阅读目录 1.什么是SQL语句2.使用sql语句创建数据库和表3.创建数据表4.数据完整性约束5.四中基本字符类型说明6.SQL基本语句7.类型转换函数8.日期函数9.数学函数10.字符串函数11.联 ...

  3. MySQL 复习笔记

    本文内容 SQL 语句 创建数据库 创建数据表 数据完整性约束 四种基本字符类型说明 SQL 基本语句 类型转换函数 日期函数 数学函数 字符串函数 合并结果集 union CASE 函数用法 IF ...

  4. MYSQL复习笔记12-视图

    Date: 20140223Auth: Jin参考:http://blog.sina.com.cn/s/blog_436732df0100e768.html 一.介绍1.概念视图是从一个或几个基本表( ...

  5. MYSQL复习笔记6-字符集

    Date: 20100101 Auth: Jin 参考http://blog.sina.com.cn/s/blog_9707fac301016wxm.html 一.字符集介绍 计算机只处理二进制代码 ...

  6. MYSQL复习笔记3-用户和安全

    Date: 20140115Auth: Jin参考:http://dev.mysql.com/doc/refman/5.1/en/security.html 一.权限系统实现方式相关权限信息存储在几个 ...

  7. MYSQL复习笔记10-连接

    Date: 20140219Auth: Jin 一.介绍连接是二元运算,可以对两个表或多个表进行查询.T-SQL中分两大类,一是符合SQL标准的连接谓词表示形式,二是T-SQL扩展的使用关键字JOIN ...

  8. MYSQL复习笔记9-存储过程

    date: 20140208auth: Jin参考引用:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解一.基本介绍1. ...

  9. MYSQL复习笔记8-数据完整性

    Date: 20140207Auth: Jin 一.数据完整性的分类数据完整性是指数据库中数据在逻辑上的一致性和准确性.包括三种1.实体完整性又称行的完成性,要求表中有一个主键,其值不能为空且唯一地标 ...

随机推荐

  1. Linux 入门记录:三、Linux 文件基本操作管理

    一.复制文件.目录 使用 cp 命令复制文件或目录: $ cp 源文件(夹)目标文件(夹) 常用参数: -r 递归复制整个目录树 -v 显示复制过程的详细信息 二.移动.重命名文件或目录 通过 mv  ...

  2. Queue类

    1.LinkedBlockingQueue:基于链接节点的可选限定的blocking queue . 这个队列排列元素FIFO(先进先出). 队列的头部是队列中最长的元素. 队列的尾部是队列中最短时间 ...

  3. 【bzoj3682】Phorni

    后缀平衡树裸题. 后缀平衡树呢,实际上是一个很naive的东西.就是用平衡树维护后缀数组. 这样的话就可以支持在最前端插入一个字符(相当于插入新的后缀) 每次比较节点的tag是O(1)的,所以可以快速 ...

  4. java之基本数据类型与引用数据类型

    基本数据类型 需要注意的是字符是基本数据类型,但是字符串不是基本数据类型. 引用数据类型 类.接口类型.数组类型.枚举类型.注解类型. (上面说的字符串String属于引用数据类型中“类”的范畴) 两 ...

  5. y=y||'world'与y=y?y:'world'

    1.y=y||’world’ function log(x,y){ y=y||’world’; console.log(x,y) } log(‘hello’)===>hello world lo ...

  6. [转]windows消息机制(MFC)

    消息分类与消息队列 Windows中,消息使用统一的结构体(MSG)来存放信息,其中message表明消息的具体的类型, 而wParam,lParam是其最灵活的两个变量,为不同的消息类型时,存放数据 ...

  7. ViewPager单页显示3个item

    原文地址:https://github.com/hongyangAndroid/MagicViewPager/wiki MagicViewPager 单页显示3个Item的ViewPager炫酷切换效 ...

  8. 第K短路模板【POJ2449 / 洛谷2483 / BZOJ1975 / HDU6181】

    1.到底如何求k短路的? 我们考虑,要求k短路,要先求出最短路/次短路/第三短路……/第(k-1)短路,然后访问到第k短路. 接下来的方法就是如此操作的. 2.f(x)的意义? 我们得到的f(x)更小 ...

  9. 北邮校赛 I. Beautiful Array(DP)

    I. Beautiful Array 2017- BUPT Collegiate Programming Contest - sync 时间限制 1000 ms 内存限制 65536 KB 题目描述 ...

  10. Xamarin Forms启动自带模拟器缓慢

    Xamarin Forms启动自带模拟器缓慢 Xamarin Forms启动自带模拟器缓慢,在Windows 10中,Visual Studio可以使用系统自带的Hyper模拟器.但是使用时候,会长时 ...