当前位置 : 主页 > 网络编程 > 其它编程 >

mysql四大隔离_mysql四大特性与四种隔离级别

来源:互联网 收集:自由互联 发布时间:2023-07-02
一、事务的基本要素(ACID)1、原子性(Atomicity)事务开始后所有操作要么全部做完要么全部不做不可能停滞在 一、事务的基本要素 (ACID) 1、原子性(Atomicity)事务开始后所有操作要么全部做完
一、事务的基本要素(ACID)1、原子性(Atomicity)事务开始后所有操作要么全部做完要么全部不做不可能停滞在

一、事务的基本要素 (ACID)

1、原子性(Atomicity)事务开始后所有操作要么全部做完要么全部不做不可能停滞在中间环节。事务执行过程中出错会回滚到事务开始前的状态所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体就像化学中学过的原子是物质构成的基本单位。

2、一致性(Consistency)事务开始前和结束后数据库的完整性约束没有被破坏 。比如A向B转账不可能A扣了钱B却没收到。

3、隔离性(Isolation)同一时间只允许一个事务请求同一数据不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱在A取钱的过程结束前B不能向这张卡转账。

4、持久性(Durability)事务完成后事务对数据库的所有更新将被保存到数据库不能回滚。

二、事务的并发问题

1、脏读事务A读取了事务B更新的数据然后B回滚操作那么A读取到的数据是脏数据

2、不可重复读事务 A 多次读取同一数据事务 B 在事务A多次读取的过程中对数据作了更新并提交导致事务A多次读取同一数据时结果 不一致。

3、幻读系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级但是系统管理员B就在这个时候插入了一条具体分数的记录当系统管理员A改结束后发现还有一条记录没有改过来就好像发生了幻觉一样这就叫幻读。

小结不可重复读的和幻读很容易混淆不可重复读侧重于修改幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行解决幻读需要锁表

三、事务隔离级别

1 read uncommitted。事务A对数据进行修改但未提交。此时开启事务B在事务B中能读到事务A中对数据库进行的未提交数据的修改。(这种方式也称为脏读)

2 read committed。事务A对数据进行修改但还未提交。此时开启事务B在事务B中不能读到事务A中对数据库的修改。在事务B还没有关闭时此时事务A提交对数据库的修改。这时候我们在事务B中可以查到事务A中对数据库的修改。这时存在一个问题我们在同一个事务中对数据库查询两次但两次的结果是不一样的。(这种方式称为不可重复读。)

3 repetition read。事务A对数据进行修改但未提交此时开启事务B在事务B中不能读到事务A对数据库的修改。在事务A提交对数据库修改时此时在事务B中仍不能读到事务A对数据库的修改。(这种方式称为可重复读)但此时有一个弊端比如我们在事务A中对数据库增加一条数据id 为 n 这时候我们在事务B中查询数据此时查不到id为n的数据。但当我们在事务B中增加id为n的数据时系统会提示id为n的数据已经存在我们添加失败。但此时此刻我们在事务B中仍不能查询到id为n的数据。这种方式存在一个幻读的概念。举个例子(系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级但是系统管理员B就在这个时候插入了一条具体分数的记录当系统管理员A改结束后关闭事务发现还有一条记录没有改过来就好像发生了幻觉一样这就叫幻读。)

4 serializable。在开启事务A时会产生锁表此时别的事务会等待等事务A结束时才会开启。

原文https://www.cnblogs.com/xiehongwei/p/11029066.html

网友评论