触发器

来源:互联网 发布:php调用api接口 编辑:程序博客网 时间:2024/06/03 19:44

触发器是一个特殊的存储过程,不同的是存储过程要用CALL来调用,而触发器不需要使用CALL,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。

创建触发器语法:
    CREATE TRIGGER trigger_name    trigger_time    trigger_event ON tbl_name    FOR EACH ROW    trigger_stmt

其中:

  1. trigger_name:标识触发器名称,用户自行指定;
  2. trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
  3. trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
  4. tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
  5. trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。

由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。

trigger_event 详解

MySQL 除了对 INSERT、UPDATE、DELETE 基本操作进行定义外,还定义了 LOAD DATA 和 REPLACE 语句,这两种语句也能引起上述6中类型的触发器的触发。

  1. LOAD DATA 语句用于将一个文件装入到一个数据表中,相当与一系列的 INSERT 操作。
  2. REPLACE 语句一般来说和 INSERT 语句很像,只是在表中有 primary key 或 unique 索引时,如果插入的数据和原来 primary key 或 unique 索引一致时,会先删除原来的数据,然后增加一条新数据,也就是说,一条 REPLACE 语句有时候等价于一条INSERT 语句,有时候等价于若一条或多条 DELETE 语句加上一条 INSERT 语句。

  3. INSERT 型触发器:插入某一行时激活触发器,可能通过 INSERT、LOAD DATA、REPLACE 语句触发;

  4. UPDATE 型触发器:更改某一行时激活触发器,可能通过 UPDATE 语句触发;
  5. DELETE 型触发器:删除某一行时激活触发器,可能通过 DELETE、REPLACE 语句触发。

    查看触发器:SHOW TRIGGERS [FROM schema_name];删除触发器: DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

触发器的执行顺序

我们建立的数据库一般都是 InnoDB 数据库,其上建立的表是事务性表,也就是事务安全的。这时,若SQL语句或触发器执行失败,MySQL 会回滚事务,有:

  1. 如果 BEFORE 触发器执行失败,SQL 无法正确执行。
  2. SQL 执行失败时,AFTER 型触发器不会触发。
  3. AFTER 类型的触发器执行失败,SQL 会回滚。
0 0
原创粉丝点击