Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2856934
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: Mysql/postgreSQL

2012-03-18 10:47:51

触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。MySQL从5.0.2版本开始支持触发器。
 
    触发器是由INSERT、UPDATE和DELETE等事件来触发某种特定操作。满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。这样做可以保证某些操作之间的一致性。例如,当学生表中增加了一个学生的信息时,学生的总数就必须同时改变。可以在这里创建一个触发器,每次增加一个学生的记录,就执行一次计算学生总数的操作。这样就可以保证每次增加学生的记录后,学生总数是与记录数是一致的。触发器触发的执行语句可能只有一个,也可能有多个。
 
1、创建触发器

MySQL中,创建只有一个执行语句的触发器的基本形式如下:

  1. CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件
  2. ON 表名 FOR EACH ROW
  3. 执行语句
  4. CREATE TRIGGER product_bf_insert BEFORE INSERT
  5. ON product FOR EACH ROW
  6. INSERT INTO operate VALUES(null, 'Insert product', now());

MySQL中,触发器触发的执行语句可能有多个。创建有多个执行语句的触发器的基本形式如下:

  1. CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件
  2. ON 表名 FOR EACH ROW
  3. BEGIN
  4. 执行语句列表
  5. END

 
2、查看触发器
     是指查看数据库中已存在的触发器的定义、状态和语法等信息。查看触发器的方法包括SHOW TRIGGERS语句和查询information_schema数据库下的triggers表等。

MySQL中,可以执行SHOW TRIGGERS语句来查看触发器的基本信息。其基本形式如下:
SHOW  TRIGGERS ;
 
MySQL中,所有触发器的定义都存在information_schema数据库下的triggers表中。查询triggers表,可以查看到数据库中所有触发器的详细信息。查询的语句如下:
SELECT  *  FROM  information_schema. triggers ;
 
3、触发器的使用

MySQL中,触发器执行的顺序是BEFORE触发器、表操作(INSERT、UPDATE 和DELETE)、AFTER触发器。
下面通过一个示例演示这三者的执行顺序。
【示例9-6】下面在department表上创建BEFORE INSERT和AFTER INSERT这两个触发器。在向department表中插入数据时,观察这两个触发器的触发顺序。创建触发器的代码如下:

  1. CREATE TRIGGER before_insert BEFORE INSERT
  2. ON department FOR EACH ROW
  3. INSERT INTO trigger_test VALUES(null, " before_insert ");
  4. CREATE TRIGGER after_insert AFTER INSERT
  5. ON department FOR EACH ROW
  6. INSERT INTO trigger_test VALUES(null, " after_insert ");
读者在创建触发器后,一定要查看触发器的结
 
4、删除触发器
删除触发器指删除数据库中已经存在的触发器。MySQL中使用DROP TRIGGER语句来删除触发器。
其基本形式如下:
DROP  TRIGGER  触发器名 ;
 
 
本章介绍了MySQL数据库的触发器的定义和作用、创建触发器、查看触发器、使用触发器、删除触发器等内容。创建触发器和使用触发器是本章的重点内容。读者在创建触发器后,一定要查看触发器的结构。使用触发器时,触发器执行的顺序是BEFORE触发器、表操作(INSERT、UPDATE 和DELETE)、AFTER触发器。创建触发器是本章的难点。读者需要将本章的知识结合实际需要来设计触发器。
 
为一个表创建一个触发器,然后把它的操作记录到另一个表中
  1. CREATE TABLE product (
  2.     id INT(10) NOT NULL UNIQUE PRIMARY KEY ,
  3.     name VARCHAR(20) NOT NULL ,
  4.     function VARCHAR(50) ,
  5.     company VARCHAR(20) NOT NULL,
  6.     address VARCHAR(50)
  7.     );

  8. CREATE TABLE operate (
  9.     op_id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT ,
  10.     op_name VARCHAR(20) NOT NULL ,
  11.     op_tiem TIME NOT NULL
  12.     );
  13. CREATE TRIGGER product_bf_insert BEFORE INSERT
  14.     ON product FOR EACH ROW
  15.     INSERT INTO operate VALUES(null, 'Insert product', now());

  16. show triggers

 
阅读(655) | 评论(0) | 转发(0) |
0

上一篇:线程的同步互斥

下一篇:mysql 索引

给主人留下些什么吧!~~