0


初试MySQL触发器

文章目录

一、提出任务

(一)创建数据库

  • 创建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、语法格式

CREATETRIGGER 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、查看触发器创建语句

SHOWCREATETRIGGER trigger_name;

(三)删除触发器

1、语法格式

DROPTRIGGER 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条学生记录在这里插入图片描述
INSERTINTO student (name, gender, age)VALUES('杨过','男',25);INSERTINTO student (name, gender, age)VALUES('郭襄','女',18);INSERTINTO student (name, gender, age)VALUES('郭靖','男',40);INSERTINTO student (name, gender, age)VALUES('黄蓉','女',38);INSERTINTO 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在这里插入图片描述
CREATETRIGGER trigger_insert
    AFTERINSERTON student FOR EACH ROWINSERTINTO log (time, operation, detail)VALUES(NOW(),'INSERT', CONCAT('新记录:', NEW.id, NEW.name, NEW.gender, NEW.age));

2、创建更新触发器

  • 针对student表创建更新触发器trigger_update在这里插入图片描述
CREATETRIGGER trigger_update
    AFTERUPDATEON student FOR EACH ROWINSERTINTO 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在这里插入图片描述
CREATETRIGGER trigger_delete
    AFTERDELETEON student FOR EACH ROWINSERTINTO 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;在这里插入图片描述
标签: 数据库 触发器

本文转载自: https://blog.csdn.net/howard2005/article/details/124800491
版权归原作者 howard2005 所有, 如有侵权,请联系我们删除。

“初试MySQL触发器”的评论:

还没有评论