MySql教程

MySQL事物

本文主要是介绍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事物的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!