关于mssql数据库锁和事务隔离级别
事务隔离级别有4种,这4种级别只是对于读操作,也就是select有不同程度的支持,
读未提交:不会对事务里读出来的数据附加任何锁
读已提交:会对事务里读出来的数据附加共享锁,读完就释放共享锁,其他事务可以对这边已读的数据进行读和写,这是mssql默认的隔离级别。这种隔离级别也会发生死锁,例如你的程序中有个A事务是更新完表1,在更新表2,B事务是更新完表2在更新表1,当A和B被并发执行时,死锁就产生了,读未提交也会产生这种死锁。
不可重复读:会对事务里读出来的数据附加共享锁,但是不会读完就释放共享锁,共享锁会持续到事务结束,其他事务只能对这边已读的数据进行读操作,不能写。这种隔离级别就容易产生死锁,例如你的程序中有一个事务是读取一条数据并更新这条数据,这种业务一般很常用,当这个事务被A和B并发执行时,A读取操作读完会一直持有这条数据的共享锁,不会释放,B也同样,当A想要执行更新操作时,必须等待B释放共享锁,B也执行操作也必须等待A释放共享锁,这样死锁就产生了。
还有快照和串行化就不说了,很少用到。
不管哪种隔离级别,进行update、add和delete时都会锁住操作的记录,并持有锁,直到事务结束。一般情况下update、add和delete操作只会锁住要操作的记录,不会锁整个表。
需要注意的是TransactionScope默认的级别是串行化,我第一次用TransactionScope时就造成不小的困扰,数据库老出现死锁。查资料才发现是串行化级别,这不坑爹么,把TransactionScope的事务隔离级别设置成读已提交,死锁不在出现
另外事务隔离级别只对于当前连接有效,你在这个connect连接里设置了事务隔离级别,另一个connect里的事务还是默认的级别,默认级别是读已提交。目前没有可以全局设置事务隔离级别的地方。
以上结论只是针对mssql,其他数据库没做研究。
事务隔离级别在满足业务的情况下,尽量越低越好,能减少死锁概率和增加数据库并发性能
关于mssql数据库锁和事务隔离级别的更多相关文章
- MySQL数据库引擎、事务隔离级别、锁
MySQL数据库引擎.事务隔离级别.锁 数据库引擎InnoDB和MyISAM有什么区别 大体区别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能 ...
- (转)SQL SERVER的锁机制(三)——概述(锁与事务隔离级别)
五.锁与事务隔离级别 事务隔离级别简单的说,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误.设置事务隔离级别将影响整条连接. ...
- SQL SERVER的锁机制(三)——概述(锁与事务隔离级别)
五.锁与事务隔离级别 事务隔离级别简单的说,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误.设置事务隔离级别将影响整条连接. ...
- 面试必问的MySQL锁与事务隔离级别
之前多篇文章从mysql的底层结构分析.sql语句的分析器以及sql从优化底层分析, 还有工作中常用的sql优化小知识点.面试各大互联网公司必问的mysql锁和事务隔离级别,这篇文章给你打神助攻,一飞 ...
- Java中线程的锁和数据库中的事务隔离级别
当涉及到两个或多个线程操作同一个资源时,就会出现锁的问题. 数据库中的某一条记录或者是某一个对象中的字段,可以修改,也可以读取,一般情况下,读取的那个方法应该加锁(即用synchronized互斥), ...
- 数据库常用的事务隔离级别和原理?&&mysql-Innodb事务隔离级别-repeatable read详解
转载地址:https://baijiahao.baidu.com/s?id=1611918898724887602&wfr=spider&for=pc https://blog.csd ...
- SQL Server中锁与事务隔离级别
SQL Server中的锁分为两类: 共享锁 排它锁 锁的兼容性:事务间锁的相互影响称为锁的兼容性. 锁模式 是否可以持有排它锁 是否可以持有共享锁 已持有排它锁 否 否 已持有共享锁 否 是 SQL ...
- Mysql中的读锁,写锁,乐观锁及事务隔离级别和并发问题
mysql读锁,写锁,乐观锁 读锁,也叫共享锁(shared lock) SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE 写锁,也叫排他 ...
- MySql锁和事务隔离级别
在讲mysql事物隔离级别之前,我们先简单说说mysql的锁和事务. 一:数据库锁 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对同一张表进行操作,比如有的在读取该行数据,其他的尝试去 ...
随机推荐
- andorid studio
http://www.cnblogs.com/smyhvae/p/4390905.html
- Junit4学习笔记
一.初始化标注 在老Junit4提供了setUp()和tearDown(),在每个测试函数调用之前/后都会调用. @Before: Method annotated with @Before exec ...
- 挖坑#3-----DP优化+CDQ分治+期望DP
1492: [NOI2007]货币兑换Cash 1176: [Balkan2007]Mokia 1452: [JSOI2009]Count 1563: [NOI2009]诗人小G tyvj1309 ...
- VisualBox ubuntu14.04 64位 android4.4.4源码编译总结
转载请保留出处:http://www.cnblogs.com/wi100sh/p/4337907.html 折腾了好几天,今天终于编译通过,用了4个多小时,太不容易了.如下图所示: 软件环境 虚拟机: ...
- android获取设备屏幕大小的方法
// 通过WindowManager获取 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay( ...
- HDOJ 2212 DFS
Problem Description A DFS(digital factorial sum) number is found by summing the factorial of every d ...
- 常用shell变量$#,$@,$0,$1,$2等
常用shell变量$#,$@,$0,$1,$2的含义解释: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返 ...
- java 实现 DES加密 解密算法
DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种: ...
- 来看看Github上流行的编码规范
Popular Coding Convention on Github是一个有趣的网站,它根据Github的代码提交情况分析了几种语言流行的代码规范,目前支持对JavaScript,Java,Py ...
- The app references non-public selectors in Payload
上周上传app到appstore在validation完后有警告提示"The app references non-public selectors in Payload/wacao.app ...