当前位置: 首页 > news >正文

mysql(2)

1.ACID

关系型数据库都有ACID特性

  1. 原子性Atomicity) : 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
  2. 一致性Consistency): 执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;
  3. 隔离性Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
  4. 持久性Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

只有保证了AID,才能保持C。

2.并发带来的问题

1.脏读

此时一个事务读取数据并修改了数据,修改对其他事务是可见的,但是此事务未提交。另一个事务读取了这个未提交的数据,第一个事务回滚,未将数据提交到数据库。第二个事务读取到的数据就是脏读。

2.不可重复读

指一个事务多次读取同一数据。

两个事务同时读取一个数据,第一个事务修改数据,第二事务再次读取,得到修改后的数据,此时,第二个事务读取的数据不一致。

3.幻读

第一个事务读取数据,第二个事务插入一些数据,之后,第一个事务查询发现多了些原本不存在的数据,如同幻觉一般。

不可重复读侧重于:数据内容修改或者记录减少。

幻读侧重于:记录新增。

3.事务隔离级别

  • READ-UNCOMMITTED(读取未提交) : 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
  • READ-COMMITTED(读取已提交) : 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
  • REPEATABLE-READ(可重复读) : 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
  • SERIALIZABLE(可串行化) : 最高的隔离级别,完全服从 ACID 的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

mysql默认可重复读。

4.InnoDB支持的行锁

  • 记录锁(Record Lock) :也被称为记录锁,属于单个行记录上的锁。
  • 间隙锁(Gap Lock) :锁定一个范围,不包括记录本身。
  • 临键锁(Next-Key Lock) :Record Lock+Gap Lock,锁定一个范围,包含记录本身,主要目的是为了解决幻读问题(MySQL 事务部分提到过)。记录锁只能锁住已经存在的记录,为了避免插入新记录,需要依赖间隙锁。

5.意向锁

使用表锁时,如何判断表的记录中有没有行锁,依次遍历性能太差。使用意向锁快速判断是否可以对某个表使用表锁。

  • 意向共享锁(Intention Shared Lock,IS 锁):事务有意向对表中的某些记录加共享锁(S 锁),加共享锁前必须先取得该表的 IS 锁。
  • 意向排他锁(Intention Exclusive Lock,IX 锁):事务有意向对表中的某些记录加排他锁(X 锁),加排他锁之前必须先取得该表的 IX 锁。

意向锁是有数据引擎自己维护的,用户无法自己手动操作意向锁,在为数据行加共享/排他锁之前,InnoDB会先获取该数据行所在数据表的对应意向锁。

意向锁之间是相互兼容的。

意向锁和共享锁、排他锁(表级)之间,只有意向共享锁和表级共享锁兼容。

http://www.lryc.cn/news/127504.html

相关文章:

  • 介绍 Apache Spark 的基本概念和在大数据分析中的应用
  • Vue CLI创建Vue项目详细步骤
  • 机器学习算法之-逻辑回归(2)
  • 【业务功能篇65】maven加速 配置settings.xml文件 镜像
  • 题目:售货员的难题(状压dp)
  • Linux 的 MySQL 5.x - 关于 Windows 10 的 Navicat Premium 导入 Excel (.xlsx)文件,报错问题集锦
  • 基于IP网络的存储协议——iSCSI
  • 神经网络基础-神经网络补充概念-27-深层网络中的前向传播
  • 用cpolar生成的公网地址,对位于本地的Cloudreve网盘进行访问
  • docker compose部署zookeeper
  • 【SA8295P 源码分析】77 - QNX Camera 之 ais_server 服务 源码分析
  • 内网搭建电影网站的实现和进行公网访问
  • 5.4 常用滤波算法
  • 【算法系列篇】双指针
  • Web和云开发,Rust会起飞?
  • 深度学习项目学习
  • 【3Ds Max】弯曲命令的简单使用
  • opencv基础:几个常用窗口方法
  • web后端解决跨域问题
  • 06 json数据解析和列表控件
  • 分布式 - 消息队列Kafka:Kafka生产者架构和配置参数
  • MAUI+Blazor:windows 打包踩坑
  • web集群学习:搭建 LNMP应用环境
  • 我的创作纪念日(256天)
  • Vue 转 React 指南
  • Oracle外部表ORACLE_LOADER方式加载数据
  • 【RocketMQ】NameServer总结
  • Wordcloud | 风中有朵雨做的‘词云‘哦!~
  • 《孤注一掷》现实版:29万打水漂,华为程序员也躲不过的诈骗
  • C语言库函数之 qsort 讲解、使用及模拟实现