首页 > 编程知识 正文

为什么要在数据库中引入事务的概念,数据库事务和程序的区别

时间:2023-05-04 00:17:55 阅读:154919 作者:2490

以前更新MySQL专栏的时候,因为自己也是第一次学习数据库,对事务的理解还不充分,所以没有提到这个部分。 经过这段时间的学习,对自己的事务概念的理解已经比较全面了,为此特意更新这个博客帮助还没有理解的道友!

1、事务简介事务,简单来说,一组操作要么全部完成,要么不全部完成,绝对不允许只做其中的一部分操作。

例如,在银行转账中,a账号被传递给b账号1000元。 其中包括两个操作A-1000、B 1000。 决不允许这两个操作全部完成或全部不执行,或者只执行其中一个操作。 (斜笑/斜笑)。

如果事务回退,并且在执行单个事务时出现异常或错误,则会返回到最初未开始执行的进程。 例如,假设上面的银行转账流程完成了A-1000操作。 但是,执行B 1000操作时,系统发生了位置错误。 在这种情况下,没有执行转账操作之前的状态,也就是说A、B是多少钱,一点都不能少。

提交事务处理。 如果在事务执行过程中没有出现任何异常或错误,我们将保存对此事务的修复。 例如,在上面的银行转账流程中,假设A-1000、B 1000的操作全部完成,没有任何异常、错误。 在这种情况下,需要保存事务执行状态的修改(a减少1000元,b增加1000元)。 也就是说,是提交事务。

2、事务特性(ACID )事务具有四个特性:

、原子性(Atomicity )整体【原子性是指事务中包含的所有操作要么成功,要么全部失败】

、一致性数据【事务提交后的状态合集称为一致,即数据库仅包含事务提交的状态】

、隔离性(Isolation ) )同时执行【对于任意2个同时执行的事务a和b,从事务a来看,b要么在a开始前就已经结束,要么在a结束后就开始了。 这样,就感觉不到每个事务都在同时执行其他事务。 】

、持久性(Durability )结果【持久性是指一个事务提交后保存在硬盘上,对数据库中数据的更改是持久性的】

3、由于事务隔离问题事务可包含多个操作,如果在多个客户端上运行并发访问进程,则一个事务只执行了一部分操作,此时

举个转账的例子吧。 例如,第一个事务包含两个操作: A-100000和B 100000。 执行了两个操作后,正在准备提交。 就在这个时候,另一个客户b打开了第二个事务并检查了余额。 这个时候已经有100000元了。 但是,由于发现与第一个事务对应的哪个客户转发错了人,所以执行了事务回滚。 于是,A、B是多少钱,是多少钱呢? 这时,B客户的事务查了一下其余额,以前的100000元又不见了。

、未提交的读取(Read Uncommitted )也称为脏读,是一个事务阅读另一个事务未提交的内容,看事务a未提交的内容,如对A、b账户的修改。

、不可读取(Read Committed )、一个事务处理已提交另一个事务处理(主要是读取数据更新) )在此级别上,存在读取未提交读取的问题,即http://www.siw

但是,事务b可以阅读事务a提交的数据更新内容。

、可读取(Repeatable Read )、虚读)幻读)一个事务读取另一个事务的提交内容)主要插入数据)此级别解决了未提交的无法读取、无法读取的问题。

事务b能够读取事务a提出的数据插入内容。

、可序列化(Serializable ) )最高隔离级别是强制事务排序,避免相互冲突,解决幻读问题。

4、事务锁为了解决事务隔离问题,引入了锁的概念,只有解锁的事务才能对数据库进行读写操作color{red}只有锁定的事务

拿到锁的事务才可对数据库进行读写操作。事务有两种锁,并且有相应的权限。

①、读锁,也称为共享锁。某个事务A拿到该锁时,事务A只能进行读操作,此时其他事务也可以拿到这把锁(共享)。 ②、写锁,也称为排它锁。某个事务A拿到该锁时,事务A能进行读、写操作,此时其他事务不能拿到这把锁(排它)。

如果某个事务A拿到了读锁,其它事务可以拿到读锁(共享),但是无法获取写锁。
如果某个事务A拿到了写锁,其他事务既不能拿到写锁,也拿不到读锁!

③、锁的粒度

所谓锁的粒度,就是锁的范围,比如如果锁的范围是一张表,则事务A获取写锁后,只能事务A进行读、写,其他事务全部要靠边站。
如果锁的粒度是事务A需要操作的某几行记录,其它记录如果其他事务拿到锁仍然可以读、写。

一般情况下,锁的粒度越小(锁的范围小),则并发问题解决越好(事务都是并发执行),但是效率越低,因为需要大量的资源来确保各个事务的锁的粒度没有交集、冲突。

锁的粒度越大(锁的范围大),则并发问题解决越差(其他事务都在等待),但是效率较高,因为不要资源来控制各个事务的锁粒度交集问题。

5、运用锁解决隔离性问题

这里演示一下使用写锁解决读未提交读的问题,其它并发问题都可以通过类似的方法解决。

以上就是数据库事务的基本概念,感谢阅读!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。