MySQL存储过程、触发器、视图
数据库中的存储过程、触发器和视图是三种常用的数据库对象,它们在管理数据、优化性能和简化复杂操作中起着重要的作用。下面是每种对象的详细介绍和示例:
存储过程
存储过程是一组为了执行特定功能而预编译的SQL语句。它类似于编程中的函数,可以执行复杂的计算,包含逻辑控制语句(如IF,LOOP,WHILE),并可被数据库中的其他程序调用。
优点:
- 减少网络流量:多个操作可以在单个调用中完成。
- 提高性能:由于预编译,执行更快。
- 代码重用和封装:可在数据库中创建标准操作,由多个应用调用。
示例:创建一个存储过程,用来插入新员工记录,并返回新插入的记录的ID。
DELIMITER //
CREATE PROCEDURE AddEmployee(IN empName VARCHAR(100), IN empDepartment VARCHAR(100))
BEGININSERT INTO Employees (Name, Department) VALUES (empName, empDepartment);SELECT LAST_INSERT_ID() as NewEmployeeID;
END//
DELIMITER ;
调用存储过程
CALL AddEmployee('John Doe', 'IT');
触发器
触发器是自动在数据库表上执行的一段程序,它在指定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动触发。
优点:
- 自动化处理:可以自动进行数据校验或更新相关表。
- 保持数据一致性:可以在数据被修改时自动强制数据完整性规则。
示例: 创建一个触发器,在更新员工薪资时自动记录这一修改。
DELIMITER //
CREATE TRIGGER LogSalaryChange
AFTER UPDATE ON Employees
FOR EACH ROW
BEGINIF OLD.Salary <> NEW.Salary THENINSERT INTO SalaryChanges (EmployeeID, OldSalary, NewSalary, ChangeDate)VALUES (OLD.EmployeeID, OLD.Salary, NEW.Salary, NOW());END IF;
END//
DELIMITER ;
在数据库中,触发器可以根据它们被触发的事件类型主要分为两大类别:DML触发器(Data Manipulation Language)和DDL触发器(Data Definition Language)。每种类型的触发器都有其特定的应用场景和功能。让我们更详细地探讨它们:
DML触发器
DML触发器是在DML操作(如INSERT、UPDATE、DELETE)发生时被触发的。这些触发器主要用于自动执行与数据操作相关的任务,如数据验证、业务规则执行、自动计算字段值等。
类别
- BEFORE触发器: 在相关的DML操作执行之前被触发。这种类型的触发器通常用于验证或修改即将插入、更新或删除的数据。
- AFTER触发器: 在相关的DML操作执行之后被触发。用于执行依赖于已经完成的数据修改的操作,如更新其他表的统计数据、记录日志、发送通知等。
示例
CREATE TRIGGER BeforeUpdateEmployee
BEFORE UPDATE ON Employees
FOR EACH ROW
BEGINIF NEW.Salary < 0 THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'Cannot set a negative salary.';END IF;
END;
这个BEFORE UPDATE触发器用于确保不会设置负数的薪资。
DDL触发器
DDL触发器是在DDL操作(如CREATE、ALTER、DROP)发生时被触发的。这些触发器通常用于管理和监控对数据库结构的更改,如防止重要表的意外删除、记录数据库结构变更的历史、自动执行数据库级的维护任务等。
类别
- BEFORE触发器:在DDL操作实际执行前触发,可以用于验证操作或阻止操作执行。
- AFTER触发器:在DDL操作完成后触发,常用于记录操作或进行其他响应措施。
示例
CREATE TRIGGER PreventTableDrop
BEFORE DROP ON DATABASE
FOR EACH STATEMENT
BEGINIF USER() NOT IN ('admin@example.com') THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT = 'You are not allowed to drop tables.';END IF;
END;
这个DDL触发器用于阻止非管理员用户删除任何表。
特殊类别:登录触发器
除了上述两大类别,还有特殊的触发器,如登录触发器,在数据库系统级别用于管理和限制登录操作。例如,在用户登录时验证登录尝试,或记录登录活动。
示例
在某些数据库系统中,可以设置触发器以监视或限制登录活动,但具体实现取决于数据库系统的支持程度。
总结
DML和DDL触发器在数据库中起着关键的监控和自动化作用。它们确保数据完整性,自动化常规任务,并提供数据库操作的审核跟踪。正确使用触发器可以极大地增强数据库的安全性和效率,但过度使用或不当使用可能导致性能问题和复杂的调试过程。因此,设计触发器时需要谨慎,确保它们的实现符合业务逻辑和系统性能要求。
视图
视图是一个虚拟表,其内容由查询定义。它不包含数据本身,而是在实际的表上运行SQL查询来生成数据。
优点
- 简化复杂的查询:用户不需要编写复杂的SQL,而是可以像查询普通表一样查询视图。
- 安全性:可以限制用户访问表的特定部分,而不是整个表。
示例:创建一个视图来显示所有员工的姓名和部门信息。
CREATE VIEW ViewEmployeeDetails AS
SELECT EmployeeID, Name, Department
FROM Employees;
查询视图
SELECT * FROM ViewEmployeeDetails;
总结
存储过程、触发器和视图都是数据库设计中提高效率、简化操作和增强安全性的重要工具。它们可以帮助管理者控制数据访问,自动化处理任务,并提供更高层次的抽象来处理数据。
相关文章:
MySQL存储过程、触发器、视图
数据库中的存储过程、触发器和视图是三种常用的数据库对象,它们在管理数据、优化性能和简化复杂操作中起着重要的作用。下面是每种对象的详细介绍和示例: 存储过程 存储过程是一组为了执行特定功能而预编译的SQL语句。它类似于编程中的函数,…...
每一行txt文件的内容将作为CSV文件中的一行,逗号、空格和句号,冒号作为分隔符拆分成多列
将指定文件夹中的每个txt文件的内容读取出来,并将每个文件的内容按逗号、空格和句号作为分隔符拆分成多列,每一行txt文件的内容将作为CSV文件中的一行,此文件夹中的文件会有非utf-8字符,是如下的代码,如果是utf-8编码的…...
基于inotif的文件同步备份
1 ftp 因为服务器是linux的,而备份服务器是windows server的,故而采取lftp进行同步文件。 1.1 全量同步 cat > /appdata/script/sync_all.sh <<EOF #!/bin/bash # FTP 服务器信息 FTP_SERVER"ftp://192.168.0.5" FTP_USER"…...
luckyexcel 编辑预览excel文件
luckyexcel 编辑预览excel文件 支持后端传文件流预览编辑,也支持选择本地文件编辑预览 看效果 上代码 <template><div style"margin: 30px"><div class"button-box2"><div><div style"color: red">…...
记录Java使用websocket
实现场景:每在小程序中添加一条数据时,后台将主动推送一个标记给PC端,PC端接收到标记将进行自动播放音频。 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import or…...
(javaweb)分层解耦
目录 一.三层架构 二.分层解耦 三.IOC&DI入门 四.IOC详解 五. DI详解 一.三层架构 复用性差,难以维护和管理 前端发起请求,先会到达controller,再调用service进行逻辑处理,逻辑处理的前提是先拿到数据,到dao…...
2024华为数通HCIP-datacom最新题库(H12-831变题更新⑨)
请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了,如果你准备去考试,还是用的之前的题库,切记暂缓。 如…...
PCIe学习笔记(21)
读请求的数据返回(Data Return for Read Requests) •针对内存读取请求的单个完成可能提供少于请求的全部数据量,只要对于给定请求的所有完成在组合起来时返回了读取请求中请求的数据量。 ◦不同请求的完成不能合并。 ◦I/O和Configuratio…...
分享Embedding 模型微调的实现
写在前面 \1. 当前比较主流的Embedding开源模型有哪些? 答:1. m3e(Moka Massive Mixed Embedding) 2. BAAI/bge-large-zh-v1.5。更多的开源模型评测榜单可见: https://huggingface.co/spaces/mteb/leaderboard \2. 模型的作用? …...
TED: 1靶场复现【附代码】(权限提升)
机下载地址: Ted: 1 ~ VulnHubTed: 1, made by Avraham Cohen. Download & walkthrough links are available.https://www.vulnhub.com/entry/ted-1,327/ 1. 主机发现端口扫描目录扫描敏感信息获取 1.1. 主机发现 nmap -sn 192.168.59.0/24|grep -B 2 00:0C…...
Python(TensorFlow)衍射光学层卷积算法模拟(英伟达GPU)
🎯要点 🎯衍射光学卷积算法模拟 | 🎯模拟或数字电子计算之前加入一层光学计算 | 🎯前馈卷积神经网络计算成像系统对输入图像进行分类 | 🎯相位掩模利用线性空间不变成像系统执行固有卷积 📜用例 Python非…...
iOS开发进阶(二十二):Xcode* 离线安装 iOS Simulator
文章目录 一、前言二、模拟器安装 一、前言 Xcode 15 安装包的大小相比之前更小,因为除了 macOS 的 Components,其他都需要动态下载安装,否则提示 iOS 17 Simulator Not Installed。 如果不安装对应的运行模拟库,真机和模拟器无法…...
Prostgresql的Timescaledb插件/扩展部署
背景:研发需求,需要把docker部署得postgresql迁移到新的节点并要求再本地部署,提前查看数据库需要那些插件,并进行安装,docker部署的默认有插件。 版本对比:postgresql版本对应某个Timescaledb版本 我得p…...
分布式知识总结(一致性Hash算法)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 一致性Hash算法 假如有三台服务器编号node0、node1、node2&…...
图数据库在社交网络分析中的应用
随着社交网络的飞速发展,用户之间的关系变得日益复杂。传统的关系型数据库由于其表结构的限制,难以高效地处理和查询这些复杂的网络数据。图数据库以其独特的图模型结构,能够更好地表示和分析社交网络中的关系,因而在社交网络分析…...
Git基础使用教程
版本控制手册 本文中出现的 [ ] 为根据需求自行修改的变量。 基本命令 git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中。 git config --global user.name [xxx]:设置全局用户名,信息记录在~/.gitconfig文件中。…...
技术速递|Python in Visual Studio Code 2024年8月发布
排版:Alan Wang 我们很高兴地宣布 Visual Studio Code 的 Python 和 Jupyter 扩展将于 2023 年 8 月发布! 此版本包括以下公告: 面向贡献者的 Python 扩展开发容器用于运行带有参数的 Python 文件的调试配置Python 扩展 API 的 Npm 包容错 …...
【话题】重塑未来:AI辅助编程对程序员工作的影响与应对策略
目录 人工智能时代,程序员如何保持核心竞争力? 引言 方向一:AI辅助编程对程序员工作的影响 效率提升 代码质量 潜在风险 方向二:程序员应重点发展的核心能力 复杂系统设计 跨学科知识整合 与AI协作的能力 方向三:人机协…...
在Debian上安装freeswitch
在Debian上安装freeswitch 说明: 首次发表日期:2024-08-12参考文档: https://medium.com/jogikrunal9477/ultimate-guide-to-installing-freeswitch-on-ubuntu-22-04-lts-3745ef6a6bd6https://developer.signalwire.com/freeswitch/FreeSWI…...
论文分享 | Fuzz4All: 基于大语言模型的通用模糊测试
大语言模型是当前最受关注的研究热点,基于其生成和理解能力,对现有领域在提升性能和效果上做更多尝试。分享一篇发表于2024年ICSE会议的论文Fuzz4All,它组合多个大语言模型以非常轻量且黑盒的方式,实现了一种跨语言和软件的通用模…...
你有多难拒绝别人?免费个人边界感与拒绝能力测试,看清你的“不敢拒绝“根源
你有多难拒绝别人?免费个人边界感与拒绝能力测试,看清你的"不敢拒绝"根源 引言 你有没有过这样的时刻—— 朋友临时约你,你明明很累想休息,却还是答应了同事请你帮忙做不属于你的工作,你不好意思拒绝&…...
Qwen2.5-VL-7B-Instruct镜像免配置教程:开箱即用的视觉语言推理平台
Qwen2.5-VL-7B-Instruct镜像免配置教程:开箱即用的视觉语言推理平台 1. 开篇介绍 你是否遇到过这样的场景:需要快速搭建一个能同时理解图片和文字的AI系统,却被复杂的配置步骤劝退?今天我要介绍的Qwen2.5-VL-7B-Instruct镜像&am…...
校园网免认证上网?手把手教你用UDP53端口搭建自己的“网络后门”(附服务器配置)
校园网络优化:UDP53端口的高效应用实践 校园网络作为师生日常学习生活的重要基础设施,其稳定性和访问效率直接影响着教学科研活动的开展。本文将深入探讨一种基于UDP53端口的网络优化方案,帮助技术爱好者理解并实现更流畅的网络体验。 1. 校园…...
NsEmuTools:开源模拟器管理工具的质量保障与工程实践
NsEmuTools:开源模拟器管理工具的质量保障与工程实践 【免费下载链接】ns-emu-tools 一个用于安装/更新 NS 模拟器的工具 项目地址: https://gitcode.com/gh_mirrors/ns/ns-emu-tools 在开源项目的生命周期中,如何在快速迭代与代码质量之间找到平…...
资源占用优化:OpenClaw在RTX4090D上并发控制策略
资源占用优化:OpenClaw在RTX4090D上并发控制策略 1. 为什么需要关注OpenClaw的资源占用? 去年冬天,当我第一次在RTX4090D上部署OpenClaw对接Qwen3-32B模型时,系统频繁崩溃的场景至今记忆犹新。原本以为24GB显存足以应对常规任务…...
模拟IC工程师必备:用Cadence Virtuoso仿真电流镜的7个关键步骤
模拟IC工程师必备:用Cadence Virtuoso仿真电流镜的7个关键步骤 在模拟集成电路设计中,电流镜堪称"细胞级"的基础模块,其性能直接影响整个系统的精度与稳定性。对于刚接触Cadence Virtuoso的工程师而言,如何高效完成从电…...
hot100——二分查找
4.寻找两个正序数组的中位数解题思路首先,题目中已经说明,是正序,那么nums1以及nums2中都是从小到大进行排列的;又因为题目中要求时间复杂度为O(log(mn)),一般看到这种时间复杂度是O(log……)形式的,基本上…...
【架构实战】分布式事务解决方案
一、分布式事务的挑战 在微服务架构下,一个业务操作可能涉及多个服务的数据修改。传统的本地事务无法保证跨服务的数据一致性。 经典场景: 用户下单 → 订单服务扣库存 → 支付服务扣余额 → 物流服务创建运单任何一步失败,都需要回滚之前的操…...
嵌入式Linux驱动开发核心技术解析
嵌入式Linux驱动工程师面试技术要点解析1. Linux驱动开发核心技术考察1.1 进程同步机制Linux内核提供了多种进程同步机制,包括:信号量(Semaphore):用于控制对共享资源的访问互斥锁(Mutex)&#…...
I-Lang SEO实战部署:用结构化协议让Google的AI爬虫读懂你的网页
前言: 我们用I-Lang的结构化方法论做SEO,一个全新的英文商业站,七天打进Google搜索第一页。这篇文章把具体方法公开。 一、前提:Google的爬虫已经是AI了 2024年之后,Google的搜索排名算法发生了根本性变化。Googlebot…...
