MySQL触发器

触发器是特殊的存储过程。不同的是,触发器不需要手动调用。只要当预定义的事件发生时,会被MySQL自动调用。主要用于满足复杂业务的规则和需求。

一、创建触发器

1、创建只有一个执行语句的触发器,语法如下:

CREATE TRIGGER trigger_name trigger_time trigger_event
ON tab_name FOR EACH ROW trigger_stmt

其中,trigger_name是标识触发器名称。trigger_time指定触发时机,可以指定before或after。trigger_event标识触发事件,包括INSERT、UPDATE、和DELETE;tab_name标识建立触发器的表名,即在哪张表上建立触发器。trigger_stmt是触发器执行的语句。

触发器类型 触发触发器的语句
INSERT触发器 INSERT、 LOAD DATA、REPLACE
UPDATE触发器 UPDATE
DELETE触发器 DELETE、 REPLACE

load data语句是将文件的内容插入到表中,相当于是insert语句,而replace语句在一般的情况下和insert差不多,但是如果表中存在primary 或者unique索引的时候,如果插入的数据和原来的primary key或者unique相同的时候,会删除原来的数据,然后增加一条新的数据,所以有的时候执行一条replace语句相当于执行了一条delete和insert语句

例:

CREATE TABLE account (acct_num int, amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT on account
FOR EACH ROW SET @sum = @sum + NEW.amount;

首先创建一个表account。在向表插入数据前,计算所有新插入的account表的amount值和。

说明:在MySQL中用oldnew表示执行前和执行后的数据,oldnew在oracle中表示执行前的行,和执行后的行。

触发器类型 NEW和OLD的使用
INSERT触发器 NEW表示将要或已经增加的数据
UPDATE触发器 OLD表示将要或已经被删除的数据,NEW表示将要或已经修改的数据
DELETE触发器 OLD表示将要或已经删除的数据

2、创建有多个执行语句的触发器

创建多个执行语句的触发器的语法如下:

CREATE TRIGGER trigger_name trigger_time trigger_event
ON tab_name FOR EACH ROW
BEGIN
语句执行列表
END;

二、查看触发器

查看触发器是指查看数据库中已存在的触发器的定义,状态和语法信息等。可以通过命令来查看已经创建的触发器。

1、show triggers语句查看触发器信息,语法如下:

SHOW TRIGGERS;

2、在triggers表中查看触发器的信息。在MySQL中所有触发器的定义都存在information_schema数据库的triggers表中,语法如下:

select * from information_schema.triggers where ...

三、删除触发器

使用drop语句可以删除MySQL中定义的触发器,语法格式如下:

DROP TRIGGER trigger_name;

最新文章

  1. Windows平台下Qt中glut库的使用
  2. bash profile .bashrc
  3. 每天一个linux命令(51):lsof命令
  4. Android基于mAppWidget实现手绘地图(八)–获取用户地理位置
  5. 安卓--shape简单使用
  6. Python字符串的编码与解码(encode与decode)
  7. mysql my.cnf配置文件详解
  8. jquery easyui读取json文件乱码
  9. error LNK2005 new,delete 等已经在LIBCMT.lib(delete.obj) 中定义 错误修正
  10. 数据结构(虚树,动态规划):HNOI 2014 世界树
  11. angularjs使用ng-messages-include实例
  12. 【HDU1514】Stars(树状数组)
  13. android 读写sd卡的权限设置
  14. hdu_5874_Friends and Enemies(公式题)
  15. Primes on Interval
  16. Vue-表单输入绑定
  17. 如何安装私有 npm 包?
  18. WebService,ESB笔记
  19. ubuntu16.04下使用navicat连接docker mysql5.7.20
  20. IntelliJ IDEA for Mac(Java 语言开发的集成环境)破解版安装

热门文章

  1. SSH连接虚拟机中的Ubuntu(转)
  2. Golang AES加密
  3. 使用python绘出常见函数
  4. PHP设计模式之工厂模式(转)
  5. [Data Structure] Stack Implementation in Python
  6. Elasticsearch基本用法(2)--Spring Data Elasticsearch
  7. mvc core2.1 Identity.EntityFramework Core ROle和用户绑定查看 (八)完成
  8. PS学习之制作音乐视屏
  9. 《DSP using MATLAB》Problem 5.11
  10. day39Python