数据库(mysql)-新手笔记(触发器,存储过程)

 触发器

MySQL触发器(Trigger)是一种与表事件(如INSERT、UPDATE或DELETE)相关联的特殊类型的存储过程。

当指定表上的特定事件发生时,触发器会自动执行或激活。触发器可以在数据修改之前或之后执行,因此它们可以用于在数据插入、更新或删除时自动执行一系列操作。

模版

DELIMITER //  
CREATE TRIGGER trigger_name  
AFTER INSERT ON table_name FOR EACH ROW  
BEGIN  -- 在这里编写触发器要执行的SQL语句  -- 可以使用NEW关键字来引用新插入的行  -- 例如,假设我们想要将新插入的记录ID插入到另一个日志表中  INSERT INTO log_table (record_id, action, timestamp)  VALUES (NEW.id, 'INSERT', NOW());  
END;  
//  
DELIMITER ;

我们可以利用 创建一个触发器容易存储某个表修改或者存储

-- 创建 orders 表
CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,customer_id INT,order_date DATETIME,total_amount DECIMAL(10, 2)
);-- 创建 order_logs 表来记录 orders 表的变化
CREATE TABLE order_logs (log_id INT AUTO_INCREMENT PRIMARY KEY,order_id INT,action VARCHAR(50),log_date DATETIME
);
DELIMITER //
CREATE TRIGGER after_order_insertAFTER INSERT  ON orders FOR EACH ROW
BEGIN-- 使用 NEW 关键字引用新插入的订单记录INSERT INTO order_logs (order_id, action, log_date)VALUES (NEW.order_id, 'INSERT', NOW());
END;
//
DELIMITER ;
DELIMITER //
CREATE TRIGGER after_order_updateAFTER UPDATE ON orders FOR EACH ROW
BEGIN-- 使用 NEW 关键字引用更新后的订单记录-- 使用 OLD 关键字引用更新前的订单记录(如果需要的话)INSERT INTO order_logs (order_id, action, log_date)VALUES (NEW.order_id, 'UPDATE', NOW());-- 如果需要记录具体哪些字段被更新了,可以添加额外的逻辑
END;
//
DELIMITER ;

存储过程

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,这些语句被预先编译并存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,尤其在数据量特别庞大的情况下,利用存储过程可以达到倍速的效率提升

模版

DELIMITER 
$$
  
  
CREATE PROCEDURE 触发器名称(IN 导入的变量 数据类型, OUT 导出变量 数据类型)
# IN 表示导入形参 out 表示导出形参  
BEGIN  
    DECLARE 定义变量名 数据类型;  //声明一个变量 只能在该作用域使用
      
    -- 查询价格大于num的商品数量  
    SELECT COUNT(*) INTO count_num FROM 表名 WHERE 字段名 > 数值或变量;  
# COUNT(*) 统计行数 将其存到了count_num 中
      
    -- 根据数量范围设置不同的返回值  
    IF 变量名 > 数值 THEN  
        SET 字段名 = 数据值;  

# THEN 表示执行语句满足就执行
  
    ELSEIF 变量名 > 数值   
        SET 字段名 = 数值;  
    ELSE  
        SET 变量名 = 数值;  
    END IF;  
END
$$
  
  
DELIMITER ;

DELIMITER 
$$CREATE PROCEDURE `CountGoodsByPrice`(IN num INT, OUT total VARCHAR(255))
# IN 表示导入形参 out 表示导出形参  
BEGIN  DECLARE count_num INT;  //声明一个变量 只能在该作用域使用-- 查询价格大于num的商品数量  SELECT COUNT(*) INTO count_num FROM goods WHERE pre_price > num;  
# COUNT(*) 统计行数 将其存到了count_num 中-- 根据数量范围设置不同的返回值  IF count_num > 1000 THEN  SET total = '大于1000条';  ELSEIF count_num > 1 AND count_num <= 10 THEN  SET total = '大于1条 小于 10 条';  ELSEIF count_num > 10 AND count_num <= 1000 THEN  SET total = '大于10条小于 1000';  ELSE  SET total = '小于或等于1条';  END IF;  
END
$$DELIMITER ;

调用procedure存储过程

#调用存储过程 用 CALL
CALL CountGoodsByPrice(50, @result); 
#查询导出result的结果 
SELECT @result;
#
@ 符号用于定义用户定义的变量(user-defined variables)。这些变量与会话(session)相关联,并且可以在会话中的多个SQL语句之间共享。

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

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

相关文章

环链表寻找交点

目录 1.题目描述和出处 2.分析 3.代码 1.题目描述和出处 LCR 022. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 描述很简单&#xff0c;寻找交点&#xff0c;找到则返回交点&#xff0c;找不到返回空。 2.分析 如图&#xff1a;&#xff08;b表示环的长度&#…

springboot3.x集成nacos踩坑,并实现多环境配置

一、nacos安装部署 springboot3.x集成Nacos首先需要将Nacos从1.x升级到2.x&#xff0c;建议直接安装2.x版本&#xff0c;手动将1.x的配置信息迁移到2.x中&#xff0c;先并行一段时间&#xff0c;待全部迁移完成稳定运行之后再停掉1.x&#xff0c;升级和安装、操作请查看官方文…

Github——个人项目的二维码免费生成

一、安装 myqr 库 pip install myqr二、编写python代码 # 网站二维码免费生成 from MyQR import myqrmyqr.run(words"https://github.com/chen-si-jia/Trajectory-Long-tail-Distribution-for-MOT")三、python运行此代码&#xff0c;即可在同级目录生成二维码

C语言深入学习 --- 5.动态内存管理

文章目录 第五章 动态内存管理1.存在动态内存分配的意义2.动态内存函数2.1 malloc和free2.2 calloc2.3 realloc 3.常见的动态内存错误3.1 对NULL指针的解引用操作3.2 对动态开辟空间的越界访问3.3 对非动态开辟内存使用free释放3.4 使用free释放一块内存开辟内存的一部分3.5 对…

DailyNotes个人笔记管理工具

DailyNotes 是记录笔记和跟踪任务的应用程序&#xff0c;使用markdown进行编辑 部署 下载镜像 docker pull m0ngr31/dailynotes创建目录并授权 mkdir -p /data/dailynotes/config_dir chmod -R 777 /data/dailynotes启动容器 docker run -d --restart always --name mynot…

Java中的数据压缩和存储技术:Zip、GZip与Brotli

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;作为一名Java程序员&#xff0c;在业务开发中&#xff0c;常常面临着一个问题&#xff1a;如何高效地处理和传输这些庞大的数据呢&#xff1f;答案就在于数据压缩技术。数据压缩&#xff0c;简而言之&#xff0c…

SpringBoot+Ajax+redis实现隐藏重要接口地址

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

九型人格测试,8号领袖型人格的职业分析

8号人格&#xff0c;也叫领袖型人格&#xff0c;在九型人格中间&#xff0c;是一种天生领导的存在。他们生性开朗&#xff0c;能够和其他人建立良好的关系&#xff0c;为人不拘小节&#xff0c;遇强则强&#xff0c;坚守心中的理想和正义。不喜欢被人控制&#xff0c;喜欢自己当…

Java并发-并发模型

可以使用不同的并发模型来实现并发系统。一并发模型指定的系统协作线程如何完成他们给予的任务。不同的并发模型以不同的方式拆分任务&#xff0c;线程可以以不同的方式进行通信和协作。本并发模型教程将更深入地介绍撰写本文时&#xff08;2015年至2019年&#xff09;使用的最…

【Kotlin】Lambda表达式

1 常规调用 Lambda 表达式总结 中对 Java 的 Lambda 表达式进行了总结&#xff0c;本文将对 Kotlin 中的 Lambda 表达式进行总结。 1.1 无参函数 fun main() {var myFun: () -> Unit {println("test")}myFun() // 打印: test } 以上代码等价于&#xff1a; f…

【每日一问】Cookie、Session 和 Token 有什么区别?

Cookie、Session 和 Token 通常都是用来保存用户登录信息的技术&#xff0c;但三者有很大的区别&#xff0c;简单来说 Cookie 适用于简单的状态管理&#xff0c;Session 适用于需要保护用户敏感信息的场景&#xff0c;而 Token 适用于状态无关的身份验证和授权。 具体来说&…

大模型时代,华为与中软国际携手“打通AI落地应用最后一公里”

文 | 智能相对论 作者 | 叶远风 大模型驱动千行百业智能化变革已经成为广泛共识&#xff0c;下一步的问题是&#xff0c;企业要如何更好地推进&#xff1f; 近日&#xff0c;“2024中关村论坛系列活动——第二届北京人工智能产业创新发展大会”在北京国家会议中心成功举办&a…

每天一个数据分析题(一百九十四)

假如HS银行想进行用户购买理财产品情况研究的样本量确定和样本选取方法&#xff0c;下列说法哪些是正确的&#xff1f; A. 当我们不知道用户对某款理财产品是否感兴趣的具体比例时&#xff0c;通常假设 p0.5 来计算样本量。 B. 样本量的计算中&#xff0c;e 代表了希望对真值…

const shared_ptr<int>和shared_ptr<const int>的区别

const shared_ptr 和 shared_ptr 在 C 中表示两种不同的概念&#xff0c;尽管它们都与智能指针和常量性有关。下面是它们之间的主要区别&#xff1a; const shared_ptr 当你声明一个 const shared_ptr&#xff0c;你实际上是在声明一个指向 int 的智能指针&#xff0c;而这个…

零基础学习JS--基础篇--数字和日期

数字 javascript中常用的四种数字进制&#xff1a;十进制、二进制、八进制和十六进制。 这些进制都具有通用性&#xff0c;如果你有语言基础则可以略过&#xff0c;下面说一下指数形式。 指数形式&#xff1a; 0e-5 // 0 0e5 // 0 5e1 // 50 175e-2 // 1.75 1e3 …

MacOS终端命令行死循环

一、原因 &#xff08;在vim ~/.bash_profile写了source ~/.bash_profile&#xff09; 二、解决办法 1、contrl c 手动停止死循环 2、vim ~/.bash_profile &#xff08;使用 Vim 编辑器打开 .bash_profile 文件&#xff09; 3、键盘输入i进入编辑模式&#xff0c;编辑完成…

如何建站?

1. 选择域名&#xff1a;短且易记&#xff0c;与网站内容相关。 2. 购买主机&#xff1a;选择稳定、安全且价格合适的主机服务商。 3. 选择网站程序&#xff1a;根据需求选择网站类型&#xff0c;如博客、企业站、电商。 4. 设计网站&#xff1a;确定布局、导航、色彩&#xff…

[剑指offer] 数组中重复的数字

目录 1. 题目描述 2. 代码实现 1. 题目描述 📚 题目描述:在一个长度为 的数组里的所有数字都在 0 到 n−1 的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为 7 的数组…

yudao-cloud 学习笔记

前端代码 浏览器打开 https://cloud.iocoder.cn/intro/ F12 执行代码 var aaa $(".sidebar-group-items").find("a"); var ll[]; var tt[]; for(var i0;i<aaa.length;i ){ ll.push("https://doc.iocoder.cn" $(aaa[i]).attr("href&quo…

云计算 3月4号 (自配本地和远程yum源)

自建yum源 本地源 一、使用本地的镜像文件来制作yum源(做完记得删除) 1、挂载dvd镜像或将镜像拷贝到机器中 mkdir /yum-repo mount /dev/cdrom /yum-repo # 如果我们在设置中挂载了镜像使用这个方法 mount 镜像的路径 /yum-repo # 如果我们拷贝镜像到了系统中&#xff0c;可…