当前位置: 首页 > news >正文

SQL - 触发器

  • 触发器是在插入、更新和删除语句前后自动执行的一堆SQL代码,但是触发器被触发后只会执行一次,通常我们使用触发器增强数据的一致性。
  • 创建触发器
    • -- 创建触发器
      drop trigger if exists payments_after_insert;
      delimiter $$
      -- 在 payments表 insert 之后 触发 
      create trigger payments_after_insertafter insert on paymentsfor each row 	-- 作用于受影响的每一行
      beginupdate invoicesset payment_total=payment_total + new.amountwhere invoice_id = new.invoice_id;
      end $$
      delimiter ;insert into payments
      values(default,5,3,'2019-01-01',10,1);
      select *
      from invoices;-- delete
      drop trigger if exists payments_after_delete;
      delimiter $$
      create trigger payments_after_deleteafter delete on paymentsfor each row
      beginupdate invoicesset payment_total=payment_total-old.amountwhere invoice_id=old.invoice_id;
      end$$
      delimiter ;delete 
      from payments
      where invoice_id=3;
  • 查看触发器
    • show triggers like'payments%'
  • 使用触发器进行审计
    • 触发器另一个常见用途,为了 审计的目的 而 记录对数据库的修改
    • drop trigger if exists payments_after_insert;
      delimiter $$
      -- 在 payments表 insert 之后 触发 
      create trigger payments_after_insertafter insert on paymentsfor each row 	-- 作用于受影响的每一行
      beginupdate invoicesset payment_total=payment_total + new.amountwhere invoice_id = new.invoice_id;insert into payments_audit		-- 审计记录values(new.client_id,new.date,new.amount,'insert',now());
      end $$
      delimiter ;drop trigger if exists payments_after_delete;
      delimiter $$
      create trigger payments_after_deleteafter delete on paymentsfor each row
      beginupdate invoicesset payment_total=payment_total-old.amountwhere invoice_id=old.invoice_id;insert into payments_audit		-- 审计记录values(old.client_id,old.date,old.amount,'delete',now());
      end$$
      delimiter ;insert into payments
      values(default,5,3,'2019-01-01',10,1);
      select *
      from invoices;delete 
      from payments
      where invoice_id=3;SELECT * FROM payments_audit;	-- 查询审计记录表
      

相关文章:

SQL - 触发器

触发器是在插入、更新和删除语句前后自动执行的一堆SQL代码,但是触发器被触发后只会执行一次,通常我们使用触发器增强数据的一致性。创建触发器 -- 创建触发器 drop trigger if exists payments_after_insert; delimiter $$ -- 在 payments表 insert 之后…...

Redis中缓存穿透、缓存击穿、缓存雪崩的详解

如何理解Redis缓存的穿透、击穿、雪崩问题: 缓存穿透 是指缓存中和数据库中都没有数据,而用户不断访问,导致这个不存在的数据每次请求都要到存储层去查询,这样失去了意义。 缓存穿透的解决方案有哪些? 缓存null值布隆过滤增强…...

[Meachines] [Medium] Popcorn SQLI+Upload File+PAM权限提升

信息收集 IP AddressOpening Ports10.10.10.6TCP:22,80 $ nmap -p- 10.10.10.6 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 5.1p1 Debian 6ubuntu2 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: …...

【Linux】python进程管理之supervisor安装使用教程

安装supervisor pip install supervisor生成配置文件 echo_supervisord_conf > /etc/supervisord.conf修改配置文件 vim /etc/supervisord.conf[unix_http_server] file/run/supervisor.sock ; the path to the socket file[supervisord] logfile/var/log/supervisord.log…...

BEM架构

视频 总结&#xff1a; BEM架构&#xff1a;一个命名类的规范而已&#xff0c;说白了就是如何给类起名字使用sass的目的&#xff1a;在<style>中模块化的使用类名&#xff0c;同时减少代码数量 1、 BEM架构 &#xff08;通义灵码查询结果&#xff09; BEM (Block Ele…...

物联网(IoT)详解

物联网&#xff08;IoT&#xff09;详解 1. IoT定义简介2. IoT工作原理3. IoT关键技术4. 物联网与互联网区别5. IoT使用场景6. 开源物联网平台7. 参考资料 1. IoT定义简介 首先第一个问题&#xff0c;什么是物联网&#xff08;IoT&#xff09;? 物联网&#xff08;英文&#…...

ansync/await 运行流程图

1、流程图&#xff1a; 2、await 之后的方法是何时执行&#xff0c;如何执行的&#xff1f; await 的方法在 Task 执行完成之后&#xff0c;通过调用 Finish 方法执行的。 具体的执行步骤是先将 MoveNext 方法注册到 Task 的回调里&#xff0c;然后在 Task 执行完后调用这个方法…...

生产环境docker nginx+php8.0镜像

生产环境docker nginxphp8.0镜像 自定义创建php8.0镜像&#xff0c;创建dockerfile FROM php:8.0-fpm# 安装系统依赖 RUN sed -i s|http://deb.debian.org/debian|http://mirrors.aliyun.com/debian|g /etc/apt/sources.list && \apt-get update && apt-get i…...

【Hadoop】核心组件深度剖析:HDFS、YARN与MapReduce的奥秘

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Hadoop简介 2、Hadoop生态系统概览 二、Hadoo…...

Docker Swarm部署SpringCloud Alibaba微服务踩坑记录

为了方便部署和维护微服务项目&#xff0c;还是得上集群部署方案&#xff0c;决定采用Docker的swarm&#xff0c;为什么不是k8s&#xff0c;因为部署骑来又是个新的工具&#xff0c;之前就一直用的docker&#xff0c;自带了类k8s的工具&#xff0c;索性就直接使用swarm了&#…...

深入理解Spring Boot中的AOP应用:从基础组件到高级功能的实现

深入理解Spring Boot中的AOP应用&#xff1a;从基础组件到高级功能的实现 在现代Java开发中&#xff0c;Spring Boot因其简洁性和强大的功能而被广泛采用。而AOP&#xff08;面向切面编程&#xff09;作为Spring框架的核心特性之一&#xff0c;为开发者提供了在不修改业务代码的…...

《区块链与监管合规:在创新与规范之间寻求平衡》

区块链技术作为近年来最具创新性和颠覆性的技术之一&#xff0c;已经在金融、供应链、医疗、物联网等多个领域展现出巨大的潜力。然而&#xff0c;随着其应用的不断拓展&#xff0c;如何应对监管和合规性要求成为了区块链发展道路上一个至关重要的问题。 区块链的去中心化、匿…...

Nuxt3【服务器】server 详解

server 文件夹中的内容&#xff0c;会被自动注册为API和服务器处理程序。 服务器 API 对应路径 server/api server/api/hello.ts export default defineEventHandler((event) > {return {hello: world} })页面中使用 <script setup lang"ts"> const { da…...

防火墙技术原理与应用

防火墙概述 防火墙概念 防火墙:通过一种网络安全设备,控制安全区域间的通信,隔离有害通信,进而阻断网络攻击。一般安装在不同安全区域边界处,用于网络通信安全控制,由专用硬件或软件系统组成。 根据网络安全信任程度和需保护的对象,划分安全区域 公共外部网络:Inter…...

【BUU】[NewStarCTF 2023 公开赛道]Final -CP读取文件内容

漏洞检测 访问首页发现是ThinkPHP5 的站点 用工具扫描一下,发现存在ThinkPHP5.0.23 RCE漏洞 访问验证,写入shell 成功写入shell. 根目录发现flag,但是权限不足 提权获取flag 准备提权,这里一开始尝试了find,但是find权限不足 尝试采用cp命令,移动到web目录,发现访问还是…...

火绒安全:一款强大且高效的国产杀毒软件

火绒安全&#xff08;Huorong Security&#xff09;是一款国产的杀毒软件&#xff0c;以其轻量、高效和对系统资源占用低的特点受到广泛欢迎。与许多其他杀毒软件不同&#xff0c;火绒注重低调实用&#xff0c;旨在为用户提供无干扰且稳定的系统保护。 火绒安全的主要特点&…...

Oracle 的DBA有哪些权限

Oracle数据库的**DBA&#xff08;数据库管理员&#xff09;**拥有全部特权&#xff0c;是Oracle数据库系统最高权限的用户。DBA的权限包括但不限于&#xff1a; 1.创建和管理数据库结构&#xff1a; DBA可以创建、修改和删除数据库中的所有对象&#xff0c;如表、索引、视图等&…...

在navicat上运行sql文件

前言 本文简单介绍在navicat上运行sql文件 第一步&#xff1a; 打开navicat&#xff0c;点击连接->mysql 第二步&#xff1a; 输入连接名&#xff0c;可以随便取 然后点击确定 第三步&#xff1a; 双击连接名&#xff0c;颜色变化代表连接上了 第四步&#xff1…...

STM32裸机和RTOS中的线程安全问题及STM32cubeMX中的线程安全策略

STM32线程安全问题 术语“线程” 和“多线程” 适用于裸机和基于RTOS的应用程序&#xff0c;线程安全问题并不只存在于基于RTOS的应用程序中&#xff1b;裸机应用程序中也存在这个问题&#xff0c;在裸机应用程序中&#xff0c;中断服务程序允许调用C库函数。线程安全问题可能…...

图的遍历

一、深度优先遍历(DFS) 二、广度优先遍历&#xff08;BFS&#xff09;...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...