栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL之事务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL之事务

什么是事务?

事务是逻辑上的一组操作,要么都执行,要么都不执行。

举个简单的例子

事务最经典的例子就是转账了。假如小明要给小刚转账100元,这个转账会涉及两个关键操作就是:

  1. 将小明的余额减少100元
  2. 将小刚的余额增加100元

事务会把这两个操作看成逻辑上的一个整体,这个整体包含的操作要么都成功,要么都失败。

这样就不会出现小明余额减少而小刚的余额并没有增加的情况。

什么是数据库事务?

我们在谈论事务的时候,如果没有特指分布式事务,往往指的就是数据库事务。

数据库事务的作用是什么?

简单来说,数据库事务可以保证多个对数据库的操作(也就是sql语句)构成一个逻辑上的整体。构成这个逻辑上的整体的这些数据库操作遵循:要么全部执行成功,要么全部执行不成功。

# 开启一个事务
START TRANSACTION;
# 多条 SQL 语句
SQL1,SQL2...
## 提交事务
COMMIT;

 另外,关系型数据库(MySQL,Oracle等)都具有ACID特性。

什么是ACID特性?

  1. 原子性(Atomicity):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用。
  2. 一致性(Consistency):执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的。
  3. 隔离性(Isolation):并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的。
  4. 持久性(Durability):一个事务被提交之后,它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

数据库的实现原理是什么?

MySQL InnoDB 引擎使用  redo log(重做日志)保证事务的持久性,使用 undo log(回滚日志)来保证事务的原子性。

MySQL InnoDB 引擎通过  锁机制、MVCC等手段来保证事务的隔离性(默认支持的隔离级别是REPEATABLE-READ)

保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。

并发事务带来哪些问题?

在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对同一数据进行操作)。并发可能导致以下的问题:

  • 脏读(Dity read):当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作时不正确的。
  • 丢失修改(Lost to modify):指在一个事务读取一个数据时,另外一个事务也访问了该数据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/287983.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号