黑马程序员-SQL事务处理

原创 2012年03月23日 10:06:28

----------------------Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

事务定义:

事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据更改均会

提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有

数据更改均被清除。

事务三种运行模式:
自动提交事务
每条单独的语句都是一个事务。
显式事务
每个事务均以 BEGIN TRANSACTION 语句显式开始,
 COMMIT  ROLLBACK 语句显式结束。
隐性事务
在前一个事务完成时新事务隐式启动,但每个事务仍以 COMMIT  ROLLBACK 语句

显式完成。

事务就是负责把一系列操作看做一个独立的逻辑单元,这些操作要么同时成功,要么同时失败。下面是一个经典的例子:
create procedure TransferMoeny
(
@FromAccountNo varchar(50),-- 转出账号
@ToAccountNo varchar(50),--转入账号
@MoneyCount money--转账金额
)
as
--判断账号是否存在
if exists (select 1 from 帐户表 where 账号 = @FromAccountNo)
begin
if exists (select 1 from 帐户表 where 账号 = @ToAccountNo)
begin
--判断转出金额是否大于当前余额
if (select 当前余额 from 帐户表 where 账号 = @FromAccountNo) >= @MoneyCount
begin
--开始转账
begin transaction
insert into [存取记录表] ([账号],[存取类型], [存取金额]) values(@FromAccountNo, -1,@MoneyCount)
if @@error <> 0
begin
rollback transaction--发生错误则回滚事务,无条件退出l
return
end
insert into [存取记录表] ([账号],[存取类型], [存取金额]) values(@ToAccountNo, 1,@MoneyCount)
if @@error <> 0
begin
rollback tran
return
end
commit transaction --两条语句都完成,提交事务
end
else
raiserror ('转账金额不能大于该账号的余额',16,1)
end
else
raiserror ('转入账号不存在',16,1)
end
else
raiserror ('转出账号不存在',16,1)

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------


详细请查看:http://edu.csdn.net/heima

c#+sql事务处理

sql事务处理 /// /// 启用事务提交多条带参数的SQL语句 /// /// 主表SQL /// 主表对应的参数 ...
  • zhgl7688
  • zhgl7688
  • 2016年01月26日 15:21
  • 1424

SQL Server在存储过程中编写事务处理代码的三种方法

SQL Server中数据库事务处理是相当有用的,鉴于很多SQL初学者编写的事务处理代码存往往存在漏洞,本文我们介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正确的代码。希望能够对您有所...
  • ycl295644
  • ycl295644
  • 2015年06月02日 15:06
  • 4946

.NET的事务处理(转)

1、SQL事务 优点:执行效率最佳 限制:事务上下文仅在数据库中调用,难以实现复杂的业务逻辑。 [sql] view plaincopy ...
  • chen46311973
  • chen46311973
  • 2016年06月19日 18:57
  • 430

关于mysql管理事务处理

前提:数据库引擎必须是InnoDB类型。 在mysql中,MyISAM和InnoDB是最常用的两种引擎,(其中MyISAM是默认引擎),其中 MyISAM 支持全文本搜索,但不支持事务;而 Inno...
  • baidu_30000217
  • baidu_30000217
  • 2015年12月21日 12:18
  • 1097

SQLServer 存储过程 带事务处理实例(四)

CREATE procedure [dbo].******* ( @smallOrderNo varchar(50), @phoneModel varchar(50), @beginBoxNo ...
  • xie_xiansheng
  • xie_xiansheng
  • 2017年03月07日 14:01
  • 1951

查找ORACLE出现“ORA-08177:无法连续访问此事务处理”问题的原因

ORA-08177: 无法连续访问此事务处理(Cannot serialize access),该问题是由ORACLE事务隔离级别引起的。 问题重现: 1、在事务1中执行:       updat...
  • caihongniaosi
  • caihongniaosi
  • 2014年03月10日 17:02
  • 965

sql学习笔记(24)----------MySQL的事务处理详解

MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务、行级锁、并发 3.Berkeley DB:...
  • u011225629
  • u011225629
  • 2015年06月22日 16:02
  • 756

Oracle PL/SQL开发基础(第二十七弹:事务处理简介)

什么是事务处理 事务(Transaction)是一个由多条SQL语句组成的工作逻辑单元,这些语句要么全部执行成功,要么全部不执行,只要有一条SQL语句执行失败,已执行的SQL语句会全部回滚到执行之前...
  • lianjiww
  • lianjiww
  • 2017年08月07日 22:25
  • 275

执行多条语句事务处理

当Jdbc程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL语句。若想关闭这种默认提交方式,让多条SQL在一个事务中执行,并且...
  • builderwfy
  • builderwfy
  • 2015年07月28日 16:29
  • 1791

spring的事务处理机制

温习spring的事务处理机制,总结如下   对于SQL事务的概念以及ACID性质,可以参见我的另一篇博文 http://kingj.iteye.com/admin/blogs/167...
  • yang_ai
  • yang_ai
  • 2016年08月07日 09:37
  • 1570
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员-SQL事务处理
举报原因:
原因补充:

(最多只允许输入30个字)