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

MySql事务

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

MySql事务

一、事务的特性(ACID)

1.原子性

        事务的最小单元,要么全部执行,要么全部执行失败回滚

        例:A向B转账100,要么转账成功,要么转账失败

2.一致性

        从一个一致的状态改变为另一个一致的状态。

        例:A向B转账100,要么A减100,B加100,要么都不动。之后可以继续转账

        原子性和一致性的区别:

        原子性:关注的是现象,例如转账成功或者失败,钱少没少

        一致性:关注的是状态,例如最后还能继续转账

3.隔离性

        多个用户并发操作数据,事务互不影响,互相隔离。

        例:多个人取钱,他们取钱互不影响。

4.持久性

        修改的数据是永久性的

        例:从账户取钱后,账户永久性改变。

二、事务的四个隔离级别

可以解决的问题:

1.脏读:

        脏读是指一个事务正在访问数据,并且对数据进行了修改,但是没有提交事务,此时,另一个事务也访问这个数据,然后使用了这个数据。

2.不可重复读:

        不可重复读是指在一个事务内,多次读取同一个数据。

        例如:在这个事务还没有结束时,另外一个事务也访问了该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。   

3.幻读:

        幻读是指当事务不是独立执行时发生的一种现象

        例如:第一个事务对一个表中的全部数据进行了修。同时,第二个事务向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

隔离级别:

1.未提交读(READ-UNCOMITTED)

        能够读到未提交的数据,这种隔离级别无法解决脏读、幻读、不可重复读

2.已提交读(READ-COMMITTED)

        能够读取提交的数据,可以解决脏读

3.可重复度(默认)(REPEATABLE-READ)

        读取了一条数据,这个事务不结束,别的事务也不能操作该条数据。解决了脏读、不可重复读

4.串行化(SERIALIZABLE)

        多个事务,只能按顺序,一个一个执行

        强制顺序执行,可以解决脏读、幻读、不可重复读,但是执行效率较低,不建议使用。

解决问题:

隔离级别脏读不可重复读幻读
未提交读×××
已提交读××
可重复读×
串行化

mysql默认隔离级别是可重复读,可以解决脏读,不可重复读,但是不能解决幻读,那么如何解决幻读呢?-------------加锁(表级锁、行级锁)后续介绍

三、查询修改隔离级别、事务提交方式语句:

查询隔离级别:(默认可重复读REPEATABLE-READ)

        SELECT  @@TX_ISOLATION;

        

可重复读隔离级别可以有效的避免脏读和幻读,所以一般不建议修改。

查询事务提交方式情况:(1自动提交,0手动提交)

        SELECT @@AUTOCOMMIT;

        

修改事务提交方式:

        SET AUTOCOMMIT = 0;   #手动提交

        

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696637.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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