加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘孜站长网 (https://www.0836zz.com.cn/)- 运维、物联设备、数据计算、智能推荐、云管理!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

谈一谈MySQL中的事务

发布时间:2021-02-25 11:35:53 所属栏目:外闻 来源:互联网
导读:致性的状态转换到另一个一致性的状态。(在前面的例子中,一致性确保了,这25元要么在我这还没给商家,要么已经到达商家账户了,不会存在这25元凭空消失的情况。) 隔离性(isolation)通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。(在前

致性的状态转换到另一个一致性的状态。(在前面的例子中,一致性确保了,这25元要么在我这还没给商家,要么已经到达商家账户了,不会存在这25元凭空消失的情况。)

隔离性(isolation)通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。(在前面的例子中,当我还在支付给小卖部卖家25元的时候,对于我另外一个在拼多多上付款的事务,是觉得我还有25元的,只有当我整个事务提交后,另外一个事务才知道我已经扣除了对应的数额。所以,我们在执行扣除的时候,同时也要判断余额是否足够。)

持久性(durability)一旦事务提交,则其所做的修改将永久保存到数据库。(此时即使系统崩溃,修改的数据也不会丢失。)

实时上,如果数据库要严格遵循这这个性质,势必会造成数据库的性能降低。所以,在InnoDB中,是有着多种不同的事务级别的。分别是读未提交,读已提交,可重复读,,与串行化四种突通的级别。

读未提交:别人改数据的事务尚未提交,我在我的事务中也能读到。上述例子,假如拼多多的扣款是发生在我的金额已经减少25之后,但是事务还没提交,这个时候读取数据库,就已经读到数据是0了。很显然,如果这个时候,前面的时候回滚了,那么这个读取到的结果称之为脏读。

读已提交:别人改数据的事务已经提交,我在我的事务中才能读到。在上述例子中,如果扣减25的事务未完成,那么读到的都是结果25。假如在后面的事务中,多次读取余额,那么就有可能读到25,可能读到0,我们称之为不可重复读。

可重复读:别人改数据的事务已经提交,我在我的事务中也不去读。这种在第一次读数据的时候,实际上就已经形成对应的视图,后面只能读到对应的数据。

串行:我的事务尚未提交,别人就别想改数据。这个是严格串行化,在上述例子中,只有前面的扣除25元完成后,才能开始后面的事务


 

(编辑:甘孜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读