3、数据库隔离级别以及悲观锁和乐观锁
来源:互联网 发布:剑三经典818知乎 编辑:程序博客网 时间:2024/06/03 17:38
数据库隔离级别
目的:保证事务并发读取数据的正确性
数据库事务隔离级别
(1)Read uncommitted(读未提交数据):允许事务读取未被其他事务提交的变更数据,会出现脏读、不可重复读和虚读。
(2)Read committed(读已提交数据):只允许事务读取已经被其他事务提交的变更数据,可避免脏读,仍会有不可重复读和虚读
(3)Repeatable read(可重复读):确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新,可避免脏读、不可重复读仍会有虚读。
(4)Serializable(序列化):确保事务可以从一个表中读取相同的行,在事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,可避免所有并发问题,但性能低。
MySQL支持四种事务隔离级别,其中REPEATABLE READ为默认事务隔离级别。
设置说明:隔离级别越高,越能保证数据的完整性和一致性,但对并发性的影响越大。对于大多数应用程序,数据库系统的隔离级别设为ReadCommitted。能避免脏读取,而且具有较好的并发性能。对于不可重复读、虚读和第二类丢失更新这些并发问题,采用悲观锁或乐观锁。
悲观锁和乐观锁
悲观锁:每次拿数据时怕别人会修改,所以都会先上锁,当其他事务要访问该数据时就会阻塞。一般用在表锁、行锁、读锁和写锁,在操作前先上锁。
乐观锁:每次拿数据时认为别人不会修改,不会上锁,但在更新时会先判断一下在此期间别人是否有更新该数据,可以使用版本号等机制。
适用于:读取多、写少的情况,可以提高吞吐量。
DB2事务隔离级别:
(1)Uncommitted read(UR——未提交读)
读取数据时,对表加IN表锁,而不会对数据行加锁。修改数据时,则在数据上加X锁以及相应表级别锁(修改操作与CS处理相同)。
并发性:丢失更新、脏读、不可重复读和虚读都有可能发生
(2)Cursor stability(CS——游标稳定性)默认级别:仅锁住当前处理的记录
锁定游标定位的当前行。读取加NS锁,修改加X锁,带有修改的查询加U锁。锁定持续到读取下一条或事务结束。
并发性:丢失更新和脏读不会发生;但有可能出现不可重复读和虚读。
(3)Read statility(RS——读稳定性)
只是锁定事务实际检索和修改的行(读取的话加NS,修改的话加X,有修改意向加U)
并发性:丢失更新、脏读、不可重复读不会发生;但有可能出现虚读。
(4)Repeatable read(RR)
会对select的所有行加锁,对所有扫描的行加锁
并发性:丢失更新、脏读、不可重复读和虚读都不会发生
- 3、数据库隔离级别以及悲观锁和乐观锁
- 数据库的隔离级别以及悲观锁和乐观锁详解
- Hibernate悲观锁、乐观锁 以及事务隔离级别
- 事务的隔离级别以及乐观锁,悲观锁
- mysql事务隔离级别以及乐观锁悲观锁
- 数据库事务隔离级别与锁 悲观锁 乐观锁
- MySQL中的隔离级别和悲观锁及乐观锁
- 事务隔离机制以及hibernate悲观锁和乐观锁
- 数据库事务隔离机制以及hibernate悲观锁和乐观锁
- Hibernate之事务、隔离级别、悲观锁、乐观锁
- Hibernate之事务、隔离级别、悲观锁、乐观锁
- 从事务隔离级别谈到Hibernate乐观锁,悲观锁
- 事务隔离级别与乐观锁、悲观锁
- mysql隔离级别与悲观锁、乐观锁
- mysql事务隔离级别、乐观锁、悲观锁
- 从事务隔离级别谈到Hibernate乐观锁,悲观锁
- 事物、隔离级别、(悲观、乐观)锁等概念理解
- MySQL中的隔离级别和悲观锁及乐观锁示例
- Redis之十一 AOF持久化
- 代码整洁之道,新手常犯的错误。
- C++中引用(&)的用法和应用实例
- **输出最长公共子序列-字符串
- 关于UPnP Device Architecture 2.0的阅读笔记(五)
- 3、数据库隔离级别以及悲观锁和乐观锁
- Redis之十五 复制
- malloc和free函数详解
- POJ 1995 Raising Modulo Numbers
- 【机房收费】-- 组合查询
- 闲来无事,看如何用DOM解析XML
- 【hrbust700纪念】Hrbust 1847 擦除字符串【状压dp+Dfs枚举可行状态+剪枝】好题
- Redis之十六 Sentinel(哨兵)
- auto和decltype的用法总结