[数据库事务与锁]详解四: 数据库的锁机制
注明: 本文转载自http://www.hollischuang.com/archives/898
数据库的读现象浅析中介绍过,在并发访问情况下,可能会出现脏读、不可重复读和幻读等读现象,为了应对这些问题,主流数据库都提供了锁机制,并引入了事务隔离级别的概念。
并发控制
在计算机科学,特别是程序设计、操作系统、多处理机和数据库等领域,并发控制(
Concurrency control
)是确保及时纠正由并发操作导致的错误的一种机制。
数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。下面举例说明并发操作带来的数据不一致性问题:
现有两处火车票售票点,同时读取某一趟列车车票数据库中车票余额为 X。两处售票点同时卖出一张车票,同时修改余额为 X -1写回数据库,这样就造成了实际卖出两张火车票而数据库中的记录却只少了一张。 产生这种情况的原因是因为两个事务读入同一数据并同时修改,其中一个事务提交的结果破坏了另一个事务提交的结果,导致其数据的修改被丢失,破坏了事务的隔离性。并发控制要解决的就是这类问题。
封锁、时间戳、乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。
锁
当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要一种机制来将数据访问顺序化,以保证数据库数据的一致性。锁就是其中的一种机制。
在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。
锁的分类(oracle)
一、按操作划分,可分为DML锁
、DDL锁
二、按锁的粒度划分,可分为表级锁, 页级锁, 行级锁(mysql)
三、按锁级别划分,可分为共享锁、排它锁
四、按加锁方式划分,可分为自动锁
、显示锁
五、按使用方式划分,可分为乐观锁, 悲观锁
DML锁(data locks,数据锁),用于保护数据的完整性,其中包括行级锁(Row Locks (TX锁))、表级锁(table lock(TM锁))。 DDL锁(dictionary locks,数据字典锁),用于保护数据库对象的结构,如表、索引等的结构定义。其中包排他DDL锁(Exclusive DDL lock)、共享DDL锁(Share DDL lock)、可中断解析锁(Breakable parse locks)
转载于:https://www.cnblogs.com/luozhijun/p/6867722.html
[数据库事务与锁]详解四: 数据库的锁机制相关推荐
- Java锁详解:“独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁+线程锁”
在Java并发场景中,会涉及到各种各样的锁如公平锁,乐观锁,悲观锁等等,这篇文章介绍各种锁的分类: 公平锁/非公平锁 可重入锁 独享锁/共享锁 乐观锁/悲观锁 分段锁 自旋锁 线程锁 乐观锁 VS 悲 ...
- 最全Java锁详解:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁
在Java并发场景中,会涉及到各种各样的锁,比如:高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景,这些锁有对应的种类:公平锁,乐观锁,悲观锁等等,这篇文章来详细介绍各种锁的分类: 公 ...
- linux如何迁移文件,linux 数据库文件迁移步骤详解
linux 数据库文件迁移步骤详解 linux 数据库文件迁移步骤详解 数据库所有文件(数据文件.日志文件.临时文件.控制文件)迁移步骤: 1. 迁移步骤概述: 1:具体需求 2:保存现有数据文件.控 ...
- mysql讲事物写到数据库_CookBook/1-MySQL数据库读写锁示例详解、事务隔离级别示例详解.md at master · Byron4j/CookBook · GitHub...
MySQL数据库读写锁示例详解.事务隔离级别示例详解 锁 性能分:乐观(比如使用version字段比对,无需等待).悲观(需要等待其他事务) 乐观锁,如它的名字那样,总是认为别人不会去修改,只有在提交 ...
- mongo 3.4分片集群系列之六:详解配置数据库
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- oracle数据库中索值,Oracle数据库中的索引详解
Oracle数据库中的索引详解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一 ROWID的概念 存储了row在数据文 ...
- mysql数据库的函数_详解数据库_MySQL: mysql函数
一.内置函数 1.数学函数 rand() round(num) ceil(num) floor(num) 随机 四舍五入 向上取整 向下取整 2.字符串函数 length() 字节长度 char_le ...
- IOS数据库操作SQLite3使用详解(转)
iPhone中支持通过sqlite3来访问iPhone本地的数据库. 具体使用方法如下 1:添加开发包libsqlite3.0.dylib 首先是设置项目文件,在项目中添加iPhone版的sqlite ...
- IOS数据库操作SQLite3使用详解
sqlite数据库iosdatabasesqlinteger 目录(?)[+] iPhone中支持通过sqlite3来访问iPhone本地的数据库. 具体使用方法如下 1:添加开发包libsqlite ...
- Discuz3.数据库数据表字典详解(完整版)
Discuz3.数据库数据表字典详解(完整版) 转自:https://discuzt.cr180.com/discuzcode-db.html pre_common_admincp_cmenu后台菜单 ...
最新文章
- 理解特征统计偏差、方差、平均值、中位数、百分数等等
- Potocol Buffer详解
- [C++]C++11:Function与Bind
- 缓存级别与缓存更新问题
- JEPaas【按钮隐藏】根据单据状态值决定【添加明细】【删除】按钮的隐藏和显示
- 4.4 Iterator(迭代器)
- maven项目的pom文件中各标签理解
- 2.4gwifi最高下载速度_2.4g网速(2.4gwifi最高下载速度)
- 如何通过Python发送邮件实现自动化测试报告?
- 微信浏览器video标签没有封面_video 标签在微信浏览器的问题解决方法
- 手动从注册表添加“从这打开CMD”命令
- python实现自动断网_《自拍教程62》Python adb反复断网联网测试
- 17个获取设计灵感创意必备网站
- 励志必看-------没有伞的孩子必须努力奔跑!
- [原创] PS制作水笔
- word文档回车变成空格
- week10 字幕提取
- 100个不能错过的实用JS自定义函数
- Java、JSP等网上书店图书销售管理系统
- 【网络】从日常开发说起,浅谈HTTP协议是做什么的