首页 > 数据库 > 数据库开发技术 > 怎么理解SQL的四个事务隔离级别?
1、脏读
出现原因:一个事务读取到了缓存中另一个事务未提交的脏数据。
说明:当事务B对data进行了修改但是未提交事务,此时事务A对data进行读取,并使用事务B修改的数据做业务处理。
2、幻读( 虚读 )
出现原因:一个事务在读取数据时,另一个事务插入了数据,导致上个事务第二次读取数据时,数据不一致。
说明:data 表有一条数据,事务A对data进行读取, 事务B对data进行数据新增 ,此时事务A读取只有一条数据,而最后实际data是有两条数据,就好象发生了幻觉一样情况成为幻读。
3、不可重复读
出现原因:读取数据的同时可以进行修改;
说明:事务A、事务B同时对data进行访问,事务A对data进行读取,事务B对data进行修改,当事务A第一次对data进行读取完后事务B提交,此时当事务A第二次读取该数据时的数据就与第一次读取的数据不同,这种情况称为不可重复读。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
1)Read Uncommitted(读未提交)
一个事务在执行过程中,既可以访问其他事务未提交的新插入的数据,又可以访问未提交的修改数据。如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据。此隔离级别可防止丢失更新。
2)Read Committed(读已提交)
一个事务在执行过程中,既可以访问其他事务成功提交的新插入的数据,又可以访问成功修改的数据。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。 也就是说,在事务处理期间,如果其他事务修改了相应的表,那么同一事务的多个SELECT语句可能返回不同的结果。 此隔离级别可有效防止脏读。但会出现不可重复读。
3)Repeatable Read(可重复读取)
一个事务在执行过程中,可以访问其他事务成功提交的新插入的数据,但不可以访问成功修改的数据。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。也就是说,如果用户在另外一个事务中执行同条SELECT语句数次,结果总是相同的。(因为正在执行的事务所产生的数据变化不能被外部看到)此隔离级别可有效防止不可重复读和脏读。
4)Serializable(可串行化)
提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。此隔离级别可有效防止脏读、不可重复读和幻读。但这个级别可能导致大量的超时现象和锁竞争,在实际应用中很少使用。

总结:
想要了解更多数据库相关知识,欢迎关注个人微信公众号“SQL数据库运维”,不定时更新你可能需要的文章!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70015404/viewspace-2883773/ ,如需转载,请注明出处,否则将追究法律责任。