美文网首页
数据库事务(二)

数据库事务(二)

作者: icyage | 来源:发表于2018-12-04 17:49 被阅读6次

数据库事务那些事

这期接着来说数据库事务的小知识,因为MVCC的本身需要很多基础作为基础,准备分享几期基础知识后,再分享MVCC的多版本并发控制的文章。

数据库的操作跟系统操作一样,会存在多个工作单元操作共享的存储单元的情况。在数据库中就是多个事务单元对同一个存储数据进行操作的时候,如果不用锁进行控制就会出现各种各样的数据不符合预期的问题。通过锁来控制数据库中的并发操作,来解决那些不符合预期的问题。

共享锁与排他锁

共享锁(S锁)

共享锁——用于SELECT操作,如果一个事务T对某一数据添加了共享锁后,那么其他事务在事务T释放共享锁之前也只能对该数据添加共享锁,只要加了共享锁那么事务也只能读取数据。

使用
MySQL:SQL + lock in share mode

排他锁(X锁)

排他锁——用于DML操作,一个事务T对某一数据添加了排他锁后,那么其他事务不能获取该数据的其他锁,只要加了排他锁的事务才可以读取或者修改加锁的数据。

使用
 MySQL:SQL + for update

悲观锁与乐观锁

悲观锁(Pessimistic Lock)

悲观锁——每次操作都会认为会发生操作冲突,所以只要是获取数据的时候都会尝试加锁,这样其他事务获取相应数据的时候就会出现阻塞,直到其他事务获取到相应数据的锁。

悲观锁的概念的具体实现有上面提到的两种锁——共享锁与排他锁的

乐观锁(Optimistic Lock)

乐观锁——每次操作都会认为不会发生操作冲突,所以不会对数据加锁就进行操作,注意在操作的时候会校验这条数据在这期间是否被操作过,很多数据库都是使用版本号来控制的,只要数据被操作过相应数据的版本号就会变化,这样可以提供比较好的并发度,如果DML相应的操作比较多的不太适用这种锁,会比较多的性能损耗。

这种锁的概念需要通过使用者自己来实现,数据库本身是不提供的。

表锁与行锁

表锁

表锁——顾名思义,就是将整张表锁住

行锁

行锁——顾名思义,就是锁住相应的数据行索引,如果

死锁

死锁——就是多个事务需要处理相同的几个共享资源,事务在同一时刻各自获取到了不同的资源,需要等待对方的资源释放掉,这个时候就产生了死锁。

总结

很多情况下对于使用者来说,数据库中的这几种锁会出现混淆,其实这两组锁是两种不同的概念与维度。文章本身比较简短希望可以起到一个抛砖引玉的作用。

相关文章

  • 数据库事务简介(一)--- 所谓事务

    事务的概念 数据库事务简介(一)--- 所谓事务数据库事务简介(二)--- 故障恢复(未完成)数据库事务简介(三)...

  • Hibernate事务与并发问题处理(乐观锁与悲观锁)----

    目录 一、数据库事务的定义 二、数据库事务并发可能带来的问题 三、数据库事务隔离级别 四、使用Hibernate设...

  • Django之数据库事务编程

    在了解 Django 数据库事务编程前有必要先了解下数据库事务。 数据库事务(transaction) 数据库事务...

  • [二]事务原则与实现

    导航 一. 事务的原则 二. SQL实现数据库事务管理 三. JDBC实现事务管理 一. 事务的原则 事务的描述事...

  • 数据库笔记

    数据库 数据库⭐MySQL 默认存储引擎InnoDB(事务性存储引擎)一、事务 数据库事务? 数据库事务有什么作用...

  • Spring学习之事务管理基础

    Spring学习之事务管理基础 数据库事务相关概念 事务的定义 事务,一般指的是数据库事务,是指数据库操作的时候,...

  • 事务及事务隔离级别

    事务及事务隔离级别 什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务...

  • 搞懂Redis(四)-Redis事务

    事务本质:一组命令的集合 数据库事务与Redis事务 数据库事务数据库事务通过ACID(原子性.一致性.隔离性.持...

  • 数据库(五),事务

    为什么需要事务呢? 在数据库(二),数据库起源里面我们提到了事务。 数据库除了对查询等操作进行了抽象,另外一个重要...

  • SpringBoot 数据库事务

    SpringBoot 数据库事务 事务: 数据库事务是 访问并可能更新 数据库中各种数据项的一个程序执行单元 事务...

网友评论

      本文标题:数据库事务(二)

      本文链接:https://www.haomeiwen.com/subject/kpsdvxtx.html