数据库 事务及特性 隔离机制 引擎

事务

**1.事务的概念:
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的单位。**例如在关系型数据库中,一个事务可以是一条sql语句、一组sql语句或整个程序。

2.事务的ACID(事务管理)特性
(1)原子性
事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。
(2)一致性
事务的执行结果必须是使数据库从一个一致性状态转换到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性装状态。
(3)隔离性
一个事务的执行不能被其他的事务干扰。即一个事务的内部操作及使用的数据对其他并发操作事务是隔离的,并发执行的各个事务之间不能互相干扰。
(4)持续性
持续性也称为永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行的结果有任何影响。
3.并行事务的四大问题:
(1)更新丢失:和别的事务读到相同的东西,各自写,自己的写被覆盖了。(谁写的快谁的更新就丢失了)
(2)脏读:读到别的事务未提交的数据。(万一回滚,数据就是脏的无效的了)
(3)不可重复读:两次读之间有别的事务修改。
4)幻读:两次读之间有别的事务增删。

应隔离级别

**1.READ UNCOMMITTED:**读未提交,不解决任何问题。
**2.READ COMMITTED:**读已提交,只读提交的数据,无脏读;
**3.REPEATABLE READ:**可重复读,加行锁,两次读之间不会有修改,无脏读无重复读;
**4.SERIALIZABLE:** 串行化,加表锁,全部串行,无所有问题。

在这里插入图片描述

  1.READ UNCIMMITTED(未提交读)
  事务还没提交,而别的事务可以看到他其中修改的数据的后果,也就是脏读。

  2.READ COMMITTED(提交读)
  首先大多数数据库系统的默认隔离级别是READ COMMITTED,这种隔离级别就是一个事务的开始,只能看到已经完成的事务的结果,正在执行的,是无法被其他事务看到的。这种级别会出现读取旧数据的现象

  3.REPEATABLE READ(可重复读)
   REPEATABLE READ解决了脏读的问题,该级别保证了每行的记录的结果是一致的,也就是上面说的读了旧数据的问题,但是却无法解决另一个问题,幻行,顾名思义就是突然蹦出来的行数据。指的就是某个事务在读取某个范围的数据,但是另一个事务又向这个范围的数据去插入数据,导致多次读取的时候,数据的行数不一致。

总结:虽然读取同一条数据可以保证一致性,但是却不能保证没有插入新的数据。

下面是各个隔离级别的原理:参考博客https://blog.csdn.net/chenyiminnanjing/article/details/82714341

READ_UNCOMMITED 的原理:
1,事务对当前被读取的数据不加锁;
2,事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级共享锁,直到事务结束才释放。
下面分别对应上面1,2产生的表现:
1,事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,能读到事务2对该记录的修改版本,即使该修改尚未被提交。
2,事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。
READ_COMMITED 的原理:
1,事务对当前被读取的数据加 行级共享锁(当读到时才加锁),一旦读完该行,立即释放该行级共享锁;
2,事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。
表现:
1,事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,读到的只能是事务2对其更新前的版本,要不就是事务2提交后的版本。
2,事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。
REPEATABLE READ 的原理:
1,事务在读取某数据的瞬间(就是开始读取的瞬间),必须先对其加 行级共享锁,直到事务结束才释放;
2,事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。
表现:
1,事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,读到的仍然是第一次读取的那个版本。
2,事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。
SERIALIZABLE 的原理:
1,事务在读取数据时,必须先对其加 表级共享锁 ,直到事务结束才释放;
2,事务在更新数据时,必须先对其加 表级排他锁 ,直到事务结束才释放。
表现:
1,事务1正在读取A表中的记录时,则事务2也能读取A表,但不能对A表做更新、新增、删除,直到事务1结束。
2,事务1正在更新A表中的记录时,则事务2不能读取A表的任意记录,更不可能对A表做更新、新增、删除,直到事务1结束。
先写到这里,后面还会对其中提到的锁进行解释。

引擎

参考这篇文章:
https://blog.csdn.net/mrleeapple/article/details/80526034

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值