初试MySQL触发器

Posted howard2005

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初试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、语法格式

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;

以上是关于初试MySQL触发器的主要内容,如果未能解决你的问题,请参考以下文章

初试GH-OST(转)

初试mysql

python访问mysql初试--菜鸟笔记

mysql-学习-8-20170522-初试复制

mysql xtrabackup 初试

MySQL master-slave主从复制环境搭建初试