MySQL的触发器和存储过程一样,都在嵌入到MySQL的一段程序,触发器是由是事件来触发某个操作
1.创建触发器
- 触发器是个特殊的存储过程
- 不同的是,执行存储过程要使用CALL语句要调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MySQL自动调用
1.创建只有一个执行语句的触发器
CREATE TRIGGER trigger_name gtigger_time trigger_event ON tb1_name FOR EACH ROW trigger_stmt
- trigger_name:触发器的名字
- trigger_time:触发时机
- before
- after
- trigger_event:触发事件
- INSERT
- UPDATE
- DELETE
- tb_name:建立触发器的表名,即在哪张表上建立触发器
- trigger_stmt:触发器执行的语句
例子:
/*创建基本表*/
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;
执行结果如下:
2.创建有多个执行语句的触发器
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW
BEGIN
语句执行列表
END
例子:
/*创建基础表*/
CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2,INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);
/*创建触发器*/
DELIMITER //
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2=NEW.a1;
DELEFT FROM test3 WHERE a3=NEW.a1;
UPDATE test4 SET b4=b4+1 WHERE a4=NEW.a1;
END
//
DELIMITER ;
2.查看触发器
1.SHOW TRIGGERS
SHOW TRIGGERS
2.在triggers表中查看触发器信息
在MySQL中.所有的触发器的定义都存在information_schema数据库的triggers表格中
SELECT * FROM information_schema.triggers WHERE condition;
例子:
SELECT * FROM information_schama.triggers WHERE trigger_name ='trig_update'\G;
3.删除触发器
DROP TRIGGER [schema_name.] trigger_name
在使用触发器的时候需要注意,对于相同的表,相同的事件只能创建一个触发器,再次创建的时候MySQL会报错
需及时删除不再使用的触发器