初试MySQL触发器

举报
howard2005 发表于 2022/05/17 22:09:00 2022/05/17
1.1k+ 0 0
【摘要】 文章目录 一、提出任务(一)创建数据库(二)创建学生表(三)创建日志表1、time字段2、operation字段3、detail字段 (四)创建触发器(五)测试触发器(六)删除触发器 二...

一、提出任务

(一)创建数据库

  • 创建test数据库,字符编码采用utf8mb4

(二)创建学生表

  • 创建student表,包含idnamegenderage,插入至少5条记录

(三)创建日志表

  • 创建log表,包含idtimeoperationdetail

1、time字段

  • timestamp类型

2、operation字段

  • 只能取 INSERTUPDATEDELETE三种值

3、detail字段

  • 如果是INSERT操作,显示新的记录内容
  • 如果是UPDATE操作,显示旧记录->新记录
  • 如果是DELETE操作,显示删除的记录内容

(四)创建触发器

  • 三个触发器:trigger_inserttrigger_updatetrigger_delete

(五)测试触发器

  1. 对表进行增删改操作,触发上述三种触发器
  2. 检查在日志数据表是否增加了几条操作记录

(六)删除触发器

  • 删除trigger_inserttrigger_updatetrigger_delete三个触发器

二、涉及知识点

(一)创建触发器

1、语法格式

CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_body;

  
 

2、参数说明

  • trigger_name:触发器的名称
  • trigger_time:触发时机,为BEFORE或者AFTER
  • trigger_event:触发事件,INSERTDELETEUPDATE
  • tb_name:表示建立触发器的表名,就是在哪张表上建立触发器
  • FOR EACH ROW:代表任何记录执行对应操作都会触发器(行级触发器,不写就是表级触发器)
  • trigger_body:触发器的程序体,可以是一条SQL语句或用BEGINEND包含的多条语句

(二)查看触发器

1、查看全部触发器

SHOW TRIGGERS;

  
 

2、查看触发器创建语句

SHOW CREATE TRIGGER trigger_name;

  
 

(三)删除触发器

1、语法格式

DROP TRIGGER trigger_name;

  
 

2、参数说明

  • trigger_name:触发器的名称

三、完成任务

(一)创建数据库

  • 创建test数据库,编码采用utf8mb4,执行命令:CREATE DATABASE test CHARSET='utf8mb4';
    在这里插入图片描述
  • 查看生成的数据库test
    在这里插入图片描述

(二)创建学生表

  • 打开test数据库,执行命令:USE test;
    在这里插入图片描述
  • test数据库里创建student表,执行语句:CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(8), gender CHAR(2), age INT);
    在这里插入图片描述
  • 查看student表结构
    在这里插入图片描述
  • 插入5条学生记录
    在这里插入图片描述
INSERT INTO student (name, gender, age) VALUES ('杨过', '男', 25);
INSERT INTO student (name, gender, age) VALUES ('郭襄', '女', 18);
INSERT INTO student (name, gender, age) VALUES ('郭靖', '男', 40);
INSERT INTO student (name, gender, age) VALUES ('黄蓉', '女', 38);
INSERT INTO student (name, gender, age) VALUES ('杨康', '男', 39);

  
 
  • 查看插入的表记录
    在这里插入图片描述

(三)创建日志表

  • 创建log表,执行命令:CREATE TABLE log (id INT PRIMARY KEY AUTO_INCREMENT, time TIMESTAMP, operation VARCHAR(10), detail VARCHAR(50));
    在这里插入图片描述
  • 查看日志表结构
    在这里插入图片描述

(四)创建触发器

1、创建插入触发器

  • 针对student创建插入触发器 trigger_insert
    在这里插入图片描述
CREATE TRIGGER trigger_insert
    AFTER INSERT ON student FOR EACH ROW
		INSERT INTO log (time, operation, detail)
		    VALUES (NOW(), 'INSERT', CONCAT('新记录:', NEW.id, NEW.name, NEW.gender, NEW.age));

  
 

2、创建更新触发器

  • 针对student表创建更新触发器trigger_update
    在这里插入图片描述
CREATE TRIGGER trigger_update
    AFTER UPDATE ON student FOR EACH ROW
		INSERT INTO log (time, operation, detail)
		    VALUES (NOW(), 'UPDATE', CONCAT('(', 
				    OLD.id, OLD.name, OLD.gender, OLD.age, ')', 
						'->', '(', NEW.id, NEW.name, NEW.gender, NEW.age, ')'));

  
 

3、创建删除触发器

  • 针对student表创建删除触发器trigger_delete
    在这里插入图片描述
CREATE TRIGGER trigger_delete
    AFTER DELETE ON student FOR EACH ROW
		INSERT INTO log (time, operation, detail)
		    VALUES (NOW(), 'DELETE', CONCAT('旧记录:', OLD.id, OLD.name, OLD.gender, OLD.age));

  
 

(五)查看触发器

1、查看创建的全部触发器

  • 执行命令:SHOW TRIGGERS
    在这里插入图片描述

2、创建触发器的创建语句

(1)查看插入触发器的创建语句

  • 执行命令:SHOW CREATE TRIGGER trigger_insert;
    在这里插入图片描述

(2)查看更新触发器的创建语句

  • 执行命令:SHOW CREATE TRIGGER trigger_update;
    在这里插入图片描述

(3)查看删除触发器的创建语句

  • 执行命令:SHOW CREATE TRIGGER trigger_delete;
    在这里插入图片描述

(六)测试触发器

1、测试插入触发器

  • 插入一条新记录,执行语句:INSERT INTO student (name, gender, age) VALUES ('唐韵', '女', 18);
    在这里插入图片描述
  • 为了测试插入触发器是否生效,我们只需要检查日志表
    在这里插入图片描述

2、测试更新触发器

  • 更新第6条记录,执行语句:UPDATE student SET name = '宋风', gender = '男', age = 25 WHERE id = 6;
    在这里插入图片描述
  • 为了测试更新触发器是否生效,我们只需要检查日志表
    在这里插入图片描述

6、测试删除触发器

  • 删除第6条记录,执行语句:DELETE FROM student WHERE id = 6;
    在这里插入图片描述
  • 为了测试删除触发器是否生效,我们只需要检查日志表
    在这里插入图片描述

(七)删除触发器

1、删除插入触发器

  • 执行命令:DROP TRIGGER trigger_insert;
    在这里插入图片描述

2、删除更新触发器

  • 执行命令:DROP TRIGGER trigger_update;
    在这里插入图片描述

3、删除删除触发器

  • 执行命令:DROP TRIGGER trigger_delete;
    在这里插入图片描述
  • 此时,执行命令:SHOW TRIGGERS;
    在这里插入图片描述

文章来源: howard2005.blog.csdn.net,作者:howard2005,版权归原作者所有,如需转载,请联系作者。

原文链接:howard2005.blog.csdn.net/article/details/124800491

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。