触发器:可以更新,删除,插入触发器,不同种类的触发器可以存在于同一个表,但同种类的不能有多个。
一个更新、一个删除是可以共存的。
~~语法~~

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

DELIMITER $$

CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
TRIGGER name_trigger BEFORE/AFTER INSERT/UPDATE/DELETE
ON TableName
FOR EACH ROW BEGIN   .....................此处编辑所要触发的sql存储过程语句..................................... END$$ DELIMITER ;

标准的触发器书写

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

~~实例~~

example1 - INSERT:

创建表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表中(注意下面sql事例中的红色部分,delimiter与$$之间必须仅且仅有一个空格)

DROP TRIGGER IF EXISTS t_afterInsert_on_tab1;

DELIMITER $$

CREATE TRIGGER t_afterInsert_on_tab1
AFTER INSERT ON tab1
FOR EACH ROW
BEGIN
     INSERT INTO tab2(tab2_id) VALUES(new.tab1_id);
END$$

DELIMITER ;

测试一下
INSERT INTO tab1(tab1_id) values('0001');
看看结果
SELECT * FROM tab1,tab2;

example2 - DELETE:

创建触发器:t_afterDelete_on_tab1

作用:删除tab1表记录后自动将tab2表中对应的记录删去(注意下面sql事例中的红色部分,delimiter与$$之间必须仅且仅有一个空格)

DROP TRIGGER IF EXISTS t_afterDelete_on_tab1;

DELIMITER $$

CREATE TRIGGER t_afterDelete_on_tab1
AFTER DELETE ON tab1
FOR EACH ROW
BEGIN
      DELETE FROM tab2 WHERE tab2_id=old.tab1_id;
END$$

DELIMITER ;

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

example3 - UPDATE:

创建触发器:t_afterUpdate_on_tab1

作用:更新tab1表记录后自动将tab2表中对应的记录更新(注意下面sql事例中的红色部分,delimiter与$$之间必须仅且仅有一个空格)

DROP TRIGGER IF EXISTS t_afterUpdate_on_tab1;

DELIMITER $$

CREATE TRIGGER t_afterUpdate_on_tab1
AFTER UPDATE ON tab1
FOR EACH ROW
BEGIN
  IF new.tab1_id = '0002' THEN
      UPDATE tab2 SET tab2_id = new.tab1_id;
  END IF;
END;$$

DELIMITER ;

测试一下
UPDATE tab1 SET tab1_id = '0002';
看看结果
SELECT FROM tab1,tab2;
 
 
以上实例当中的sql语句请直接放查询界面执行,不可放在工具生成的触发器界面执行,sqlyog工具的自动生成触发器界面,需要更加标准的书写,所以请直接放在查询界面执行,如果要在sqlyog的自动生成触发器界面执行,请参照上面的标准触发器写法去修改sql语句。 
 

MySQL 触发器简单实例 - 转载的更多相关文章

  1. MySQL 触发器简单实例

    ~~语法~~ CREATE TRIGGER <触发器名称>  --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.{ BEFORE |  ...

  2. mysql触发器trigger 实例详解

    mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html)   MySQL好像从5.0.2版本就开始支持触发器的功能 ...

  3. Mysql笔记——触发器简单实例

    首先贴上触发器语法吧: CREATE TRIGGER <触发器名称> –触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. { BEFOR ...

  4. MySQL触发器Trigger实例篇

    定义: 何为MySQL触发器? 在MySQL Server里面也就是对某一个表的一定的操作,触发某种条件(Insert,Update,Delete 等),从而自动执行的一段程序.从这种意义上讲触发器是 ...

  5. mysql数据库 触发器简单实例

    触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...

  6. Java WebService 简单实例[转载]

    [注意,本文转载自  http://hyan.iteye.com/    ] 一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1 ...

  7. mysql 存储过程简单实例

    一.什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程 ...

  8. MySql存储过程简单实例

    转自:http://www.cnblogs.com/zhuawang/p/4185302.html ********************* 创建表 ************************ ...

  9. mysql触发器使用实例

    DELIMITER $$ USE `db`$$ DROP TRIGGER `member_walletinit_trigger`$$ CREATE TRIGGER `member_walletinit ...

随机推荐

  1. 【BZOJ2124】等差子序列 树状数组维护hash值

    [BZOJ2124]等差子序列 Description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pLen<=N ...

  2. Blue Bird

    Blue Bird 哈巴他一 他拉 毛套拉那 一套一太(他)卖咋西他 闹哇 啊哦一 啊哦一 啊闹扫啦 卡那西米哇马达 哦包爱 啦来字赛次那撒哇姨妈 次卡米哈几卖他阿娜塔爱套一大 靠闹看叫毛姨妈靠逃吧你 ...

  3. Mac下安装apk(命令形式)

    1 连接上设备 2 卸载原有程序 3 进入adb程序目录/Applications/adt-bundle-mac-x86_64-20131030/sdk/platform-tools 4 键入命令 . ...

  4. 《从零开始学Swift》学习笔记(Day 63)——Cocoa Touch设计模式及应用之单例模式

    原创文章,欢迎转载.转载请注明:关东升的博客 什么是设计模式.设计模式是在特定场景下对特定问题的解决方案,这些解决方案是经过反复论证和测试总结出来的.实际上,除了软件设计,设计模式也被广泛应用于其他领 ...

  5. CoordinatorLayout Behaviors使用说明[翻译]

    翻译与:Intercepting everything with CoordinatorLayout Behaviors 使用过Android Design Support Library的小伙伴应该 ...

  6. 几种常见数据库查询判断表和字段是否存在sql

    1.MSSQL Server    表:select COUNT(*) from dbo.sysobjectsWHEREname= 'table_name':  字段:select COUNT(*)  ...

  7. 【pip】【conda】

    1.指定python包安裝版本==  指定python包安裝源-i: pip2 -i https://pypi.tuna.tsinghua.edu.cn/simple 2.配置文件换源 vi ~/.p ...

  8. 手动拼写出来的sp_who结果集

    SELECT SPID = er.session_id  ,STATUS = ses.STATUS  ,[Login] = ses.login_name  ,Host = ses.host_name  ...

  9. CNI flannel插件

    // plugins/meta/flannel/flannel.go func cmdAdd(args *skel.CmdArgs) error 调用n, err := loadFlannelNetC ...

  10. 我的Android进阶之旅------&gt;Android无第三方Jar包的源代报错:The current class path entry belongs to container ...的解决方法

    今天使用第三方Jar包afinal.jar时候.想看一下源码,无法看 然后像加入jar相应的源代码包.也无法加入相应的源代码,报错例如以下:The current class path entry b ...