sqlserver关于事务
事务的四个特性: 原子性,一致性,持久性,隔离性
原子性:
原子性:表示事务执行是作为原子,不可分割,整个语句要么执行,要么不执行
sqlserver中每一个单独的语句可以看做是包含在事务中
每一句本身具有原子性,要么执行,要么不执行,不会有中间状态
CREATE TABLE Student1
(
Id INT
CONSTRAINT chk_test
CHECK (Id = )
) INSERT INTO Student1
VALUES(),()
例如:上面例子的约束,执行插入3成功执行,但是插入4失败,这时候也会导致3插入失败
因为它们是一个语句,每一个语句具有原子性,要么都执行成功,要么都执行失败
当然这种原子比较小,用户可以自定义原子的大小:
则需要包含在事务中,来构成用户自定义的原子粒度
注意:默认事务中,即使出错了也不会整个事务进行回滚,而是失败的语句抛出异常,而正确的语句成功执行,这样会破坏事务的原子性,所以sqlserver给与了一些选项来保证事务的原子性
提供了两大类保证事务的原子性
1 通过设置 set xact_abort on 为on,来设置所有事务都作为一个原子处理
例如:
SET XACT_ABORT ON
BEGIN TRANSACTION
INSERT INTO Student1
VALUES() INSERT INTO Student1
VALUES() COMMIT
GO
SELECT * FROM Student1 AS s
2 按照用户设置进行回滚
这种方式具有更高的灵活性,可以自定义在什么情况进行rollback,利用try catch和@@error进行判断都属于这种方式
BEGIN TRANSACTION BEGIN TRY
INSERT INTO Student1(Id)
VALUES () INSERT INTO Student1(Id)
VALUES () COMMIT
END TRY
BEGIN CATCH
ROLLBACK
END CATCH
一致性: 即在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏
隔离性:事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据
sqlserver利用加锁和阻塞来保证不同事务之间不同等级的隔离性
一般情况,完全隔离是不现实的,完全的隔离要求数据库同一时间只执行一条事务,这是不现实的
所以事务之间的互相影响分为:脏读,不可重复读,幻读
脏读:一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的
隔离等级:
Read Uncommited(最高的性能,但可能出现脏读,不可重复读,幻读)
Read commited(可能出现不可重复读,幻读)(满足99%的需求)
Repeatable Read(可能出现幻读)
Serializable(最低的性能,Range锁会导致并发下降)
SNOPSHOT(这个是通过在tempDB中创建一个额外的副本来避免脏读,不可重复读,会给tempDB造成额外负担)
总之:不同的隔离级别是通过添加不同的锁,造成阻塞来实现的
设置隔离级别:
隔离等级:
Read Uncommited(最高的性能,但可能出现脏读,不可重复读,幻读)
Read commited(可能出现不可重复读,幻读)(满足99%的需求)
Repeatable Read(可能出现幻读)
Serializable(最低的性能,Range锁会导致并发下降)
SNOPSHOT(这个是通过在tempDB中创建一个额外的副本来避免脏读,不可重复读,会给tempDB造成额外负担)
总之:不同的隔离级别是通过添加不同的锁,造成阻塞来实现的
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT * from student1
持久性: 意味着事务完成后,该事务对数据库所做的更改便持久的保存在数据库之中
格式:
BEGIN TRY BEGIN TRANSACTION
COMMIT TRANSACTION END TRY
BEGIN CATCH
IF @@TRANCOUNT > or xact_state() <>
ROLLBACK TRANSACTION ; SELECT ;
END CATCH
@'在SqlServer里,嵌套事务的层次是由@@TranCount全局变量反映出来的。
每一次Begin Transaction都会引起@@TranCount加1。
而每一次Commit Transaction都会使@@TranCount减1,
而RollBack Transaction会回滚所有的嵌套事务包括已经提交的事务和未提交的事务,
而使@@TranCount置0'
sqlserver关于事务的更多相关文章
- (转)对SQLSERVER数据库事务日志的疑问
本文转载自桦仔的博客http://www.cnblogs.com/lyhabc/archive/2013/06/10/3130856.html 对SQLSERVER数据库事务日志的疑问 摸不透SQLS ...
- SQLSERVER备份事务日志的作用
事务日志备份有以下3种类型 (1)纯日志备份:仅包含相隔一段时间的事务日志记录,而不包含任何大容量更改 (2)大容量操作日志备份.包括由大容量操作更改的日志和数据页,不支持时间点恢复 (3)尾日志备份 ...
- SQLSERVER分布式事务使用实例
实例一 尊重原著作:本文参考自http://www.jb51.net/article/43540.htm --BEGIN DISTRIBUTED TRANSACTION [transactionnam ...
- sQLserver T-SQL 事务的用法
原文在: https://www.lesg.cn/netdaima/2016-55.html 在使用Mssql的时候经常需要用到存储过程 有些操作在前面发生错误的时候:需要回滚:这就需要事务了: 下面 ...
- SqlServer 查看事务锁及执行语句
一.查看当前锁定的事务 ,) ,用户机器名称,) ,是否被锁住),blocked) ,数据库名称,),cmd 命令,waittype as 等待类型 ,last_batch 最后批处理时间,open_ ...
- sqlserver 2000事务复制问题
2000现在用的估计不多了,把之前收集的一些复制问题整理发布出来.可能都是些很白很二的问题,但人总是由最初的无知不断成长,不对之处欢迎指正. sqlserver 2000事务复制问题服务器A(发布) ...
- SQLServer 延迟事务持久性
SQL Server 2014新功能 -- 延迟事务持久性(Delayed Transaction Durability) SQL Server事务提交默认是完全持久性的(Full Durable), ...
- SQLServer之事务简介
事务定义 事务是单个的工作单元.事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序自动执行. 事务分类 自动提交事务 每条单独的语句都是一个事务. 在自动提 ...
- SQLServer数据事务日志操作
日志备份 (log backup) 包括以前日志备份中未备份的所有日志记录的事务日志备份. (完整恢复模式) 使用SSMS数据库管理工具备份事务日志 1.连接数据库,选择数据库->右键点击-&g ...
随机推荐
- Nginx NLB 及Redis学习
负载均衡: ARR: 微软的应用级别的负载均衡方案 NLB:服务器级别的负载均衡方案 Nginx:反向代理 达到负载均衡. Redis:用作缓存(Redis 主从配置和参数详解 http://www. ...
- MATLAB新手教程
MATLAB新手教程 .MATLAB的基本知识 1-1.基本运算与函数 在MATLAB下进行基本数学运算,仅仅需将运算式直接打入提示号(>>)之後,并按入Enter键就可以.比如 ...
- SAP CRM 最新简介文字(2007年、中英文)
以下内容是SAP CRM功能的精简描述,摘自SAP官方文档,附上中英文版本,可以对SAP CRM的主要功能有大致了解. 营销 - 使用营销资源管理.客户细分及列表管理.营销活动管理.线索管理.贸易促销 ...
- Codeforces Round #326 (Div. 2) B. Duff in Love 分解质因数
B. Duff in Love Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/588/proble ...
- slf4j-api-1.7.5日志打印实验
下面一段话来自:百度百科 假设你开发的是类库或者嵌入式组件,那么就应该考虑採用SLF4J,由于不可能影响终于用户选择哪种日志系统.在还有一方面,假设是一个简单或者独立的应用,确定仅仅有一种日志系统,那 ...
- 第十七章,txt文件的写入和读取数据结合练习(C++)
#include <iostream> #include <fstream> int main(int argc, char** argv) { std::string str ...
- spring mvc --自己定义converse
在MVC中我们能够非常轻松的依据项目需求进行必要的信息转换,如设置默认的日期格式,自己定义String类型的格式等等... 配置中我们须要自己定义converseService: <bean i ...
- ShareSDK for iOS 2.9.0已经公布
ShareSDK for iOS v2.9.0已经公布,本次更新内容包含: 1.修复Facebook获取用户信息报错问题 2.修复Instagram在iPad上显示分享菜单错误问题,须要指定菜单容器. ...
- JAVA static 作用
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...
- 通过GitHub和Hexo搭建个人博客
LinEvan个人博客 最终有自己的个人博客,逼格一下子提高说不少. 网上一搜教程一大堆,非常多已经写得非常好了,我就不凑这个热闹了.推荐一篇博文:怎样搭建一个独立博客--简明Github Pages ...