架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3919|回复: 0

数据库基础之事务和存储过程

[复制链接]
发表于 2019-3-15 22:45:21 | 显示全部楼层 |阅读模式


前言


上次本来打算把SQL 所有的基础内容全部整理完,结果发现不知不觉转钟了。本篇继续下面的的内容。


正文


首先我们先创建需要用到的表



下面我们先来执行一段SQL语句


这段代码将0001的余额减1000 ,将0002的余额加1000。但是我们建表的时候添加了约束,余额必须大于等于10 。

结果如下:
                   图1.png

所以这段代码执行报错了:“UPDATE 语句与 CHECK 约束"CH_balance"冲突。该冲突发生于数据库"DemoDb",表"dbo.Bank", column 'balance'。” 。有一条语句报错,那么另一条语句是否执行成功了呐。

查询结果如下:
                      图2.png

我们会看到另一条SQL语句没有错误,却依然没有提交成功。下面为你们揭晓。

#事务

什么是事务?
严格的说,如果一个操作满足原子性、持久性、隔离性与一致性,那么这个操作称为一个事务。
自动提交事务:在SQL Server中。默认每一条SQL语句都是一个事务。
显示事务:每个事务均以 BEGIN TRANSACTION 语句显式开始,以 COMMIT 或 ROLLBACK 语句显式结束。



我们刚才上面的demo 是用的Rollback结尾的,所以SQL执行不生效。数据也就没有修改成功。

在实际开发运用中,我们通常在非查询语句的外面套一层事务,按照实际需求,保证数据的完整性和一致性。要么全部执行,要么全部不执行。

有两个系统变量,可以记录出错的SQL。——   @@rowcount 返回受影响行数  ,    @@error 返回错误编码

下面我们分别用这两个系统变量判断是否有错误的SQL,执行上面那两条SQL语句。



#存储过程

意义:将一个执行的过程(可能会很复杂)封装成一个名字,然后使用这个名字就可以执行这个过程。



>
无参数的存储过程


> 有参数的存储过程



> 带返回值的存储过程



数据库里面的 try catch



还有带默认参数的存储过程,在上篇中写分页的里面已经提到过。


尾声


存储过程在我们的实际项目中运用的比较多,很多古老的系统,业务逻辑都写在存储过程里面,后面的人维护起来,简直想分分钟锤爆前面那人的狗头。一般来说,业务逻辑是写在代码里面的,但是从数据库里面读取数据次数,特别多的业务逻辑,才会写在存储过程中。去年,将公司项目里面,很复杂的一串业务逻辑搬到了存储过程里,速度提升了几十倍。当然,特殊情况特殊对待。具体的运用看实际场景。






(注:以上内容均为,当年的学习笔记,如有不当之处,欢迎校正!)









上一篇:关于大公司客服体系有感
下一篇:乾颐堂安德HCNP、HCIE的视频
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-20 02:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表