初试MySQL触发器
【摘要】
文章目录
一、提出任务(一)创建数据库(二)创建学生表(三)创建日志表1、time字段2、operation字段3、detail字段
(四)创建触发器(五)测试触发器(六)删除触发器
二...
一、提出任务
(一)创建数据库
- 创建
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;
- 1
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;
- 1
2、查看触发器创建语句
SHOW CREATE TRIGGER trigger_name;
- 1
(三)删除触发器
1、语法格式
DROP TRIGGER trigger_name;
- 1
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);
- 1
- 2
- 3
- 4
- 5
- 查看插入的表记录

(三)创建日志表
- 创建
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));
- 1
- 2
- 3
- 4
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, ')'));
- 1
- 2
- 3
- 4
- 5
- 6
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
- 2
- 3
- 4
(五)查看触发器
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)