事务的隔离级别有哪些?
对于事务主要体现在Mysql的原子性,原子性对于数据库而言是十分重要的,而事务本身又分为不同的级别,针对不同的业务逻辑可以选择不同的事务能够最大化的提升效率。
第一级 READ-UNCOMMITTED(读取未提交)
这个事务隔离级别是最低的隔离级别,同时也可以说是安全性最低的级别,顾名思义,可以读取未提交的数据,那么我们读取的数据很可能是脏数据,那么可能会造成脏读、幻读、以及不可重复读
第二级READ-COMMITTED(读取已提交)
对于第二级别而言的事务隔离级别,这个事务的定义就是,如果你想要读取的数据正在被其他线程进行修改的话,那么你当前的读取的线程需要被修改的线程提交事务之后才能读取这个数据,使用这个事务隔离级别,可以防止脏读,但是会产生幻读、不可重复读
第三级REPEATABLE-READ(可重复读)
如果你了解不可重复读的话,那么使用这个事务隔离级别的话,那么该事务隔离级别可以很好的防止脏读以及不可重复读,顾名思义,可重复读就是在短时间内对同一字段的读取结果都是相同的。除非在自己的这个线程中本身自己修改了这个字段的值。所以这个可以防止脏读以及不可重复度。但是仍然可能产生幻读。
第四级SERIALIZABLE(可串⾏化):
最高级别的事务隔离级别,完全服从数据库的ACID原则,我个人将其称为四字真言。所有的事务之间依次执行、这样的话,那么事务之间就完全不可能产生干扰。也就是说该隔离级别可以很好的防止脏读、不可重复读、以及脏读。
总结就下面如图:
Mysql的默认事务隔离级别
需要注意的是,对于mysq5.5之后使用的引擎默认都是InnodB,而InnodB使用的默认事务隔离级别都是REPEATABLE-READ(可重复读),但是在这个基础上增加了Next-Key Lock 锁算法,所以只需要使用该事务隔离级别就可以达到ACID的隔离级别,也就是和可串行化一样。同等条件下,事务隔离级别越低的话,那么该数据库的性能更好,原因就是因为事务隔离级别越高,那么表以及对应的字段之间的锁更多。也就是会在锁上门浪费跟多的资源。
最后需要注意的是在分布式环境下,mysql使用的事务隔离级别都是SERIALIZABLE(可串⾏化)。救我跟人而言的话,因为分布式环境下,内存已经不重要的,索性就使用最高级别的事务隔离级别,以求达到ACID原则。
创作不易,点赞收藏加关注。谢谢!!如有错误请指出。谢谢!!