触发器和存储过程相似,都是嵌入到 mysql 中的一段程序。触发器是由事件来触发某个操作。当数据库执行这些事件时,就会激活触发器来执行相应的操作。这些事件称为触发条件,在MySQL中,有UPDATE,INSERT,和DELETE。
CREATE TRIGGER TRIGGER_NAME
BEFORE/AFTER
UPDATE/INSERT/DELETE ON TABLE_NAME
FOR EACH ROW
#触发器主体
[BEGIN]
SQL操作
[END];
# 创建一个触发器T1,在对表customer做插入操作时,就会触发T1,之后会在日志表note中插入一条数据
CREATE TRIGGER T1
AFTER
INSERT ON customer
FOR EACH ROW # 触发器主体
INSERT INTO note(日期,目标,操作) VALUES(NOW(),'customer','insert');
和删除表和存储过程类似,都是使用DROP语句来删除触发器。
#删除触发器T1
DROP TRIGGER IF EXISTS T1;
触发器不能够更新和修改,想要修改一个触发器的内容,只能先将触发器删除,在创建一个新的触发器。
#在已知数据库内,查询触发器
SHOW TRIGGERS;
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '触发器名'
#查询所有的触发器
SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '数据库名')
触发器在DDL操作之前或者之后触发,总会对目标表做出一定的改动,有时我们需要知道目标表改变前后的值,这就用到了OLD和NEW的用法。
顾名思义,OLD就是改变之前的值,是UPDATE之前或者是要被DELETE或者已经被DELETE的值。
而NEW,则是UPDATE之后的新值,即将INSERT或者已经INSERT的值。
具体实例:
#创建customer表
CREATE TABLE `customer`
(`CUST_ID` int(11) NOT NULL AUTO_INCREMENT,
`CUST_NAME` varchar(10) NOT NULL,
`CUST_TEL` varchar(10) DEFAULT NULL,
PRIMARY KEY (`CUST_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#向表中插入数据
#创建一个update触发器
CREATE TRIGGER T2
AFTER
UPDATE ON customer
FOR EACH ROW
#old和new的使用方法:old.columnname/new.columnname(列名)
#将更新前后的值,赋值给两个变量
SELECT OLD.CUST_ID,NEW.CUST_ID INTO @OLD_ID,@NEW_ID;
#触发触发器T2
UPDATE customer SET CUST_ID = '10000' WHERE CUST_NAME = 'AAA';
#查询OLD和NEW
SELECT @OLD_ID,@NEW_ID;
到此这篇关于Mysql中的触发器的文章就介绍到这了,更多相关mysql触发器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!