分布式事务 解决数据一致性(一)事务原则与实现:事务、sql事务

版权声明:此博客为个人博客,不涉及商业用途,仅提供学习参考,内容均来自个人原创以及互联网转载和摘录。 --------------------- 本文来自 路西法Lucifer 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/qq_37495786/article/details/83353681

事务:

定义:

      是以一种可靠一致的方式,访问和操作数据库中数据的程序单元。

原则:

     *a、 原子性   * b、一致性  * c、隔离性  * d、持久性

场景:

    账户A给账户B转100块钱。

    账户A:+100,账户B:-100,是在两个事务当中的。

原子性:账户A中+100,账户B-100,两个事务要么都成功,要么都失败,不可能存在账户A+100,而账户B却没有-100。

一致性:账户A和账户B,两个账户之间不管怎么转账,两个账户之间的总金额不会发生变化。

隔离性:账户A给账户B转账100,账户B减去100,在转账中途,同时账户B就开始查余额,这两个操作是发生在两个事务当中的,那么账户B能不能查到账户A转到的100?这就是数据库的隔离性定义的。这会根据数据库隔离性的设置,有不同的表示。

持久性:账户A与账户B之间的转账,一旦修改成功,就会存在数据库中,不管系统是重启或者什么的,都可以永久保存在数据库中,账户B就可以看到转账过来的100。

mysql语法:

BEGIN TRANSACTION;开启事务

开启事务之后,后面的转账都是在这个事务当中,当commit之后,事务才会被提交。如果中途想回滚,可以rollback,中间的事务就会回滚。

此时去执行剩下两条语句commit一下,提交事务,看下图,可以很清晰的发现,只有提交事务之后才可以修改成功数据。

mysql可以通过select @@GLOBAL.TX_ISOLATION,@@TX_ISOLATION;查询事务的隔离级别。

数据库默认都是可重复读。

猜你喜欢

转载自blog.csdn.net/qq_37495786/article/details/83353681