MySQL触发器详解
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中用old
和new
表示执行前和执行后的数据,old
和new在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;
最新文章
- Windows平台下Qt中glut库的使用
- bash profile .bashrc
- 每天一个linux命令(51):lsof命令
- Android基于mAppWidget实现手绘地图(八)–获取用户地理位置
- 安卓--shape简单使用
- Python字符串的编码与解码(encode与decode)
- mysql my.cnf配置文件详解
- jquery easyui读取json文件乱码
- error LNK2005 new,delete 等已经在LIBCMT.lib(delete.obj) 中定义 错误修正
- 数据结构(虚树,动态规划):HNOI 2014 世界树
- angularjs使用ng-messages-include实例
- 【HDU1514】Stars(树状数组)
- android 读写sd卡的权限设置
- hdu_5874_Friends and Enemies(公式题)
- Primes on Interval
- Vue-表单输入绑定
- 如何安装私有 npm 包?
- WebService,ESB笔记
- ubuntu16.04下使用navicat连接docker mysql5.7.20
- IntelliJ IDEA for Mac(Java 语言开发的集成环境)破解版安装
热门文章
- SSH连接虚拟机中的Ubuntu(转)
- Golang AES加密
- 使用python绘出常见函数
- PHP设计模式之工厂模式(转)
- [Data Structure] Stack Implementation in Python
- Elasticsearch基本用法(2)--Spring Data Elasticsearch
- mvc core2.1 Identity.EntityFramework Core ROle和用户绑定查看 (八)完成
- PS学习之制作音乐视屏
- 《DSP using MATLAB》Problem 5.11
- day39Python