事务的四大特性和隔离级别

导读:本篇文章讲解 事务的四大特性和隔离级别,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

概念:
事务是逻辑上的一组操作,要么都执行,要么都不执行。
保证多个操作原子性,要么全成功,要么全失败。对于数据库来说事务保证批量的DML要么全成功,要么全失败。

事务的四大特性:

原子性(Atomicity):事务是最小的工作单元,不可再分。
一致性(Consistency):事务必须保证多条DML语句同时成功或同时失败。
隔离性(Isolation):一个事务不会影响其他事务的运行,互不干扰。事务之间隔离,四个隔离级别。
持久性(Durability):事务一旦提交成功,它对数据库中数据的改变就是永久性的

注意:rollback,或者commit后事务就结束了。

事务之间的隔离性:

第一级别:读未提交 (Read Uncommited)

对方事务还未提交,但当前事务可以读取到对方未提交的数据
读未提交存在脏读现象:表示读到了脏的数据,因为还未提交到硬盘,数据及其不稳定。(所有数据库都是从第二级别起步,第一级别太低)
脏读:本质是事务 B 去查询了事务 A 修改过的数据,但是此时事务 A 还没提交,所以事务 A 随时会回滚导致事务 B 再次查询就读不到刚才事务 A 修改的数据了,这就是脏读。

第二级别:读已提交 (Read Commited)

当前事务只能读取到对方事务已经提交的数据。由于未提交的读不到,则解决了脏读现象。
存在的问题:不可重复读,即可能每次读的数据不一样,做不到数据从头到尾查的数据是一样的。

第三级别:可重复读 (Repetable Read)

解决了不可重复读的问题
确保如果在一个事务中执行两次相同的SELECT语句,都能得到相同的结果,不管其他事务是否提交这些修改(如银行总账)。每一次读的都是事务初始的备份数据,每次读结果都一样
存在的问题:读取到的数据是幻象读
幻象读:一个事务先后读取一个范围的记录,但两次读取的纪录数不同
在这里插入图片描述

第四级别: 序列化(串行)读 (Serializable) (同步)

解决了所有问题
但是效率低,需要事务排队

每一个级别出现都解决了上一个级别存在的问题。
oracle数据库的默认隔离级别是:读已提交 (Read Commited)
mysql数据库默认的隔离级别:可重复读 (Repetable Read)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89286.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!