事务
来源:互联网 发布:2017淘宝违禁词有哪些 编辑:程序博客网 时间:2024/06/11 05:00
【英文】:Transaction
【定义】: 把一个或多个操作组合成逻辑上的一个操作单元。举个例子来说,A要给B转账100元。在这个操作中,包含两个操作:1、A的钱要减少100元。2、B的钱要增加100元。对于转账这个操作,不论是银行或者客户都会要求这两个操作要么都不执行,要么都执行,绝对不允许只执行其中一个。
【ACID性质】:
原子性(Atomicity):一个事务就是一个不可分割的执行单元。
一致性(Consistency):事务执行后,仍保证数据一致。
隔离性(Isolation):多个事务并发执行后,保证执行结果正确。
持久性(Durability):一个事务成功执行后,结果永久保存在数据中。
【SQL Server中事务运行模式】
自动提交事务
显示事务
隐式事务
批处理级事务
(入门经典)
【背景】
做一个A给B转账的Demo,假设A的账号为1,B的账号为2。
【代码】
这里介绍两种实现办法。
【实现1】:
步骤1:创建数据库和数据库
- --建库
- IF EXISTS (SELECT name FROM sys.databases WHERE name = N'Test')
- drop database [TransTestDb]
- CREATE DATABASE [TransTestDb];
- --建表
- use [TransTestDb]
- go
- IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Test1]') AND type in (N'U'))
- drop table [Test1]
- CREATE TABLE [dbo].[Test1]
- (
- ID int not null primary key,
- moneys money
- );
- --初始值
- use [Test1]
- go
- insert into Test1 values('1','100')
- insert into Test1 values('2','200')
--创建存储过程
create procedureMyTest
@toIDint,--接收转账的账户
@fromIDint,--转出自己的账户
@momeys money--转账的金额
as
begin tran--开始执行事务
updateTest1set moneys=moneys-@momeyswhere ID=@fromID-执行的第一个操作,转账出钱,减去转出的金额
updateTest1set moneys=moneys+@momeyswhere ID=@toID--执行第二个操作,接受转账的金额,增加
if@@error<>0--判断如果两条语句有任何一条出现错误
begin rollback tran–开始执行事务的回滚,恢复的转账开始之前状态
return0
end
else--如何两条都执行成功
begin commit tran执行这个事务的操作
return1
end
go