Mysql数据库 13.SQL语言 触发器

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: Mysql数据库 13.SQL语言 触发器

一、触发器(操作日志表)

1.介绍

不需要主动调用的一种储存过程,是一个能够完成特定过程,存储在数据库服务器上的SQL片段。

对当前表中数据增删改查的一种记录<日志表>,根据触发器自动执行,记录当前操作

2.触发器的使用

2.1 手动进行操作记录

1.创建日志表
代码实现
#创建日志表
create table stulogs(
  id int primary key auto_increment,#主键自增 autu_increment
  time timestamp,#操作类型的时间
  log_text varchar(200)#记录当前所做的具体操作
);
运行结果

2.向学生表中添加一条数据
代码实现
#向学生表中添加一条数据
insert into students (stu_num,name,stu_gender,stu_age,cid)
values(
  '20220112','小丽','女',20,2
);
运行结果

3.手动进行日志的记录 新增记录
代码实现
insert into stulogs(time,log_text) values(now(),'添加20222012学生信息');
运行结果

4.对表修改结果
students表

日志表stulogs

2.2 使用触发器自动进行操作记录

1.创建触发器 trigger
语法:关键字:trigger

create trigger 触发器的名字

<before|after>                        #定义触发器的触发时机

<新增insert|删除delete|修改update>                #定义数据操作语言DML类型

on <表名>                        #指定具体是哪张表

for each row                        #声明为行级触发器(只要操作一条记录就能触发触发器执行一次)

具体的触发器操作

案例

通过触发器的方式来进行日志记录

代码实现
#通过触发器的方式来进行日志记录
create trigger tri_test1
after insert on students
for each row      #行级触发器
insert into stulogs(time,log_text)
  values(now(),concat('添加',new.stu_num,'学生信息'));
运行结果

2.查看触发器

show triggers;

代码实现
#查看触发器
show triggers;
运行结果

3.测试触发器

代码实现
#触发器自动执行
#新增数据操作
insert into students (stu_num,name,stu_gender,stu_age,cid)
  values('20220113','小美','女',21,1);
运行结果

对表修改结果

触发器日志表自动存储结果

4.删除触发器

语法

drop trigger 触发器名;

代码实现
drop trigger stulogs;
运行结果

二、NEW与OLD

介绍

new与old关键字用来在触发器中获取出发这个触发器的数据库操纵语言DML的数据

new:在触发器中获取insert操作添加的数据,update操作修改后的记录

old:在触发器中用于获取delete操作删除前的数据,update操作修改前的数据

同时新增多条数据

代码实现
#同时新增多条数据
insert into students (stu_num,name,stu_gender,stu_age,cid)
  values('20220114','小小','男',18,1),('20220115','郭靖','男',20,2);

运行结果

对表修改结果

students表

log_text日志表

修改触发器

新增一个触发器,记录修改操作
create trigger tir_test3
after update on students
for each row 
insert into stulogs(time,log_text) values(now(),concat('修改学生信息为',new.stu_num,new.name));
修改数据

update 表名 set 列名='修改后的数据' where 条件;

代码实现
#修改数据
update students set name='大黄' where stu_num=20220114;
运行结果

表数据修改结果

表数据修改

查看触发器
代码实现
#查看触发器
show triggers;
运行结果,显示触发器记录

案例

修改数据并触发器记录

代码实现
#删除数据
delete from students where name='大黄';
#修改数据
update students set name='蓝' where stu_num=20220115;
#添加删除触发器
create trigger tir_test4 
after update on students
for each row 
insert into stulogs(time,log_text) values(now(),concat('将学员姓名从【',old.name,'】修改为【',new.name,'】'));
运行结果

表数据修改结果

三、触发器使用总结


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8天前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
45 2
|
5天前
|
SQL 存储 关系型数据库
数据库开发之mysql前言以及详细解析
数据库开发之mysql前言以及详细解析
14 0
|
1天前
|
SQL 关系型数据库 MySQL
【MySQL】SQL优化
【MySQL】SQL优化
|
3天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
13 0
|
4天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
10天前
|
SQL 关系型数据库 MySQL
MySQL环境搭建——“MySQL数据库”
MySQL环境搭建——“MySQL数据库”
|
10天前
|
SQL NoSQL 关系型数据库
初识MySQL数据库——“MySQL数据库”
初识MySQL数据库——“MySQL数据库”
|
13天前
|
关系型数据库 MySQL 数据库
数据库基础(mysql)
数据库基础(mysql)
|
13天前
|
SQL 关系型数据库 MySQL
DQL语言之基础查询(mysql)
DQL语言之基础查询(mysql)
|
13天前
|
SQL 关系型数据库 MySQL
DQL语言之常见函数(mysql)
DQL语言之常见函数(mysql)