事务特征(ACID):

  1. 原子性:事务的操作要么全做要么全不做。
  2. 一致性:事务操作的结果是一个一致状态转换到另一个一致状态。
  3. 隔离性:一个事务的执行过程不能受到其他事务的干扰。
  4. 持久性:事务一旦提交,对数据库做出的更新将是永久的。

并发产生问题:

  1. 丢失修改:修改的数据被覆盖
  2. 脏读:读取到未提交的数据。
  3. 不可重复读:同一个事务两次读结果不一致。
  4. 幻读:一个事务读到了另一个事务中insert的数据,好像出现了幻觉。

数据库的隔离级别:

并发控制的技术:

  • 数据库锁

    排它锁(X锁):写锁,一个事务获取了写锁,则其他事务都不能再加任何类型的锁,直到锁释放。

    共享锁(S锁):读锁,一个事务获取了读锁,其他事务能加读锁,不能加写锁。

(1) 锁协议:
1、一级封锁协议:事务在修改数据前先加写锁,直到事务结束。(防止更新丢失)
2、二级封锁协议:在一级的基础上,事务读数据先加读锁,读完释放读锁。(防止脏读)
3、三级封锁协议:在一级的基础上,事务读数据先加读锁,直到事务结束释放。(防止不可重复读)

(2)两端封锁协议:事务执行过程中,不允许加锁释放锁交叉执行。

加锁阶段:在该阶段可以进行加锁操作。在对任何数据进行读操作之前要申请并获得S锁,在进行写操作之前要申请并获得X锁。加锁不成功,则事务进入等待状态,直到加锁成功才继续执行。

解锁阶段:当事务释放了一个封锁以后,事务进入解锁阶段,在该阶段只能进行解锁操作不能再进行加锁操作。

两段封锁法可以这样来实现:事务开始后就处于加锁阶段,一直到执行ROLLBACK和COMMIT之前都是加锁阶段。ROLLBACK和COMMIT使事务进入解锁阶段

(3)InnoDB行锁算法:
行记录锁:
间隙锁:锁定一个范围。
next-key lock: 锁定一个范围,并锁定记录。

  • 写时复制:读操作一般远远超过写操作,COW读操作不用加锁,极大提高读取性能。

  • 多版本并发控制

    MVCC可以提供基于某个时间点的快照,使得对于事务看来,总是可以提供与事务开始时刻相一致的数据,而不管这个事务执行的时间有多长.所以在不同的事务看来,同一时刻看到的相同行的数据可能是不一样的,即一个行可能有多个版本。

    为了实现mvcc, innodb对每一行都加上了两个隐含的列,其中一列存储行被更新的”时间”,另外一列存储行被删除的”时间”. 但是innodb存储的并不是绝对的时间,而是与时间对应的数据库系统的版本号,每当一个事务开始的时候,innodb都会给这个事务分配一个递增的版本号,所以版本号也可以被认为是事务号.对于每一个”查询”语句,innodb都会把这个查询语句的版本号同这个查询语句遇到的行的版本号进行对比,然后结合不同的事务隔离等级,来决定是否返回该行.

锁带来的问题:

1、活锁:
某一事务一直在等待锁。采用先来先服务的策略。
2、死锁:
事务互相等待锁。
预防:一次将所有需要的数据全部加锁;规定一个封锁顺序
诊断死锁并解除:超时法;等待图法,如果有环则有死锁。解除死锁:选择回滚代价最小的事务;回滚多远;避免饿死。

锁的粒度越大,能够封锁的单元就越少,其并发度越低,系统开销越小。一个系统支持多个封锁粒度供不同的事务选择,叫多粒度封锁。

多粒度锁协议:对一个结点加锁意味着这个节点的所有后裔节点都被加同样的锁。显示封锁:直接加到数据对象的锁,隐式封锁:该数据对象是由于上级节点加锁而加上的锁。

意向锁:对任意节点加锁,就必须先对它的上层节点加意向锁。意向共享锁,意向排他所,共享意向排他锁。

数据库事务和并发控制相关推荐

  1. 【数据库原理实验(openGauss)】事务与并发控制

    事务与并发控制 文章目录 事务与并发控制 一.事务 (1)事务的ACID特性 (2)事务管理 (3)事务实例 1.未提交的事务 2.已提交的事务 二.并发控制 (1)加锁语法 (2)加锁实例 一.事务 ...

  2. 12事务与并发控制(数据库原理)

    事务与并发控制 目录 一.事务概述 二.事务的类型 三.事务处理语句 四.事务的并发控制 一.事务概述 1.关系数据库的四个特征: 安全性:防止未授权的用户随意更改数据库中的数据 完整性:实体完整性. ...

  3. 数据库事务的四大特性和隔离级别

    数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么全部执行,要么全部都不执行. 一个逻辑工作单元要成为事务,必须满足事务的四大特性(ACID).即 ...

  4. 数据库 事务的特性ACID

    事务(Transaction)是并发控制的基本单位. 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这 ...

  5. mysql隔离级别加锁情况_MySQL数据库事务各隔离级别加锁情况--read committed amp;amp; MVCC...

    上节回顾 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理解. 这篇记录我对 MySQL 事务隔离级别 read committed & MVCC 的理解. 前言 ...

  6. mysql当前时间减一分钟_MySQL数据库事务的机制【总结】

    php中文网最新课程 每日17点准时技术干货分享 这几天面试多次被问到了数据库事务机制.隔离级别.乐观锁悲观锁类的问题,之前对这些只能说有所了解,有些概念还停留在记忆层面,没有理解,所以回答的不好.后 ...

  7. 数据库事务系列-事务模型基础

    从这篇文章开始,笔者将会在接下来很长时间里整理记录一个相对独立的知识领域-数据库事务,之所以忽然有这个想法,说来也是一种机缘巧合.本来是单纯计划写写HBase行级事务模型的具体实现的,但是在周末一不小 ...

  8. 数据库事务以及事务的隔离级别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp45 [size=12px;]事务的四个属性[/size]:原子性(atom ...

  9. mysql隔离级别 简书_数据库事务和四种隔离级别

    什么是事务 事务(Transaction):访问并可能更新数据库中各种数据项的一个程序执行单元(unit),它通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起 ...

最新文章

  1. linux处理机调度实验报告,处理机调度试验
  2. mysql注入漏洞语句,web安全之sql注入漏洞
  3. sendmail邮件服务器的基本建立过程
  4. php 同时导出两个文件_使用orangehill/iseed自动反向生成数据填充文件
  5. JBOSS EAP6.2.0的下载安装、环境变量配置以及部署
  6. java B2B2C 源码 多级分销Springcloud多租户电子商城系统-Spring Cloud eureka
  7. c#中一般处理程序中使用session
  8. php动态万年历模块,php如何实现万年历的开发(每日一课真是非常有效率)
  9. php tp框架面试问题,Thinkphp面试问题及答案
  10. NLP的巨人肩膀[转]
  11. PS的钢笔,路径,选取,描边(虚线)
  12. CSS 实现平行四边形
  13. 星际争霸新手战术指南点滴
  14. xp大容量u盘补丁_u盘128g 个性 大容量电脑系统修复
  15. 微信小程序电子签名及图片生成
  16. ssh开启图形界面_分享|3 个 Linux 上的 SSH 图形界面工具
  17. 曹胜欢,java那些事儿
  18. JSP一个抽奖小游戏
  19. Xilinx Zynq ZynqMP DNA
  20. LeetCode题解(0625):最小因式分解(Python)

热门文章

  1. Adobe Media Server 5(AMS)的安装及使用
  2. CreatePipe匿名管道通信
  3. Sqlserver中char,nchar,varchar与Nvarchar的区别
  4. Go 应用性能优化指北
  5. 进程间程序替换和minishell
  6. 【线上分享】基于人眼主观视觉的画质评价与提升
  7. LiveVideoStack线上分享第五季(五):用FFmpeg搭建基于CNN的视频分析方案
  8. Java锁之可重入锁和递归锁
  9. Python线程、进程、进程池、协程
  10. Android NFC开发