初试MySQL触发器
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初试MySQL触发器相关的知识,希望对你有一定的参考价值。
文章目录
一、提出任务
(一)创建数据库
- 创建
test
数据库,字符编码采用utf8mb4
(二)创建学生表
- 创建
student
表,包含id
、name
、gender
、age
,插入至少5条记录
(三)创建日志表
- 创建
log
表,包含id
、time
、operation
、detail
1、time字段
timestamp
类型
2、operation字段
- 只能取
INSERT
、UPDATE
、DELETE
三种值
3、detail字段
- 如果是
INSERT
操作,显示新的记录内容 - 如果是
UPDATE
操作,显示旧记录->新记录
- 如果是
DELETE
操作,显示删除的记录内容
(四)创建触发器
- 三个触发器:
trigger_insert
、trigger_update
、trigger_delete
(五)测试触发器
- 对表进行增删改操作,触发上述三种触发器
- 检查在日志数据表是否增加了几条操作记录
(六)删除触发器
- 删除
trigger_insert
、trigger_update
、trigger_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:触发事件,
INSERT
、DELETE
或UPDATE
- tb_name:表示建立触发器的表名,就是在哪张表上建立触发器
- FOR EACH ROW:代表任何记录执行对应操作都会触发器(行级触发器,不写就是表级触发器)
- trigger_body:触发器的程序体,可以是一条
SQL
语句或用BEGIN
和END
包含的多条语句
(二)查看触发器
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触发器的主要内容,如果未能解决你的问题,请参考以下文章