【MySQL】触发器

news2024/10/5 21:15:53

目录

概述

操作-创建触发器

操作-NEW与OLD

其他操作

注意事项

概述

介绍

触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据

库服务器上的SQL片段,但是触发器无需调用,当对数据库表中的数据执行DML操作时自动触发这

个SQL片段的执行,无需手动条用。 在MySQL中,只有执行insert,delete,update操作时才能触发

触发器的执行 触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验

等操作 。 使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似

的。现在触发器还只支持行级触发,不支持语句级触发。

触发器的特性

1、什么条件会触发:I、D、U

2、什么时候触发:在增删改前或者后

3、触发频率:针对每一行执行

4、触发器定义在表上,附着在表上

操作-创建触发器

格式

1、创建只有一个执行语句的触发器

create trigger 触发器名 before|after 触发事件
on 表名 for each row 
执行语句;

2、创建有多个执行语句的触发器

create trigger 触发器名 before|after  触发事件 
on 表名 for each row
begin
     执行语句列表
end;

操作

-- 数据准备
create database if not exists mydb10_trigger;
use mydb10_trigger;
 
-- 用户表
create table user(
    uid int primary key ,
    username varchar(50) not null,
    password varchar(50) not null
);
-- 用户信息操作日志表
create table user_logs(
    id int primary key auto_increment,
    time timestamp,
    log_text varchar(255)
);

操作

-- 如果触发器存在,则先删除
drop trigger if  exists trigger_test1;
 
-- 创建触发器trigger_test1
create trigger trigger_test1
after insert on user -- 触发时机:当添加user表数据时触发
for each row
insert into user_logs values(NULL,now(), '有新用户注册');
 
-- 添加数据,触发器自动执行并添加日志代码
insert into user values(1,'张三','123456');

操作

-- 如果触发器trigger_test2存在,则先删除
drop trigger if exists trigger_test2;

-- 创建触发器trigger_test2
delimiter $$
create trigger trigger_test2
after update on user  -- 触发时机:当修改user表数据时触发
for each row -- 每一行
begin
insert into user_logs values(NULL,now(), '用户修改发生了修改');
end $$
 
delimiter ;
 
-- 添加数据,触发器自动执行并添加日志代码
update user set password = '888888' where uid = 1;

操作-NEW与OLD

格式

MySQL 中定义了 NEW 和 OLD,用来表示触发器的所在表中,触发了触发器的那一行数据,来引

用触发器中发生变化的记录内容,具体地:

使用方法: NEW.columnName (columnName为相应数据表某一列名)

操作

create trigger trigger_test3 after insert
on user for each row
insert into user_logs values(NULL,now(),concat('有新用户添加,信息为:',NEW.uid,NEW.username,NEW.password));
 
-- 测试
insert into user values(4,'赵六','123456');

其他操作

操作-查看触发器

show triggers;

操作-删除触发器

-- drop trigger [if exists] trigger_name 
drop trigger if exists trigger_test1;

注意事项

1.MYSQL中触发器中不能对本表进行 insert ,update ,delete 操作,以免递归循环触发

2.尽量少使用触发器,假设触发器触发每次执行1s,insert table 500条数据,那么就需要触发500

次触发器,光是触发器执行的时间就花费了500s,而insert 500条数据一共是1s,那么这个insert的

效率就非常低了。

3. 触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资

源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序|前端技术主要框架分析

1.框架 微信提供了一套自己的用于开发小程序的前端框架,和目前主流的前端框架相比,其既有类似的地方,也有特殊的地方。 特殊的地方在于其只能在微信小程序开发工具内使用,并做了相对严格的使用和配置限制,开发者必须按照其规定的用法来使用。一些外部的框架和插件在小程…

apis-day7综合案例

apis-day7综合案例-小兔鲜案例注册 需求①: 发送验证码 用户点击之后,显示 05秒后重新获取 时间到了,自动改为 重新获取 需求②: 用户名验证(注意封装函数 verifyxxx) 正则 /1{6,10}$/ 如果不符合要求…

非零基础自学Golang 第1章 走进Go 1.1 Go编程语言概述 1.1.3 使用Go 语言的项目

非零基础自学Golang 文章目录非零基础自学Golang第1章 走进Go1.1 Go编程语言概述1.1.3 使用Go 语言的项目第1章 走进Go 1.1 Go编程语言概述 1.1.3 使用Go 语言的项目 Go语言在2009年首次公开发布后受到越来越多的开发者的关注,Go语言社区不断壮大,开源…

【深度学习】李宏毅2021/2022春深度学习课程笔记 - Deep Learning Task Tips

文章目录一、深度学习步骤回顾二、常规指导三、训练过程中Loss很大3.1 原因1:模型过于简单3.2 原因2:优化得不好3.3 原因1 or 原因2 ?四、训练过程Loss小。测试过程Loss大4.1 原因1:过拟合 Overfitting4.2 原因2:Misma…

windows 10 HBase保姆级安装教程

安装HDFS 将下载好的hadoop-2.6.5.zip解压到自己的磁盘文件,将解压后的文件夹hadoop-2.6.5重命名为hadoop; 解压hadoopbin.zip,将解压后的文件夹打开,里面的文件复制到上一步的hadoop文件夹下的bin文件,直接覆盖同名文…

蓝牙模块HC-05使用指南

概述 HC-05蓝牙模块是一种基于蓝牙协议的简单无线通信设备。该模块基于BC417单芯片蓝牙IC,符合蓝牙v2.0标准,支持UART和USB接口。 具有两种工作模式:命令响应工作模式和自动连接工作模式。 当模块处于命令响应工作模式(或者AT模…

文件传输利器Croc

概述 一般而言,Linux系统是没有用户界面的,所有操作都是在命令行里。 然后在安装搭建集群,如分布式的Hadoop集群时,经常需要在多个Server之间传输文件。两个server之间的文件传输,一般会想到FTP或SSH两种方式。使用F…

监控系列(二)Dem对接Prometheus+grafana显示

一、概括 本篇不涉及达梦数据库搭建以及Dem的搭建,操作环境需提前准备prometheus以及grafana的搭建,请跳转到前文查看整体的对接流程如图所示 二、Dem对接prometheus 前提 需确保当前Dem,已有集群纳入监管 配置Dem的监控机器数据指标 prome…

第十九章 Bellman-Ford算法(由SPFA算法逆推BF,独特解读,超级详细)

第十九章 Bellman-Ford算法一、SPFA算法回顾:二、Bellman-Ford算法1、算法推导:1、算法模板:三、例题:1、问题:2、模板:3、分析:一、SPFA算法回顾: 我们在第18章中利用dijkstra算法…

【多数据源动态切换】Spring Boot中实现多数据源动态切换效果(1):通过继承AbstractRoutingDataSource类实现

在Spring Boot中,可以通过多种方式实现多数据源的动态切换效果,本篇介绍第一种实现方案。 一 AbstractRoutingDataSource Spring Boot提供了org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource 这个类,其中#determineC…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园花卉销售系统ef5ox(1)

做毕业设计一定要选好题目。毕设想简单,其实很简单。这里给几点建议: 1:首先,学会收集整理,年年专业都一样,岁岁毕业人不同。很多人在做毕业设计的时候,都犯了一个错误,那就是不借鉴…

redis之作为分布式锁使用

写在前面 本文一起看下redis作为分布式锁使用的相关内容。 1:怎么算是锁或没锁 锁和没锁本身其实就是用一个变量的值来表示,比如变量lock,当值为1时代表处于上锁状态,当值为0时表示没有锁,那么多线程想要获取锁的话…

【网络工程】8、实操-万达酒店综合项目(二)

接上篇《7、实操-万达酒店综合项目(一)》 之前我们讲解了酒店网络项目的整体需求文档,包括项目背景、总体架构设计以及网络功能域划分、配置标准、路由规划等。本篇我们就来按照项目要求进行模拟拓扑的构建实操。 一、总体架构效果 按照之前…

力扣 1827. 最少操作使数组递增

题目 给你一个整数数组 nums (下标从 0 开始)。每一次操作中,你可以选择数组中一个元素,并将它增加 1 。 比方说,如果 nums [1,2,3] ,你可以选择增加 nums[1] 得到 nums [1,3,3] 。 请你返回使 nums 严…

2.10.0 以太网 传统STP生成树简介、STP工作方式简单介绍

2.10.0 以太网 传统STP生成树(简介、工作方式) 作用: STP(Spanning Tree Prortoco)生成树协议,它的出现解决了交换机网络环路的问题。 交换机网络中收到BUM帧的时候,将会进行泛洪的操作&…

HCIA 以太网的帧

一、前言 网络经常会遇到一些词汇,比如包、报文、帧,其概念如下: 1)帧(frame):数据链路层的协议数据单元,它包括三部分:帧头、数据部分、帧尾。其中,帧头和…

vector容器模拟实现(上)

1.1:模板设置 因为不能与库已经有的vector冲突,首先定义命名空间namespace my 使用类模板。 1.2:成员变量 vector有size,capacity,同时也要进行扩容操作和缩容(shrink to fit)操作,所以需要3个迭代器。 p…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java杨柳农贸市场摊位管理系统qr3ri

大四计算机专业的同学们即将面临大学4年的最后一次考验--毕业设计。通过完成毕业设计来对过去4年的大学学习生活做一个总结,也是检验我们学习成果的一种方式,毕业设计作品也是我们将来面试找工作的一个敲门砖。 选题前先看看自己掌握哪些技术点、擅长哪…

mysql首次安装error 1045 28000解决

mysql首次安装error 1045 28000解决 首先找到了这个教程,按其操作一步一步来,发现到登录输入密码这一步,怎么样都报错 2021MySql-8.0.26安装详细教程(保姆级) 然后按照这篇操作,但还是不行 MySQL安装1045错…

[附源码]Python计算机毕业设计Djangoospringboot作业管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…