程序员的公众号:源1024,获取更多资料,无加密无套路!
最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等
获取方式: 关注公众号并回复 666 领取,更多内容持续奉上
事务是对数据库的一系列操作,是保证数据库正确性的基本逻辑单元。
事务四个特性ACID:原子性、一致性、隔离性与持久性
-
原子性
事务中包含的所有操作要么全部成功,要么全部失败。
-
一致性
指事务的执行结果必须使数据库从一种一致性状态变化到另一种一致性状态。无论事务执行前还是执行后,数据库状态均为一致性状态,处于这种状态的数据库才被认为是正确的
-
隔离性
一个事务的执行既不能被其他事务所干扰,也不能干扰其他事,保证事务之间的隔离。
-
持久性
一个事务提交后,保证该事务的结果不会异常丢失,事务一旦提交,它对数据库的更改应该是永久性的。
为了达到事务的四大特性,数据库定义了4种不同的事务隔离级别:
-
READ-UNCOMMITTED(读取未提交):最低的隔离级别,允许脏读,也就是可能读取到其他会话中未提交事务修改的数据,可能会导致脏读、幻读或不可重复读。
-
READ-COMMITTED(读取已提交):只能读取到已经提交的数据。是Oracle数据库的默认隔离级别 ,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
-
REPEATABLE-READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据是被本身事务所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。是MySQL 的默认隔离级别
-
SERIALIZABLE(可串行化):最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。
系列文章索引
MyBatis的插件能在哪些地方进行拦截?
了解MyBatis的缓存机制吗
面试官:谈谈对volatile的理解
Spring中用到了哪些设计模式
面试官:说一下SQL的执行过程
线程池的工作原理