事务●必知必会【事务介绍、并发问题、隔离级别、悲观锁/乐观锁、事务类型】


一、什么是数据库事务

1、事务Transaction(简写tx):

在数据库中,事务是指一组逻辑操作,无论成或败,都作为一个整体进行工作,要么全部执行,要么全部不执行。


2、事务的ACID特性:

原子性:事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做。

一致性:事务必须使数据库从一个一致性状态变成另外一个一致性状态。事务开始和完成,数据必须保持一致。(数据不被破坏)'数据守恒'】

隔离性:当多个事务处于并发访问同一个数据库资源时,事务之间相互影响程度,不同的隔离级别决定了各个事务对数据资源访问的不同行为。

持久性:事务一旦提交后,数据是永久性的、不可回滚。(数据的修改是永久的)。




二、数据库并发问题

1、数据库的事务并发问题:多个事务并发访问/修改同一个资源

★ 跟java中的线程问题---并发问题差不多,都是针对同一资源,同时访问/修改出现的问题。



2、事务并发可能导致的问题【丢失更新、脏读、幻读、不可重复读】

★ 例子:两个客户端同时对同一个银行账号进行操作,一个客户端进行存取,一个客户端进行取钱】


(1)第一类丢失更新

  • 撤销rollback一个事务时,把其他事务已经提交更新的数据回滚掉了

(2)第二类丢失更新

  • 提交commit一个事务时,把其他事务已经提交更新的数据覆盖掉了。

(3)脏读

  • A事务未提交,但是B事务却读取到A事务的结果【读取到了B事务未提交的结果】(破坏隔离性)

(4)幻读

  • A事务在本次事务中,自己未操作过的数据B事务insert了一些数据),A事务进行两次读取,发现第一次读取时,记录不存在,第二次读取,记录出现了(破坏一致性,insert)

(5)不可重复读

  • 跟幻读类似,A事务在本次事务中,自己未操作过的数据B事务update/delete了一些数据),A事务进行两次读取,发现两次读取的记录值不同(破坏一致性,update/delete)


❀ 每一个事务是有自己的空间的概念




三、事务的隔离级别

1、 mysql中的4种隔离级别(重点看是否脏读、不可重复读、幻读即可):

图片.png



2、Oracle 和 Mysql对隔离级别的支持

■ Oracle 支持 READ COMMITED(缺省)和 SERIALIZABLE。

■ MySQL 支持 四种隔离级别,缺省为 REPEATABLE READ



3、Oracle 和 Mysql 常用的隔离级别:

隔离级别 脏读 不可重复读 幻读
oracle---读已提交(只是避免了脏读)
mysql---可重复读取(避免了脏读和不可重复读)



4、如何选用:

隔离级别越高,数据库事务并发执行性能越差,能处理的操作越少。

因此在实际项目开发中为了考虑并发性能一般使用 READ COMMITED,它能避免丢失更新和脏读,尽管不能避免不可重复读和幻读,

不过更多的情况下使用悲观锁或乐观锁来解决。




四、解决事务并发的方法(悲观锁/乐观锁)

✿ 隔离级别在一定程度解决了事务并发问题,不过一般解决事务并发,咱会采取悲观锁/乐观锁。


1、悲观锁:事务A在操作时,悲观地认为其他事务会进来干扰自己。---[用的比较多,非常安全]。

(1)悲观锁:使用数据库自身的排它锁机制 [★原理数据库自身的锁机制(写锁)]

  • DML操作会自动加上排它锁(排斥其他锁)
  • DQL操作需要我们手动加上排它锁
    • select * from 表名 for update;


■ 使用客户端工具Navicat模拟(开启两个命令行窗口,可以拖动出来方便查看)并发:

图片.png


  • DML操作会自动加上排它锁(排斥其他锁)
图片.png
图片.png


  • DQL操作需要我们手动加上排它锁
图片.png

■ 查询事务加上了 for update,其中一个事务处于阻塞状态,等着另一个事务的提交或回滚。

图片.png



2、乐观锁:事务A在操作时,乐观地认为其他事务不会进来干扰自己。

(1) ★原理:在表中额外添加一个列,用来表示修改的版本(整型类型),修改一次就把版本增加1.

  • 举例:事务A并发修改person表中的name字段。
图片.png
图片.png


(2)乐观锁的操作步骤:

图片.png




五、事务类型

■ 按服务器数量分,本地事务和分布式事务:

  • 本地事务:就是普通事务,能保证单台数据库上的操作的 ACID,被限定在一台数据库上;

  • 分布式事务:涉及多个数据库源的事务,即跨越多台同类或异类数据库的事务(由每台数据库的本地事 务组成的),分布式事务旨在保证这些本地事务的所有操作的 ACID,使事务可以跨越多台数据库;

■ 在java中有,JDBC 事务和 JTA 事务:

  • JDBC 事务:就是数据库事务类型中的本地事务,通过 Connection 对象的控制来管理事务;

  • JTA 事务:JTA 指(Java Transaction API),是 Java EE 数据库事务规范, JTA 只提供了事务管理接口, 由应用程序服务器厂商提供实现,JTA 事务比 JDBC 更强大,支持分布式事务

■ 在项目中实现事务,声明式事务和编程式事务:

  • 编程式事务:通过编写代码来管理事务。

  • 声明式事务: 通过注解或 XML 配置来管理事务。



写在后面的话

       如果你觉得一乐的文章给您带来了一些收获,可以给个三连❤️ ,一乐会一如既往地更新有价值的博客。如果文章存在错误,也欢迎大家指出。还有,如果大家有什么好的学习技巧、学习感悟,也非常欢迎大家在评论区一起交流~

最后感谢大家的支持,谢谢~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容