当前位置: 首页 > 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;...

谷歌Gemini API新层级:机遇与挑战并存

谷歌为Gemini API添加Flex和Priority层级&#xff0c;可根据工作负载分配任务。同时发布Gemma 4。新层级虽简化开发工作&#xff0c;但也引发受监管行业担忧&#xff0c;对企业AI战略有重要意义。新层级助力开发者谷歌为Gemini API新增Flex Inference和Priority Inference层级&…...

小米智能家居与Home Assistant零门槛实战:从集成到优化全流程指南

小米智能家居与Home Assistant零门槛实战&#xff1a;从集成到优化全流程指南 【免费下载链接】ha_xiaomi_home Xiaomi Home Integration for Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home 小米智能家居集成项目&#xff08;ha_xia…...

Dify如何助力企业提升客户体验

Dify 主要通过打造更智能、更快速的客服体系&#xff0c;从根本上提升客户体验。其核心在于利用 AI 应用开发平台的能力&#xff0c;实现服务的即时响应、精准解答和个性化互动。&#x1f916; 724 智能客服&#xff0c;告别等待全天候秒级响应&#xff1a;利用 Dify 的 Workfl…...

交通运输部关于印发《交通运输综合应急预案》等5项突发事件应急预案的通知

交通运输部于 2026 年印发的《交通运输综合应急预案》等五项突发事件应急预案&#xff0c;构建起总领统筹、分领域专项、全链条衔接的交通运输应急管理体系&#xff0c;分别从综合协同、公路设施、水路运行、道路运输、工程建设五个维度&#xff0c;明确了突发事件预防、预警、…...

后软件时代:当交互成为本能

从显式操作到隐式协同,从界面到无界 范式转移:从“使用工具”到“与伙伴共存” 当软件不再以独立形态存在,交互的本质将从主动操作变为自然协同。这不仅是技术变革,更是人类与机器关系的根本重构。 交互层级的演进 第一层:意图直连 过去:打开App → 点击按钮 → 输入…...

ai赋能抓取技能:在快马平台让大模型为openclaw规划无碰撞抓取轨迹

最近在做一个机械臂抓取项目时&#xff0c;遇到了一个头疼的问题&#xff1a;如何在复杂环境中规划无碰撞的抓取轨迹。传统方法需要手动调试大量参数&#xff0c;效率很低。后来尝试用AI辅助开发&#xff0c;发现效果出奇地好&#xff0c;今天就来分享一下这个探索过程。 构建测…...

基于单片机的自行车里程表设计|附源码

基于单片机的自行车里程表设计 源码&#xff1a;点击下载源码 项目简介 这是一个基于51单片机的自行车里程表设计项目&#xff0c;能够实时显示自行车的行驶速度、累计里程&#xff0c;并提供时间显示、超速报警等功能。该项目适合作为单片机课程设计的学习案例&#xff0c;…...

突破视频下载壁垒:yt-dlp-gui的全场景应用指南

突破视频下载壁垒&#xff1a;yt-dlp-gui的全场景应用指南 【免费下载链接】yt-dlp-gui Windows GUI for yt-dlp 项目地址: https://gitcode.com/gh_mirrors/yt/yt-dlp-gui 在数字化时代&#xff0c;视频内容已成为信息传递与知识获取的重要载体。然而&#xff0c;多数平…...

6GB显存也能玩转AI绘画:FLUX.1-dev FP8量化模型完全指南

6GB显存也能玩转AI绘画&#xff1a;FLUX.1-dev FP8量化模型完全指南 【免费下载链接】flux1-dev 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/flux1-dev 还在为显卡配置不足而无法体验AI绘画的魅力而烦恼吗&#xff1f;FLUX.1-dev FP8量化模型正是为你量身…...

3步掌握猫抓扩展:网页资源嗅探工具全面使用指南

3步掌握猫抓扩展&#xff1a;网页资源嗅探工具全面使用指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为在线视频无法保存而困扰吗&#…...