@
目录
前言
请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、微信公众号:白码梦想家
提示:以下是本篇文章正文内容,下面案例可供参考
背景
Hello 朋友们,接下来为大家开启,面试题相关系列☞《对线面试官》
自信出击,让 offer 手到擒来!!!
基础
MySQL 默认的事务隔离级别是REPEATABLE READ(可重复读)。这一设置确保了在同一个事务中,多次读取同一数据时,读取的结果是一致的。即使在事务执行期间,其他事务对数据进行了修改(提交或未提交),也不会影响当前事务中已经读取过的数据。这种隔离级别为多个并发事务提供了较高的数据一致性和隔离性,但也可能导致较高的并发性能开销和锁竞争。
MySQL 提供了四个不同的事务隔离级别,它们分别是:
- READ UNCOMMITTED(读未提交) :在此级别下,事务可以读取到其他事务未提交的数据。这种
级别的隔离性最低,可能导致脏读问题,即读取到了其他事务未提交的数据,而这些数据可能会因为事务的回滚而变成无效的。 - READ COMMITTED(读已提交):事务只能读取到其他事务已经提交的数据。这个级别解决了脏读问题,但可能会导致不可重复读问题,即在一个事务内,多次读取同一数据时,由于其他事务的提交,读取结果可能不一致。
- REPEATABLE READ(可重复读) :这是 MySQL 的
默认隔离级别。在此级别下,事务在开始时会创建一个数据快照,之后的事务读取都会基于这个快照进行,保证了在同一个事务中多次读取同一数据时结果的一致性。然而,这个级别仍然可能面临幻读问题,即在一个事务内,多次执行同一查询时,结果集中可能新增了符合条件的数据。 - SERIALIZABLE(可串行化) :这是
最高的隔离级别。在此级别下,事务被严格地顺序执行,不允许并发执行。这种级别完全避免了脏读、不可重复读和幻读问题,但会极大地影响系统的并发性能。
需要注意的是,虽然 MySQL
的默认事务隔离级别是可重复读,但在实际应用中,根据具体的业务需求和性能要求,可以选择合适的事务隔离级别。如果需要更高的并发性能和较低的锁竞争,可以考虑降低事务隔离级别;而如果更注重数据的一致性和隔离性,可以选择更高的事务隔离级别。
此外,MySQL 提供了设置事务隔离级别的语句,可以在事务开始前或事务内部使用,例如:
sql
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
这条语句会将当前事务的隔离级别设置为读已提交。同样地,也可以将隔离级别设置为其他三个级别之一。
总结
我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!