事务-事务隔离性,是被很多初学者忽略的问题,那么事务和隔离性到底是一个怎样的存在,阅读完这篇文章,提高你对事务隔离性的认识、、、
事务:
事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。
例如:A—>B转帐100元,对应于如下两条sql语句
update account set money=money+100 where name=‘b’;
update account set money=money-100 where name=‘a’;
这两条sql必须是一个整体,要么都成功,要么都失败!
Mysql中控制事务:
mysql数据库开启事务命令:
start transaction 开启事务
rollback 回滚事务
commit 提交事务
演示A->B转账100元案例(不加事务):
1、B帐户加100:update account set money = money + 100 where name = ‘b’;
2、A帐户减100:update account money = money – 100 where name = ‘a’;
结果:B帐户增加100元,A帐户没有减少100元!
加上事务:
1、开事务:start transaction;
2、B帐户加100元:update account set money = money + 100 where name = ‘b’;
3、A帐户减100元: update account money = money – 100 where name = ‘a’;
4、提交事务:commit;
结果:事务中出现错误,整体回滚
事务的四大特性(ACID)
原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)
一个事务执行之前和执行之后都数据必须处于一致性状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障(断电等)也不应该对其有任何影响。
事务的隔离性
多个线程开启各自事务操作数据库中数据时,数据库系统要负责隔离各个事务的操作,保证各个线程获取到的数据的准确性。
如果不考虑隔离性,可能会引发如下问题:
脏读
不可重复读
虚读(幻读)
脏读:
指一个事务读取了另外一个事务未提交的数据。
这是非常危险的,假设A向B转帐100元,对应sql语句如下所示
1.update account set money=money+100 while name=‘b’;
2.update account set money=money-100 while name=‘a’;
3.rollback;
两个事务并行操作,A事务中给B+100元,还未提交,B事务中查询帐户,发现多了100元。A事务进行回滚。B刚才读到的钱又丢了。
如图(1):
不可重复读:
不可重复读是指一个事务范围内多次查询却返回了不同的数据,这是由于在查询间隔,被另一个事务修改并提交了。
例如银行想查询A帐户余额,第一次查询A帐户为200元,此时A向帐户内存了100元并提交了,银行接着又进行了一次查询,此时A帐户为300元了。银行两次查询不一致,可能就会困惑,不知道哪次查询是准的。
如图(2):
虚读(幻读)
事务T1查询帐户金额>200的用户数量,查出来10个;此时有一个员工存入100元,提交了事务。当事务T1再查询时发现帐户金额>200元的有11个,这就是幻读。
如图(3):
mysql已经部分解决了幻读问题
不可重复读重点在于修改,读取的某一个数据被修改了。
幻读重点在新增或删除,读取的统计值不一致。
事务隔离级别
数据库共定义了四种隔离级别来解决上述问题:
①Read uncommitted (读未提交) :最低级别,以上情况均无法保证。
②Read committed (读已提交) :可避免脏读情况发生。
③Repeatable read (可重复读) :可避免脏读、不可重复读情况的发生。
④Serializable (串行化) :可避免脏读、不可重复读、虚读情况的发生。
如图(4):
在MySQL数据库中查看当前事务的隔离级别:select @@tx_isolation;
如图(5):
在MySQL数据库中设置事务的隔离级别:set tx_isolation=’隔离级别名称;’
此生只为等你问路
而并非要为谁指路
数据库的事物隔离性和隔离级别
最新推荐文章于 2024-05-21 09:24:06 发布