触发器的介绍:
触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。
触发器的类型:
INSERT 型触发器
UPDATE 型触发器
DELETE 型触发器
创建触发器
DELIMITER $
CREATE TRIGGER 名称
事件前后(after\bdfore) 触发器类型(insert\update\delete)
ON 对象表
FOR EACH ROW
BEGIN
执行语句
END$DELIMITER ;
数据准备:
-- 创建数据库
CREATE DATABASE db3;
-- 创建syudent表
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR (20),
money DOUBLE
);
-- 添加数据
INSERT INTO student VALUE (NULL, '张三', 1000);
INSERT INTO student VALUE (NULL, '李四', 30000);
INSERT INTO student VALUE (NULL, '王五', 4000);
INSERT INTO student VALUE (NULL, '赵六', 3500);
INSERT INTO student VALUE (NULL, '老八', 12000);
-- 查询stduent
SELECT * FROM student;
-- 创建日志表 用来记录事件
CREATE TABLE account_log(
id INT PRIMARY KEY AUTO_INCREMENT, -- 日志id
opration VARCHAR(20), -- 操作类型(insert、update、delete)
opration_time DATETIME, -- 操作时间
opration_id INT, -- 操作表的id
opration_params VARCHAR(200) -- 操作参数
);
查看结果:
一、INSERT 型触发器
-- 创建insert型触发器
DELIMITER $
CREATE TRIGGER account_insert
AFTER INSERT
ON student
FOR EACH ROW
BEGIN
INSERT INTO account_log VALUE(NULL,'INSERT',NOW(),new.id,CONCAT('插入后{id=',new.id,',name=',new.name,',money=',new.money,'}'));
END$
DELIMITER ;
-- 向studen添加数据
INSERT INTO student VALUE(NULL,'七七',3000);
-- 查询account_log日志
SELECT * FROM account_log;
new.id 获取事件触发后的对象表的id
查看结果:
二、UPDATE 型触发器
-- 创建update型触发器
DELIMITER $
CREATE TRIGGER account_update
AFTER UPDATE
ON student
FOR EACH ROW
BEGIN
INSERT INTO account_log VALUE(NULL,'UPDATE',NOW(),new.id,CONCAT('更新前{id=',old.id,',name=',old.name,',money=',old.money,'},
更新后{id=,',new.id,',name=',new.name,',money=',new.money,'}'));
END$
DELIMITER ;
-- 修改student数据
UPDATE student SET money=10 WHERE id=2;
-- 查询account_log日志
SELECT * FROM account_log;
old.id 获取事件触发前的对象表的id
查看结果:
三、DELETE 型触发器
-- 创建delete型触发器
DELIMITER $
CREATE TRIGGER account_delete
AFTER DELETE
ON student
FOR EACH ROW
BEGIN
INSERT INTO account_log VALUE(NULL,'DELETE',NOW(),old.id,CONCAT('删除{id=',old.id,',name=',old.name,',money=',old.money,'},'));
END$
DELIMITER ;
-- 修改student数据
DELETE FROM student WHERE id=5;
-- 查询account_log日志
SELECT * FROM account_log;
查看结果:
四、查看与删除触发器
-- 查看触发器
SHOW TRIGGERS;
-- 删除触发器
DROP TRIGGER IF EXISTS account_inset;
或者右键刷新触发器条目 \ 右键删除触发器