首页 / MSSQL / SqlServer数据库中的事务
SqlServer数据库中的事务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SqlServer数据库中的事务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2798字,纯文字阅读大概需要4分钟。
内容图文
一.事务
首先新建一个bank数据库,及Account表.Sql如下:
1 CREATE DATABASE bank 2 3 USE bank 4 5 CREATE TABLE Account 6 ( 7 Name VARCHAR(20) NOT NULL, 8 CurrentMoney INT CHECK(CurrentMoney > 1) NOT NULL 9 ) 10 11 INSERT INTO Account VALUES('刘能',500),('谢广坤',2000) 12 13 SELECT * FROM AccountView Code
创建表视图如下:
我们在CurrentMoney字段中添加了一个检查约束,使得CurrentMoney的值不能小于1
现在模拟一行转账过程,刘能给谢广坤转账500元,Sql代码如下:
1 UPDATE Account SET CurrentMoney = CurrentMoney - 500 WHERE Name LIKE '刘能' 2 3 UPDATE Account SET CurrentMoney = CurrentMoney + 500 WHERE Name LIKE '谢广坤'View Code
由于我们添加的检查约束,使得第一条Sql语句在执行时报错,刘能账户没有正确的减去500,而谢广坤账户却添加了500.
这种情况下,就需要使用事务
先说一下使用事务的步骤:
1.开始一个事务
2.声明一个变量@error用于记录Sql语句执行时的报错数
3.将@error设置为0
4.执行Sql语句
5.set @error = @error + @@ERROR
6.循环执行步骤4,步骤5
7.判断@error的值是否>1,如果大于1,表示SQL语句执行出错,执行事务回滚;否则提交执行
Sql语句
1 --1.开始事务 2 BEGIN TRANSACTION 3 --2.声明变量 4 DECLARE @error INT 5 --3.设置变量值为0 6 SET @error = 0 7 --4.执行Sql语句 8 UPDATE Account 9 SET CurrentMoney = CurrentMoney - 500 10 WHERE Name LIKE '刘能' 11 --5.记录错误数 12 SET @error = @error + @@ERROR 13 14 UPDATE Account 15 SET CurrentMoney = CurrentMoney + 500 16 WHERE Name LIKE '谢广坤' 17 18 SET @error = @error + @@ERROR 19 --6.判断是否出错 20 IF ( @error > 1 ) 21 BEGIN 22 --事务回滚 23 ROLLBACK TRANSACTION 24 END 25 ELSE 26 BEGIN 27 --提交事务 28 COMMIT TRANSACTION 29 ENDView Code
将上面的代码,执行后结果如下
因为事务中有一条Sql语句发生错误,所以整个事务回滚,没有执行.体现了事务不可分割的特性(原子性)
将转账金额改成300后
发现Sql语句能正确执行.
二.嵌套事务
SqlServer使用@@TRANCOUNT全局变量用来监听正在执行的事务数,当事务提交时@@TRANCOUNT减1,当事务回滚时@@TRANCOUNT置为0,下面是一个事务嵌套的例子
1 --COMMIT 对事务数的影响 (使用了嵌套事务) 2 PRINT @@TRANCOUNT --在没有事务的时候查看一下事务数 3 BEGIN TRAN --开始事务 4 5 PRINT @@TRANCOUNT --开始事务,@@trancount将被设置为1 6 7 BEGIN TRAN --开始第二个事务 8 9 PRINT @@TRANCOUNT --事务数+1 10 11 COMMIT TRAN --提交第二个事务 12 13 PRINT @@TRANCOUNT --事务数-1 14 15 COMMIT TRAN --提交第一个事务, 事务数-1 16 17 PRINT @@TRANCOUNT 18 GO 19 20 --ROLLBACK(回滚\撤消)对事务数的影响 21 PRINT @@TRANCOUNT --没有事务的时候输出一下事务数 22 23 BEGIN TRAN --开始一个事务 24 PRINT @@TRANCOUNT --事务数+1 25 26 BEGIN TRAN --开起第二个事务 27 PRINT @@TRANCOUNT --事务数+1 28 ROLLBACK TRAN --回滚事务,将事务数清0,所有活动的事务都将回滚 29 PRINT @@TRANCOUNT 30 31 GOView Code
可以将上面的代码赋值到SQLSERVER 中调试运行,查看@@TRANCOUNT的值
三.事务的分类
显示事务,使用Begin TRANSCATION明确指定的事务
隐式事务,
内容总结
以上是互联网集市为您收集整理的SqlServer数据库中的事务全部内容,希望文章能够帮你解决SqlServer数据库中的事务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。