这是我参与「第五届青训营 」伴学笔记创作活动的第16天
概念
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。
MYSQL事务
按照我的理解通俗易懂的来说就是:由一个有限的数据库操作序列而构成的(一系列的sql语句放在一个方法里面的意思)、要么全部执行语句,要么就全部不执行、一个出错全部都错。
事务的四大特性
- 原子性: 事务作为一个整体被执行。
- 一致性: 指在事务开始之前和事务结束以后,数据不会被破坏。
- 隔离性: 多个事务并发访问时,事务之间是相互隔离的,一个事务不应该被其他事务干扰,多个并发事务之间要相互隔离。
- 持久性: 表示事务完成提交后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。
事务的隔离级别
四种:读为提交、读已提交、可重复读、串行化。
- 读未提交隔离级别:只限制了两个数据不能同时修改,但是修改数据的时候,即使事务未提交,都是可以被别的事务读取到的,这级别的事务隔离有脏读、重复读、幻读的问题;
- 读已提交隔离级别:当前事务只能读取到其他事务提交的数据,所以这种事务的隔离级别解决了脏读问题,但还是会存在重复读、幻读问题;
- 可重复读: 可重复读隔离级别,限制了读取数据的时候,不可以进行修改,所以解决了重复读的问题,但是读取范围数据的时候,是可以插入数据,所以还会存在幻读问题;
- 串行化: 事务最高的隔离级别,在该级别下,所有事务都是进行串行化顺序执行的。可以避免脏读、不可重复读与幻读所有并发问题。但是这种事务隔离级别下,事务执行很耗性能。
如果不设置的话,那么MYSQL隔离级别默认是RR可重复读
MYSQL默认是RR隔离级别
下面按照我的理解来说明一下为什么mysql默认是RR
首先第一种安全性低数据会乱所以肯定不可取、其次最后一种虽然数据不会脏但是性能消耗极大,对于服务器极其不友好,所以现在就剩下了第二种和第三种,那么为什么选择RR呢,原因如下
如果执行二个事务的时候(同时进行的)但是不是同时提交的,如果你的默认隔离级别是RC那么就会重复读可能就会读到才提交的事务中变化的语句然后主库就会把刚才B事务提交的更新语句给A事务读取这样再同步到库就会引起脏数据。