MySQL事务

疑问?

看到这里你会问为什么我标题写的是分布式解决方案,却把MySQL事务在这里放了一份,原因很简单,我单纯想复习一下;

初步讲解

MySQL中的事务主要处理操作量大,复杂度高的数据。比如拿Github来说,你删除一个账号,你首先要删除个人信息,其次也得删除个人仓库等等,这些数据库操作语句就构成了一个事务;

基本了解

  • MySQL5.7以后使用了innodb数据库引擎来支持事务;那么之前用的是MyISAM;
  • 事务主要用来处理数据库的完整性,多条的操作性SQL语句要么全部执行,要么不执行;
  • 事务是专门用来管理insert、update、delete型操作语句;

ACID

A:原子性(不可分割性)

  • 原子性: 一个事务Transaction所有的操作,要么全部完成,要么全部失败;
  • 举例子: 假设我去买水果需要支付100块钱,老板需要收到100块钱,不可能我支付了100而老板却没有收到100;

C:一致性

  • 一致性: 在事务开始之前和事务结束以后,数据库的完整性没有被破坏,保证了数据的正确性;
  • 举例子: 假设我去买水果,我微信余额总共200,老板说水果要100块钱,那么我支付了100以后微信余额就只有100了,而老板微信则多了100,这就表示一致性要符合逻辑运算;

I:隔离性

  • 举例子: 假设我去买水果我银行卡总共100块钱,我银行卡在支付的时候,有人给我卡里打了200块钱,那么别人给我打钱和我支付的操作并不影响我卡里最终的余额;也就是说别给我打钱和我支付的同时互不影响;

D:持久性

  • 持久性:事务结束后,对数据的修改在数据库里面是永久的,即使系统突然关机也没用;
  • 举例子:我买水果的时候微信余额100块钱,在支付的时候还没有输入支付密码手机就关机了,那么我手机重新开机微信余额还是100; 如果我当时输入了支付密码完成了付款,那么即使是我手机重新开机,我的余额也就是0了;

Java事务

解释

java系统需要操作数据库,则是使用JDBC来完成操作,事务的控制也就从MySQL转移到了Java程序代码中;

Java事务类型

JDBC事务

JDBC事务是通过Connection对象控制的; JDBC Connection接口提供了自动提交和手动提交;
java.sql.Connection提供的事务控制方法;

Java Transaction Api事务

请自行百度了解;

容器事务

请自行百度了解;

分布式事务

为什么会有分布式事务

单体应用被拆分成微服务应用,随着单个应用的模块被拆分成多个单独的应用(服务),可能部署在不同的服务器上面,分别使用了不同的数据源,业务操作需要调用三个服务来完成;此时每个服务内部的数据一致性都是服务本地的事务来处理的,但是全局的数据一致性没法保证;

那么如何解决分布式事务呢?

传送门: https://jiushiboy.top/post/20004.html