SQL Server 存储过程 触发器 事务处理

CSDN 成就一亿技术人!

难度指数:* * 

CSDN 成就一亿技术人!


目录

1. 存储过程的作用

创建存储过程

2. 触发器

触发器的种类

insert触发器

update触发器

delete触发器

测试

3. 事务

开始事务

提交事务

回滚事务

举个实例


在 SQL Server 中,存储过程是一种可重复使用的代码段,用于执行特定的任务。存储过程可以接受输入参数并返回输出参数。

1. 存储过程的作用

可用于提高性能、封装业务逻辑、促进代码重用,减少网络流量,提高安全性 防范 SQL 注入攻击,简化复杂查询 减轻客户端的负担

详细见下方:

提高性能: 存储过程通常是预编译的,数据库管理系统在首次执行存储过程时会编译它,然后将编译结果缓存起来。这种预编译和缓存可以提高执行速度,特别是当存储过程被多次调用时。代码重用: 存储过程允许将常用的 SQL 逻辑封装在一个单一的单元中,从而促进代码重用。多个应用程序或查询可以共享相同的存储过程,减少了代码冗余。封装业务逻辑: 存储过程允许将复杂的业务逻辑封装在数据库中。这有助于确保逻辑的一致性,减少了在多个应用程序中复制和粘贴相同的业务规则的风险。减少网络流量: 将逻辑移至数据库中并使用存储过程执行,可以减少传递给数据库服务器的查询量。只需传递存储过程的参数,而不是每次都传递完整的 SQL 语句。安全性: 存储过程可以对外隐藏底层表的结构,通过授予对存储过程的执行权限而不是对底层表的直接访问权限,可以提高安全性。此外,存储过程还可以通过参数化查询来防范 SQL 注入攻击。事务控制: 存储过程内的语句可以被包裹在事务中,允许更精细的事务控制。这对于确保一系列操作的一致性和原子性非常有用。简化复杂查询: 存储过程可以包含复杂的查询和逻辑,使得应用程序代码可以更简单,更易于维护。这对于处理复杂的数据操作和多步骤的业务逻辑非常有帮助。减轻客户端负担: 存储过程的执行发生在数据库服务器上,而不是在客户端。这可以减轻客户端的负担,特别是在处理大量数据时。

创建存储过程

-- 创建不带参数的存储过程
CREATE PROCEDURE cunchu_name
AS
BEGIN
    SELECT name, age, sex,
    FROM 表;
END;

  • cunchu_name 是这个存储过程的名称。

调用不带参数的存储过程:

EXECUTE cunchu_name; -- 使用 EXECUTE
-- 或者
EXEC cunchu_name; -- 使用 EXEC

-- 创建带参数的存储过程
CREATE PROCEDURE cunchu_name
    @age INT
AS
BEGIN
    SELECT name, age, sex
    FROM
    WHERE age= @age;
END;

  • cunchu_name 是这个存储过程的名称。
  • @age INT 定义一个age变量 类型为int

 调用不带参数的存储过程:

EXECUTE GetEmployeeByID @EmployeeID; -- 使用 EXECUTE
-- 或者
EXEC GetEmployeeByID @EmployeeID; -- 使用 EXEC

2. 触发器

触发器(Trigger)是一种特殊的存储过程,它与表相关联,定义了在表上执行的自动化操作。触发器通常在表上的插入、更新或删除操作发生时触发,允许在数据发生变化时执行一些自定义的逻辑

触发器的种类

insert触发器:当向表中写入数据时触发 自动执行定义的语句

update触发器:当更新列, 自动执行定义的语句

delete触发器:删除某一个信息  自动执行定义的语句

insert触发器

CREATE TRIGGER chufaqi_name
ON  YourTableName
AFTER INSERT
AS
BEGIN
    -- 触发器逻辑
    PRINT '添加信息成功!';
END;

update触发器

CREATE TRIGGER chufaqi_name
ON  YourTableName
AFTER UPDATE
AS
BEGIN
    -- 触发器逻辑
    PRINT '添加信息成功!';
END;

delete触发器

CREATE TRIGGER chufaqi_name
ON  YourTableName
AFTER DELETE
AS
BEGIN
    -- 触发器逻辑
    PRINT '添加信息成功!';
END;

测试

创建触发器

insert 插入数据 出现提示成功

加入这条命令就是阻止执行(三类触发器都可以用)

阻止触发事件

3. 事务

特性:原子性,一致性,隔离性,持久性,

开始事务

BEGIN  TRANSACTION;

提交事务

COMMIT  TRANSACTION;

回滚事务

ROLLBACK  TRANSACTION;

举个实例

begin transaction
declare @sum int    #定义变量  执行成功为0,执行不成功不等于0.
set @sum=0李四向张三转1000 (张三+1000 李四—1000)
update 表_name set 李四的钱=李四的钱-1000
where name='李四'
set @sum=@sum+@@ERROR 
update 表_name set 张三的钱=张三的钱+1000
where name='张三'set @sum=@rsum+@@error
print '查看转账事务中的余额'
select * from 表_nameif @sum<>0    /    @sum!=0 beginprint '交易失败,回滚事务'rollback transactionend
elsebeginprint '交易成功 谢谢合作'commit transactionend

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

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

相关文章

分享好用的chatgpt

1.在vscode中&#xff0c;点击这个&#xff1a; 2.搜索&#xff1a;ChatGPT - 中文版&#xff0c;个人觉得这个更好用&#xff1a; 3.下载完成之后&#xff0c;左侧会多出来这个&#xff1a; 点击这个图标就能进入chatgpt界面了 4.如果想使用tizi访问国外的chatgpt&#xf…

.Net FrameWork总结

.Net FrameWork总结 介绍.Net公共语言运行库CLI的组成.NET Framework的主要组成.NET Framework的优点CLR在运行期管理程序的执行&#xff0c;包括以下内容CLR提供的服务FCL的组成 或 服务&#xff08;这个其实就是我们编码时常用到的类库&#xff09;&#xff1a;&#xff08;下…

使用vue3实现echarts漏斗图表以及实现echarts全屏放大效果

1.首先安装echarts 安装命令&#xff1a;npm install echarts --save 2.页面引入 echarts import * as echarts from echarts; 3.代码 <template> <div id"main" :style"{ width: 400px, height: 500px }"></div> </template> …

认识数据的规范化

关系模型满足的确定约束条件称为范式&#xff0c;根据满足约束条件的级别不同&#xff0c;范式由低到高分为 1NF&#xff08;第一范式&#xff09;、2NF&#xff08;第二范式&#xff09;、3NF&#xff08;第三范式&#xff09;、BCNF&#xff08;BC 范式&#xff09;、4NF&…

Vue使用Element table表格格式化GMT时间为Shanghai时间

Vue使用Element表格格式化GMT时间为Shanghai时间 说明 阿里巴巴java开发规范规定&#xff0c;数据库必备gmt_create、gmt_modified字段&#xff0c;使用的是GMT时间&#xff0c;在中国使用必然要转换我中国时间。 在阿里巴巴的Java开发规范中&#xff0c;要求每个表都必备三…

T-Dongle-S3开发笔记——创建工程

创建Hello world工程 打开命令面板 方法1&#xff1a;查看->命令面板 方法2&#xff1a;按F1 选择ESP-IDF:展示示例项目 创建helloworld 选择串口 选择芯片 至此可以编译下载运行了 运行后打印的信息显示flash只有2M。但是板子上电flash是W25Q32 4MB的吗 16M-bit

B3842 起动电流小,工作频率 可达500kHz的Dc-Dc开关电源芯片

B3842/43/44是专为脱线和Dc-Dc开关电源应用设计的恒频电流型Pwd控制器内部包含温度补偿精密基准、供精密占空比调节用的可调振荡器、高增益混放大器、电流传感比较器和适合作功率MOST驱动用的大电流推挽输出颇以及单周期徊滞式限流欠压锁定、死区可调、单脉冲计数拴锁等保护电路…

BDD - Python Behave 配置文件 behave.ini

BDD - Python Behave 配置文件 behave.ini 引言behave.ini配置参数的类型配置项 behave.ini 应用feature 文件step 文件创建 behave.ini执行 Behave查看配置默认值 behave -v 引言 前面文章 《BDD - Python Behave Runner Script》就是为了每次执行 Behave 时不用手动敲一长串…

磁盘管理 :逻辑卷、磁盘配额

一 LVM可操作的对象&#xff1a;①完成的磁盘 ②完整的分区 PV 物理卷 VG 卷组 LV 逻辑卷 二 LVM逻辑卷管理的命令 三 建立LVM逻辑卷管理 虚拟设置-->一致下一步就行-->确认 echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- -…

【小程序】如何获取特定页面的小程序码

一、进入到小程序管理后台&#xff0c;进入后点击上方的“工具”》“生成小程序码” 小程序管理后台 二、进入开发者工具&#xff0c;打开对应的小程序项目&#xff0c;复制底部小程序特定页面的路径 三、粘贴到对应位置的文本框&#xff0c;点击确定即可

Oracle 12c rac 搭建 dg

环境 rac 环境 &#xff08;主&#xff09;byoradbrac 系统版本&#xff1a;Red Hat Enterprise Linux Server release 6.5 软件版本&#xff1a;Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit byoradb1&#xff1a;172.17.38.44 byoradb2&#xff1a;…

Redis管道

问题引出 Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤&#xff1a; 1 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果)&#xff0c;并监听Socket返回&#xff0c;通常以阻塞模式等待服务端响应。 2 服务端…

Lunix的奇妙冒险————权限篇

文章目录 一.什么是权限二.用户权限和类别。1.用户2.角色3.更换文件角色 三.文件的类别和对应权限1.文件的类别。2.文件属性权限1.权限说明。2.默认生成文件权限来源3.更改权限 3.文件的执行与删除 四.不同用户共同在一个目录下的权限。1.普通用户家目录2.在同一目录下文件的权…

【Vulnhub 靶场】【Hms?: 1】【简单】【20210728】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/hms-1,728/ 靶场下载&#xff1a;https://download.vulnhub.com/hms/niveK.ova 靶场难度&#xff1a;简单 发布日期&#xff1a;2021年07月28日 文件大小&#xff1a;2.9 GB 靶场作者&#xff1a;niveK 靶场系…

别再羡慕别人了!教你如何打造属于自己的私域流量!

目前&#xff0c;随着公域流量的成本不断上升&#xff0c;获取难度越来越大&#xff0c;私域流量的建设已经成为了许多企业和个人品牌的重要选择。私域流量可以实现“一次获取&#xff0c;循环使用”的目标&#xff0c;不仅降低了流量的获取成本&#xff0c;而且可以最大化地发…

探索Apache Commons Imaging处理图像

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们今天来聊聊图像处理。在这个数字化日益增长的时代&#xff0c;图像处理已经成为了一个不可或缺的技能。不论是社交媒体上的照片编辑&#xff0c;还是专业领域的图像分析&#xff0c;图像处理无处不在。而作为…

再谈动态SQL

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 文章目录 专栏精选摘要引言正文动态sql标签ifchoose...when...otherwisewhere、…

【XR806开发板试用】XR806串口驱动CM32M对小厨宝的控制实验

一.说明 非常感谢基于安谋科技STAR-MC1的全志XR806 Wi-FiBLE开源鸿蒙开发板试用活动,并获得开发板试用。 XR806是全志科技旗下子公司广州芯之联研发设计的一款支持WiFi和BLE的高集成度无线MCU芯片&#xff0c;支持OpenHarmony minisystem和FreeRTOS&#xff0c;具有集成度高、…

什么是骨传导耳机?骨传导能保护听力吗?

骨传导耳机是一种非常特殊的蓝牙耳机&#xff0c;它通过骨传导技术将声音直接传送到内耳。这种技术不同于传统耳机&#xff0c;它不通过空气传送声音&#xff0c;而是通过头骨的振动来传送声音。 并且骨传导耳机能够在一定程度上起到保护听力的作用&#xff0c;主要是因为它们不…

python统计分析——单变量描述统计

资料来源于&#xff1a;用Python动手学统计学 1、求和 numpy.sum()&#xff1a;要求求和的对象为数组格式。 也可以使用python的标准函数sum()。 2、平均数 numpy.mean() 3、计数 len() 4、方差 np.var()&#xff1b; 注意ddof的参数设置。ddof即Delta Degrees of Fr…