赞
踩
事务就是一组数据库操作要么全部成功,要么全部失败。
事务的四大特性:ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)
MySQL中事务支持是在引擎层实现的,而MySQL的原生MyISAM引擎就不支持事务,所以被InnoDB取代。
数据库中多个事务同时执行时,可能出现以下问题:
为了解决这些问题,SQL标准规定了以下四个事务隔离级别;隔离得越严实,效率就会越低。。
下面通过举例事务A/B说明这四种事务隔离级别:
MySQL的默认隔离级别为可重复读,并且还解决了幻读问题;下面我们来讨论可重复读。
MVCC多版本并发控制
在InnoDB中给每行增加两个字段来实现MVCC,分别是创建的事务版本号和删除的版本号,每开启一个事务,事务的版本号就会递增。
快照读/当前读、一致性非锁定读/锁定读
在MySQL默认的可重复读中,普通的SELECT是一致性非锁定的快照读,读取的是事务创建时的快照;而UPDATE、DELETE、INSERT、SELECT ... LOCK IN SHARE MODE、SELECT ... FOR UPDATE是锁定的当前读。假设当前事务执行了锁定的当前读,那么其它事务将不能进行修改直到当前事务提交。
事务在提交之前会保留回滚记录,导致大量占用存储空间,并且还会占用锁资源,所以尽量避免使用长事务;如果无法避免,应保证逻辑日志空间足够用,并且支持动态日志空间增长。监控Innodb_trx表,发现长事务报警。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。