在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

数据库事务的实现原理是什么

114次阅读
没有评论

共计 2216 个字符,预计需要花费 6 分钟才能阅读完成。

本篇内容主要讲解“数据库事务的实现原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“数据库事务的实现原理是什么”吧!

数据库的事务有四大特性:原子性、隔离性、永久性、一致性,下面将介绍这四大特性的定义和在 InnoDB 引擎中是怎么实现的。

原子性

定义

一次操作是不可分割的,要么全部成功,要么全部失败。比如我们的转账操作,不允许出款方成功,收款方失败这种情况,要么都成功,要么多失败,不可能出现中间状态。

实现

InnoDB 引擎使用 undo  log(归滚日志)来保证原子性操作,你对数据库的每一条数据的改动 (INSERT、DELETE、UPDATE) 都会被记录到 undo log   中,比如以下这些操作:

你插入一条记录时,至少要把这条记录的主键值记下来,之后回滚的时候只需要把这个主键值对应的记录删掉就好了。

你删除了一条记录,至少要把这条记录中的内容都记下来,这样之后回滚时再把由这些内容组成的记录插入到表中就好了。

你修改了一条记录,至少要把修改这条记录前的旧值都记录下来,这样之后回滚时再把这条记录更新为旧值就好了。

当事务执行失败或者调用了 rollback 方法时,就会触发回滚事件,利用 undo log 中记录将数据回滚到修改之前的样子。

更多关于 undo log 的信息,后面再单独开一篇文章打卡。

隔离性

定义

多个事务并发执行的时候,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

实现

隔离性可能会引入脏读 (dirty read)、不可重复读(non-repeatable read)、幻读(phantom  read) 等问题,为了解决这些问题就引入了“隔离级别”的概念。

SQL 标准的事务隔离级别包括:读未提交 (read uncommitted)、读提交(read committed)、可重复读(repeatable  read) 和串行化(serializable):

读未提交:一个事务还没提交时,它做的变更就能被别的事务看到。

读提交:一个事务提交之后,它做的变更才会被其他事务看到。

可重复读:一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。

串行化:  顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

SQL 标准中规定,针对不同的隔离级别,并发事务可以发生不同严重程度的问题,具体情况如下:

上面就是几种隔离级别可能出现的并发问题,但是有必要说一下,你隔离得越严实,效率就会越低。

InnoDB 引擎是如何保证隔离性的? 利用锁和 MVCC 机制。这里简单的介绍一下 MVCC 机制,也叫多版本并发控制,在使用 READ  COMMITTD、REPEATABLE READ 这两种隔离级别的事务下,每条记录在更新的时候都会同时记录一条回滚操作,就会形成一个版本链,在执行普通的  SELECT 操作时访问记录的版本链的过程,这样子可以使不同事务的读 - 写、写 - 读操作并发执行,从而提升系统性能。

持久性

定义

事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

实现

要保证持久性很简单,就是每次事务提交的时候,都将数据刷磁盘上,这样一定保证了安全性,但是要知道如果每次事务提交都将数据写入到磁盘的话,频繁的 IO   操作,成本太高,数据库的性能极低,所以这种方式不可取。

InnoDB 引擎是怎么解决的?InnoDB 引擎引入了一个中间层来解决这个持久性的问题,我们把这个叫做 redo log(归档日志)。

为什么要引入 redo log?redo log 可以保证持久化又可以保证数据库的性能,相比于直接刷盘,redo log 有以下两个优势:

redo log 体积小,毕竟只记录了哪一页修改了啥,因此体积小,刷盘快。

redo log 是一直往末尾进行追加,属于顺序 IO。效率显然比随机 IO 来的快。

InnoDB 引擎是怎么做的? 当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log   里面,并更新内存,这个时候更新就算完成了。当数据库宕机重启的时候,会将 redo log 中的内容恢复到数据库中,再根据 undo log 和 binlog   内容决定回滚数据还是提交数据。

一致性

定义

一致性简单一点说就是数据执行前后都要处于一种合法的状态,比如身份证号不能重复,性别只能是男或者女,高考的分数只能在 0~750 之间,红绿灯只有 3 种颜色,房价不能为负的等等,  只有符合这些约束的数据才是有效的,比如有个小孩儿跟你说他高考考了 1000 分,你一听就知道他胡扯呢。数据库世界只是现实世界的一个映射,现实世界中存在的约束当然也要在数据库世界中有所体现。如果数据库中的数据全部符合现实世界中的约束(all  defined rules),我们说这些数据就是一致的,或者说符合一致性的。

实现

要保证数据库的数据一致性,要在以下两个方面做努力:

利用数据库的一些特性来保证部分一致性需求:比如声明某个列为 NOT NULL 来拒绝 NULL 值得插入等。

绝大部分还是需要我们程序员在编写业务代码得时候来保证。

到此,相信大家对“数据库事务的实现原理是什么”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计2216字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 毛片免费视频网站 | 欧美日本国产 | 亚洲成a人一区二区三区 | 久久丁香五月天综合网 | 天堂8在线天堂资源bt | 日日摸日日踫夜夜爽无码 | 欧美日韩亚洲国产一区二区三区 | 在线亚洲欧美性天天影院 | 深夜特黄a级毛片免费播放 深夜偷偷看视频在线观看 深夜一级毛片 | 2022免费国产精品福利在线 | 久久久综合香蕉尹人综合网 | 国产精品交换 | 国产在线乱码一区二区三区 | 伊人久久大香线蕉亚洲五月天 | 国产a级高清版毛片 | 香蕉成人啪国产精品视频综合网 | 欧美精品久久久久久久影视 | 精品久久久久香蕉网 | 亚洲av成人精品网站在线播放 | 伊人啪| 日本a一级毛片免费观看 | 大毛片| 女人被男人躁得好爽免费视频 | 激情宗合网 | 同事激情 | 欧美色欧美色 | 人人妻人人爽人人做夜欢视频九色 | 成人片黄网站色大片免费观看cn | 九九视频免费精品视频免费 | 精品人妻无码一区二区三区性 | 羞羞视频2023 | 91成人午夜性a一级毛片 | 韩产日产国产欧产 | 国产精品嫩草影院午夜 | 老司机免费视频高清在线 | 黄色片网站免费看 | 亚洲一级免费毛片 | 亚洲人成人一区二区三区 | 欧美日韩精品一区二区在线视频 | 国产成人精品高清不卡在线 | 成人做爰免费视频免费看 |