本文介绍: 1. MySQL触发器概念作用触发器概念触发器是一种特殊存储过程,它在试图更改触发器所保护数据自动执行触发器与存储过程异同相同点:1. 触发器是一种特殊存储过程,触发器和存储过程一样是一个能够完成特定功能存储数据库服务器上的SQL片段不同点:2. 存储器调用需要调用SQL片段,而触发器不需要调用,当对数据库表中数据执行DML操作自动触发这个SQL片段的执行,无需手动调用。在MySQL中,只有执行insert,delete,update操作时才能触发触发器的执行;触

1. MySQL触发器的概念作用

触发器概念:触发器是一种特殊存储过程,它在试图更改触发器所保护的数据时自动执行

触发器与存储过程异同
相同:1. 触发器是一种特殊存储过程,触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段。
不同:2. 存储器调用时需要调用SQL片段,而触发器不需要调用,当对数据库表中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动调用。

触发器的特性
在这里插入图片描述
触发器的作用

  1. 安全性能够基于数据库的值使用具有操作数据库的某种权利。
  1. 审计。能够跟踪用户对数据库的操作。
  1. 实现复杂的数据完整规则
  1. 实现复杂的非标准的数据库相关完整性规则。触发器能够对数据库中相关的表进行连环更新。比如,在authsauthor_code列上的删除触发器可导致对应删除在其他表中的与之匹配的行。
  1. 同步实时复制表中的数据。
  2. 自己主动计算数据值,假设数据的值达到了一定的要求,则进行特定的处理。比如,假设公司帐号上的资金低于5万元则马上给財务人员发送警告数据。

1.1 创建触发器

在这里插入图片描述

create database if not exists mydb01_trigger;

use mydb01_trigger;

-- 用户

create table if not exists user(
 uid int primary key auto_increment,
 username varchar(50) not null,
 password varchar(50) not null
)default charset=utf8;

-- 用户信息操作日志
create table if not exists user_logs(
 id int primary key auto_increment,
 time timestamp,
 log_text varchar(100)
 )default charset=utf8;
 
-- 需求1:当user添加一行数据,则会自动在user_log添加日志记录
-- 定义触发器: trigger_test1
create trigger trigger_test1 after insert on user for each row
insert into user_logs values(NULL,now(),'new');

-- 在user表添加数据,让触发器自动执行
insert into user values(2,'zbb','123456');

1.2 触发器类型NEW和OLD的使用

在这里插入图片描述
在这里插入图片描述


create database if not exists mydb01_trigger;

use mydb01_trigger;

-- 用户表

create table if not exists user(
 uid int primary key auto_increment,
 username varchar(50) not null,
 password varchar(50) not null
)default charset=utf8;

-- 用户信息操作日志表

create table if not exists user_logs(
 id int primary key auto_increment,
 time timestamp,
 log_text varchar(255)
 )default charset=utf8;
 
-- 需求1:当user表添加一行数据,则会自动在user_log添加日志记录
-- 定义触发器: trigger_test1
create trigger trigger_test1 after insert on user for each row
insert into user_logs values(NULL,now(),'new');

-- 在user表添加数据,让触发器自动执行
insert into user values(3,'zbb','123456');
 
 
 -- NEW和OLD
 -- insert 触发器
 -- NEW
 -- 定义触发器: trigger_test2
drop trigger trigger_test1
create trigger trigger_test2 after insert on user for each row
insert into user_logs values(NULL,now(),concat('有新用户添加,信息为:',NEW.username,NEW.password));

insert into user values(4,'abb','123456');

 -- update 触发器
 -- NEW
 -- 定义触发器: trigger_test3
 -- OLD
drop trigger trigger_test2
create trigger trigger_test3 after update on user for each row
insert into user_logs values(NULL,now(),concat('有用户信息修改,旧数据是:',OLD.uid,OLD.username,OLD.password));

update user set password = '00000' where uid=3;

 -- NEW
 drop trigger trigger_test3
create trigger trigger_test4 after update on user for each row
insert into user_logs values(NULL,now(),concat('有用户信息修改:新数据是',NEW.uid,NEW.username,NEW.password));

update user set password = '666666' where uid=3;

-- delete类型触发器
-- OLD
create trigger trigger_test5 after delete on user for each row
insert into user_logs values(NULL,now(),concat('有用户被删除,删除信息为:',OLD.uid,OLD.username,OLD.password));

delete from user where uid=3;

参考

https://www.cnblogs.com/mengfanrong/p/3851410.html
https://www.bilibili.com/video/BV1iF411z7Pu?p=126&spm_id_from=pageDriver

原文地址:https://blog.csdn.net/A496608119/article/details/123277898

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_36542.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注