SQL Server事务
转自:http://blog.csdn.net/zerolsy/article/details/2123637
一、事务概念
事务是一种机制、是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行。因此事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的。这特别适用于多用户同时操作的数据通信系统。例如:订票、银行、保险公司以及证券交易系统等。
二、事务属性
事务4大属性:
1 原子性(Atomicity):事务是一个完整的操作。
2 一致性(Consistency):当事务完成时,数据必须处于一致状态。
3 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的。
4 持久性(Durability):事务完成后,它对于系统的影响是永久性的。
三、创建事务
T-SQL中管理事务的语句:
1 开始事务: begin transaction
2 提交事务:commit transaction
3 回滚事务: rollback transaction
事务分类:
1 显式事务:用begin transaction明确指定事务的开始。
2 隐性事务:打开隐性事务:set implicit_transactions on,当以隐性事务模式操作时,SQL Servler将在提交或回滚事务后自动启动新事务。无法描述事务的开始,只需要提交或回滚事务。
3 自动提交事务:SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。
示例:张三转800元到李四帐户上。
use stuDB
go
--创建帐户表bank--
if exists(select* from sysobjects where name='bank')
drop table bank
create table bank
(
customerName char(10), --顾客姓名
currentMoney money --当前余额
)
go
/**//*--添加约束,帐户不能少于元--*/
alter table bank add
constraint CK_currentMoney check(currentMoney>=1)
/**//*--插入测试数据--*/
insert into bank(customerName,currentMoney)
select '张三',1000 union
select '李四',1
select * from bank
go
/**//*--使用事务--*/
use stuDB
go
--恢复原来的数据
--update bank set currentMoney=currentMoney-1000 where customerName='李'
set nocount on --不显示受影响的行数
print '查看转帐事务前的余额'
select * from bank
go
/**//*--开始事务--*/
begin transaction
declare @errorSum int --定义变量,用于累计事务执行过程中的错误
/**//*--转帐--*/
update bank set currentMoney=currentMoney-800 where customerName='张三'
set @errorSum=@errorSum+@@error --累计是否有错误
update bank set currentMoney=currentMoney+800 where customerName='李四'
set @errorSum=@errorSum+@@error --累计是否有错误
print '查看转帐事务过程中的余额'
select * from bank
/**//*--根据是否有错误,确定事务是提交还是回滚--*/
if @errorSum>0
begin
print '交易失败,回滚事务.'
rollback transaction
end
else
begin
print '交易成功,提交事务,写入硬盘,永久保存!'
commit transaction
end
go
print '查看转帐后的余额'
select * from bank
go
SQL Server事务相关推荐
- 如何处理SQL Server事务复制中的大事务操作
如何处理SQL Server事务复制中的大事务操作 事务复制的工作机制 事务复制是由 SQL Server 快照代理.日志读取器代理和分发代理实现的.快照代理准备快照文件(其中包含了已发布表和数据库对 ...
- SQL Server事务的隔离级别
SQL Server事务的隔离级别 ########## 数据库中数据的一致性 ########## 针对并发事务出现的数据不一致性,提出了4个级别的解决方法: 隔离级别 第一类丢失更新 脏读 ...
- SQL Server 事务日志
https://docs.microsoft.com/en-us/sql/relational-databases/logs/the-transaction-log-sql-server?view=s ...
- SQL Server事务回滚对自增键的影响
SQL Server事务回滚时是删除原先插入导致的自增值,也就是回滚之前你你插入一条数据导致自增键加1,回滚之后还是加1的状态 --如果获取当前操作最后插入的identity列的值: select @ ...
- Sql Server事务日志
本文导读:SQL Server中的数据库都是由一或多个数据文件以及一或多个事务日志文件组成的.SQL Server事务日志主要是用来记录所有事务对数据库所做的修改,SQL SERVER利用事务日志来确 ...
- 了解SQL Server事务日志备份和完整备份的日志序列号
This article explores the SQL Server Transaction log backups and log sequence number (LSN) in combin ...
- 使用SQL Server事务复制将SQL Server数据库迁移到Azure SQL数据库
In this guide, we'll discuss more about migrating a SQL Server database to Azure SQL Database using ...
- 如何使用损坏或删除SQL Server事务日志文件重建数据库
This is the last article, but not the least one, in the SQL Server Transaction Log series. In this s ...
- sql数据库 订阅发布_如何使用中央发布者和多个订阅者数据库设置自定义SQL Server事务复制
sql数据库 订阅发布 In this article, you'll learn how to setup a simple, custom distributed database replica ...
- 读取SQL Server事务日志
介绍 (Introduction) There has always been some debate as to whether or not there are real benefits to ...
最新文章
- 初学者如何在一周内熟练掌握python?
- c++ argmax
- Linux的find grep
- Hooks——钩子概览
- 11-Container With Most Water
- serv-u启动管理控制台后提示脚本错误解决方案
- ibase4j使用信息心得
- 【Android第一行代码第三版】【01】
- 风险模型—VaR模型2
- 网络游戏植入游戏案例
- HTTP接口设计规范
- 笔记本计算机涂硅脂,笔记本电脑怎么涂cpu散热硅脂
- VUE使用docxtemplater导出word(带图片)
- ZZULIOJ 1924: 宣传墙 (dp)
- 渗透测试实用浏览器插件推荐
- js过滤检测敏感词汇
- [OHIF-Viewers]医疗数字阅片-医学影像-ES6箭头函数(=)
- MSF基础--show options
- Medkoo Biosciences艾美捷 甲氧沙林
- gcc生成静态库和动态库,以及OpenCV3.4.11的安装和实例
热门文章
- jdk官网历史版本下载Oracle账号密码
- JAVA 基础 / 第二十九课:接口与继承 / JAVA中的对象转型
- sqoop/1.4.6/下载
- 你大概走了假敏捷:认真说说敏捷的实现和问题(手绘版)
- 【JSON】数据格式
- 向app store提交应用时,必须点“ready to upload binary”!
- Spring学习笔记-注入实战篇
- Linux卸载蓝牙模块,Linux 下调试低功耗蓝牙的笔记
- linux树莓派连接wifi密码,树莓派连接WiFi,不使用界面,多WiFi切换
- php饼图只有一个小方块_如何做出PHP数据饼图