`
robinsoncrusoe
  • 浏览: 745683 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

mysql 触发器 例子

阅读更多
~~语法~~
CREATE TRIGGER <触发器名称>  --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
{ BEFORE | AFTER }  --触发器有执行的时间设置:可以设置为事件发生前或后。
{ INSERT | UPDATE | DELETE }  --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。
ON <表名称>  --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。
FOR EACH ROW  --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
<触发器SQL语句>  --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。

--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。


~~实例~~
Example1:
创建表tab1
DROP TABLE IF EXISTS tab1;
CREATE TABLE tab1(
    tab1_id varchar(11)
);

创建表tab2
DROP TABLE IF EXISTS tab2;
CREATE TABLE tab2(
    tab2_id varchar(11)
);

创建触发器:t_afterinsert_on_tab1
作用:增加tab1表记录后自动将记录增加到tab2表中
DROP TRIGGER IF EXISTS t_afterinsert_on_tab1;
CREATE TRIGGER t_afterinsert_on_tab1
AFTER INSERT ON tab1
FOR EACH ROW
BEGIN

     if new.tab1_id is not null then
        insert into tab2(tab2_id) values(new.tab1_id);

     end if;
END;

测试一下
INSERT INTO tab1(tab1_id) values('0001');

看看结果
SELECT * FROM tab1;
SELECT * FROM tab2;

Example2:
创建触发器:t_afterdelete_on_tab1
作用:删除tab1表记录后自动将tab2表中对应的记录删去
DROP TRIGGER IF EXISTS t_afterdelete_on_tab1;
CREATE TRIGGER t_afterdelete_on_tab1
AFTER DELETE ON tab1
FOR EACH ROW
BEGIN
      delete from tab2 where tab2_id=old.tab1_id;
END;

测试一下
DELETE FROM tab1 WHERE tab1_id='0001';
看看结果
SELECT * FROM tab1;
SELECT * FROM tab2;



postscript:

查看触发器用 show tiggers

触发器是属于一个表的,当在这个表上执行insert, update, delete操作时,就会导致相应的触发器被激活;

不能给同一个表的同一个操作创建两个不同的触发器。

触发间隔:

FOR EACH ROW 子句通知MySQL触发器每隔一行执行一次动作,而不是对整下表执行一次。


在触发器的SQL语句中,你可以关联表中的任意列。但你不能仅使用列的名称去标识,那会使系统混淆,因为那里可能会有列的新名(这可能正是你要修改的,你的动作可能正是要修改列名),还有列的旧名存在。因此你必须用这样的语法来标识:

  "NEW . column_name"或者"OLD . column_name".这样在技术上处理(NEW | OLD . column_name)新和旧的列名属于创建了过渡变量("transition variables")。

  对于INSERT语句,只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在和NEW以及OLD同时使用。


复合语句(BEGIN / END)是合法的.

  流控制(Flow-of-control)语句(IF, CASE, WHEN, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.

  变量声明(DECLARE)以及指派(SET)是合法的.

  允许条件声明.


你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER)。如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同,我也希望能尽快改成标准的。

  异常处理声明也是允许的.


触发器相对而言比较新,因此会有(bugs)缺陷.所以我在这里给大家警告,就像我在存储过程书中所说那样.不要在含有重要数据的数据库中使用这个触发器,如果需要的话在一些以测试为目的的数据库上使用,同时在你对表创建触发器时确认这些数据库是默认的。

 
分享到:
评论

相关推荐

    MySQL触发器.pdf

    ### MySQL触发器详解 #### 引言 MySQL触发器,作为MySQL 5.0版本引入的一项重要特性,为数据库管理提供了更为精细的控制能力。触发器允许在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行SQL语句,...

    mysql触发器使用

    在深入探讨MySQL触发器的使用之前,我们先来理解一下什么是触发器以及它在数据库管理中的作用。触发器是数据库中一种特殊的存储过程,当特定的事件(如INSERT、UPDATE或DELETE操作)在指定的表上发生时自动执行。...

    MySQL触发器、存储过程、自定义函数、视图示例

    ### MySQL触发器、存储过程、自定义函数、视图示例 #### 一、MySQL触发器 触发器是一种特殊类型的存储过程,它被设计为在特定事件(如INSERT、UPDATE或DELETE操作)发生时自动执行。触发器可以用来强制业务规则、...

    mysql触发器使用实例

    MySQL触发器是数据库管理系统中的一个重要特性,它允许在特定的数据操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的SQL语句。这为数据库的业务规则提供了强大的支持,可以确保数据的一致性和完整性。以下是...

    Mysql触发器介绍

    ### MySQL触发器详解 #### 一、引言 MySQL 的触发器与存储过程类似,都是内嵌于数据库的一种编程机制。触发器的概念最早出现在 MySQL 5.0 版本中,这一特性使得开发者能够编写自动化的数据库操作逻辑,用于响应...

    mysql触发器

    MySQL触发器是数据库管理系统中的一个重要特性,它允许在特定的数据库操作(如INSERT、UPDATE、DELETE)发生之前或之后执行自定义的SQL代码。这些自动执行的程序段可以帮助实现业务规则,数据验证,或者在数据发生...

    mysql触发器.pdf

    MySQL触发器是数据库管理系统(DBMS)中的一种特殊存储过程,它会在满足特定条件时自动执行。在本文件中,我们将会学习到关于MySQL触发器的创建、应用以及如何查看触发器等知识点。 ### 触发器的定义和作用 触发器...

    触发器例子

    标题中的“触发器例子”指的是在数据库管理系统中使用的触发器(Trigger)的示例。触发器是一种数据库对象,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行,可以用来实现复杂的业务规则和数据...

    [数据库] Navicat for MySQL触发器更新和插入操作1

    在MySQL中,触发器(Trigger)是一种强大的功能,用于在特定的数据操作(如INSERT、UPDATE、DELETE)发生时自动执行预定义的SQL语句,以此来维护数据的完整性和一致性。触发器可以看作是数据库的自动反应机制,无需...

    MySQL 5.0 触发器.rar

    MySQL 5.0 触发器是数据库管理系统MySQL中的一个重要特性,它允许用户在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行预定义的SQL语句,从而实现对数据的自动管理和控制。这在数据一致性、业务规则的...

    MySQL触发器深入解析.md

    ### MySQL触发器深入解析 #### 引言 触发器作为一种重要的数据库对象,为MySQL数据库带来了自动化执行特定任务的能力。这不仅增强了数据库的功能性,还提高了其智能化水平。尤其是在需要维护数据完整性、审计跟踪...

    mysql触发器的作用及语法

    ### MySQL触发器的作用及语法详解 #### 一、触发器的概念 触发器是一种特殊类型的存储过程,它在特定的数据库事件(如数据插入、更新或删除)发生时自动执行。触发器增强了数据库的安全性和完整性控制,能够实现比...

    MYSQL触发器与存储过程.ppt

    MySQL中的存储过程和触发器是数据库管理中两个重要的高级特性,它们极大地增强了数据库的灵活性和安全性,同时也优化了性能。 **存储过程**是预编译的SQL语句集合,存储在数据库服务器上,可以在需要时被调用执行,...

    MySQL触发器[收集].pdf

    MySQL触发器是数据库管理系统中的一个重要特性,主要用于在特定的数据操作事件(如INSERT、UPDATE或DELETE)发生时自动执行预定义的SQL语句。这使得数据库能够实现更复杂的业务规则和数据完整性约束,而不依赖应用...

    MYSQL触发器相关内容

    ### MySQL触发器详解 #### 一、触发器基础语法与结构 MySQL中的触发器是一种存储在数据库中的特殊类型的存储过程,它会在特定的数据库事件(如数据插入、更新或删除)发生时自动执行。触发器可以确保数据的一致性...

    mysql触发器介绍.pdf

    ### MySQL触发器详解 #### 一、触发器概述 触发器是数据库系统中的一种机制,主要功能是在数据库中发生特定事件时自动执行一系列预定义的动作。这种机制在MySQL等关系型数据库管理系统中非常常见,其核心作用在于...

    MYSQL触发器教程.pdf

    MySQL触发器是数据库管理系统中的一种重要机制,它允许在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行预定义的SQL语句。触发器的引入主要是为了增强数据库的逻辑控制,确保数据的完整性和一致性,...

    MySQL存储过程和触发器

    MySQL中的存储过程和触发器是数据库管理中两个重要的概念,它们极大地增强了数据库的功能和灵活性。 存储过程是一种预编译的SQL语句集合,它可以视为数据库中的一个可执行对象。存储过程有以下几个显著优点: 1. *...

Global site tag (gtag.js) - Google Analytics