前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL Server 存储过程 触发器 事务处理

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

作者头像
神秘奇男子
发布2024-06-03 17:47:44
780
发布2024-06-03 17:47:44
举报
文章被收录于专栏:运维知识运维知识

目录

1. 存储过程的作用

创建存储过程

2. 触发器

触发器的种类

insert触发器

update触发器

delete触发器

测试

3. 事务

开始事务

提交事务

回滚事务

举个实例


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

1. 存储过程的作用

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

详细见下方:

代码语言:javascript
复制
提高性能: 存储过程通常是预编译的,数据库管理系统在首次执行存储过程时会编译它,然后将编译结果缓存起来。这种预编译和缓存可以提高执行速度,特别是当存储过程被多次调用时。

代码重用: 存储过程允许将常用的 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;

举个实例
代码语言:javascript
复制
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 表_name

if @sum<>0    /    @sum!=0 
 begin
  print '交易失败,回滚事务'
  rollback transaction
 end
else
 begin
   print '交易成功 谢谢合作'
   commit transaction
  end
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 存储过程的作用
    • 创建存储过程
    • 2. 触发器
      • 触发器的种类
        • insert触发器
        • update触发器
        • delete触发器
        • 测试
        • 开始事务
        • 提交事务
        • 回滚事务
        • 举个实例
    • 3. 事务
    相关产品与服务
    数据库专家服务
    数据库专家服务(Database Expert Service,DBexpert)为您提供专业化的数据库服务。仅需提交您的具体问题和需求,即可获得腾讯云数据库专家的专业支持,助您解决各类专业化问题。腾讯云数据库专家服务团队均有10年以上的 DBA 经验,拥有亿级用户产品的数据库管理经验,以及丰富的服务经验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档