MySQL事物
2021/8/15 19:05:51
本文主要是介绍MySQL事物,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
事物概念:一个或多个sql的组合
实例:银行转账:给同学转账1000,你的账户少了1000,对方的账户多了1000
事物特性
原子性:一个事物要么都做,要么都不做
一致性:在事物前和事物后,数据完整性都要符合预设规则,依赖原子性
持久性:事物之后,数据的修改是永久的(持续化存储)
隔离性:允许多个事物并发执行,不会因为交叉执行导致数据不一致
事物的执行过程
begin;//首先开启事物 update accout set money=money-1000;//然后进行修改 然后因为某种异常情况,执行中断,维修之后,进行事物回滚(rollback),还原数据 (commit)提交事物,表示本次事物完全完毕,提交之后无法回滚, 事物在没有提交之前出现任何情况都可以回滚
并发情况下若无隔离性保护,则有可能会出现什么情况:
脏写:事物A对数据的修改,在事物提交之前被其他事物覆盖。一般不会考虑,写都是加锁的。
脏读:一个事物中读取到的数据是其他事物中未提交的数据,可能会回滚
幻读:事务A查询“张三”,查询不到,插入又不成功,“张三”这条数据就像幻觉一样出现。这就是所谓的“幻读”。
不可重复读:在一个事物的不同阶段读取的数据不一致,事物A读取某一数据,事务B读取并修改了该数据,事物A为了对读取值进行检验而再次读取该数据,便得到了不同的结果。
解决方案:事物的隔离性,四种隔离级别
读未提交:在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。虽然效率,但也基本不用
读已提交:一个事务只能看见已经提交事务所做的改变。这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。
可重复读:这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行,本来它会产生幻读,但MySQL中采用MVCC技术解决了幻读。
可串行化:它是在每个读的数据行上加上共享锁,强制事务排序,使之不可能相互冲突。在这个级别,只能一个一个数据进行读取,效率极低,也基本不用。
MVCC:多版本并发控制
给每个事物分配一个事物id,指向自己的临时拷贝
事物中对数据进行操作时,都临时拷贝出一份数据进行操作,对拷贝出来的数据进行操作,事物提交时将事物操作持久化存储
解决了脏读,不可重复读,幻读的问题
这篇关于MySQL事物的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19Mysql安装教程:新手必看的详细安装指南
- 2024-11-18Mysql安装入门:新手必读指南
- 2024-11-18MySQL事务MVCC原理入门详解
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南