学习笔记--MySQL触发器

2022/4/23 19:12:39

本文主要是介绍学习笔记--MySQL触发器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 触发器的介绍:

触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。

触发器的类型:

        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;

或者右键刷新触发器条目 \ 右键删除触发器

 

 



这篇关于学习笔记--MySQL触发器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程