关于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的锁和事务. 一:数据库锁 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对同一张表进行操作,比如有的在读取该行数据,其他的尝试去 ...
随机推荐
- 如何快速使用ECharts绘制可视化图表
1.在ECharts官网,下载ECharts的源码和示例文件. 2.解压缩下载下来的Echars压缩包,找到doc\example\www\echartsjs目录,将里面的js文件全部取出来,放到项目 ...
- poj 2431 Expedition 贪心
简单的说说思路,如果一开始能够去到目的地那么当然不需要加油,否则肯定选择能够够着的油量最大的加油站加油,,不断重复这个贪心的策略即可. #include <iostream> #inclu ...
- Mysql、SqlServer和Oracle 添加、修改、删除 字段总结
MySql: 1.添加 添加单列: ALTER TABLE 表名 ADD 列名 数据类型 添加多列: ALTER TABLE 表名 ADD 列名1 数据类型1,Add 列名2 数据类型2 2.修改 修 ...
- bzoj1014
动态询问LCP,所以我们不好用后缀数组考虑使用维护序列问题的splay+hash求LCP这里mark一下,hash求LCP常用mo=9875321自然溢出的话交上去莫名其妙WA了这里树上某节点hash ...
- BZOJ3439: Kpm的MC密码
3439: Kpm的MC密码 Time Limit: 15 Sec Memory Limit: 256 MBSubmit: 166 Solved: 79[Submit][Status] Descr ...
- Spark RCFile的那些“坑”
RCFile在平台的应用场景中多数用于存储需要“长期留存”的数据文件,在我们的实践过程中,RCFile的数据压缩比通常可以达到8 : 1或者10 : 1,特别适用于存储用户通过Hive(MapRedu ...
- HDU 5916 Harmonic Value Description 【构造】(2016中国大学生程序设计竞赛(长春))
Harmonic Value Description Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- [IoLanguage]Io Programming Guide[转]
Io Programming Guide Introduction Perspective Getting Started Downloading Installing Binaries Ru ...
- Difference Between Primes
Problem Description All you know Goldbach conjecture.That is to say, Every even integer greater than ...
- Delegate。。
Delegate类简介------------------------ 命名空间:System程序集:mscorlib(在 mscorlib.dll 中) 委托(Delegate)类是一种数据结构,通 ...