• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

数据库中的事务机制

极客笔记 多啦H梦 8个月前 (08-16) 360次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

事务机制

关系型数据库是需要遵循 ACID 规则的,分别介绍如下 。

A( Atomic )原子性:

即事务要么全部做完,要么全部都不做。 只要其中一个操作失败,就认为事务失败,需要回滚 。

C ( Consistency )一致性:

数据库要一直处于一致的状态 。

I ( Isolation )独立性:

并发的事务之间不会互相影响 。

D ( Durability )持久性:

一旦事务提交后,它所做的修改将会永久地保存在数据库中 。

为了达到以上事务特性,数据库定义了几种事务隔离级别 。

1 ) 未授权读取( Read Uncommitted ) :

会产生脏读,可以读取未提交的记录, 实际情况下不会使用 。

2 ) 授权读取( Read Committed ):

会存在不可重复读以及幻读的现象 。 不可重复读重点在修改,即读取过的数据两次读的值不一样;幻读则侧重于记录数目 变化,多次执行同一个查询返回的记录不完全相同 。

3 ) 可重复读取( Repeatable Read ):

解决了不可重复读的问题, 会存在幻读现象 。InnoDB 使用 MVCC+Gap Lock ( InnoDB 行锁的一种)避免了幻读问题。

4 ) 串行( Serializable ):

也称可串行读,此级别下读操作会隐式获取共享锁,保证不同事务间的互斥 。 其消除了脏读 、 幻读,但事务并发度急剧下降 。

这里需要注意的是, MySQL 的默认事务级别为 Repeatable Read ,而 JDBC 的默认事务级别为 Read Committed ,因此使用的时候要特别注意 。

此外,由 于 Read Committed 有不可重复读的问题,因此不能在 Statement 格式的 Binlog 下使用 ,必须设置为 Mixed 或者 Row。

事务隔离的实现基于锁机制和并发调度 。

其中并发调度使用的是 MVCC (多版本并发控制),通过保存修改行的旧版本信息来支持并发一致性读和回滚等特性。


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:数据库中的事务机制
喜欢 (0)
[247507792@qq.com]
分享 (0)
多啦H梦
关于作者:
热爱开源,热爱分享,谢谢大家的资瓷!

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00