MySql事务

MySql事务,第1张

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;   #手动提交

        

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5696775.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存