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; #手动提交
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)