则使用MVCC实现可重复读。ANSI SQL标准定义了事务的隔离级别,但并没有从隔离程度进行定义。这些隔离级别分别解决脏读、不可重复读和幻读的问题。值得注意的是,除了MySQL默认采用RR隔离级别外,其他主要数据库系统如Oracle通常默认使用RC隔离级别,解决了脏读问题,但允许不可重复读和幻读。
mysql 事物隔离级别rr还是rc好
数据库事务的ACID特性包括原子性、一致性、隔离性和持久性。其中,隔离性分为四种:READ UNCOMMITTED允许读取未提交的数据,称为脏读;READ COMMITTED只能读取已经提交的数据,不允许脏读;REPEATABLE READ要求多次执行同一个查询结果不变,不允许不可重复读;SERIALIZABLE要求解决幻读、不可重复读和脏读。
脏读是指可以读取未提交的数据,RC隔离级别要求解决这个问题。不可重复读指的是同一个事务中多次执行同一个查询,读取到的数据发生了改变,这通常通过select for update或select in share mode来解决。可重复读则要求多次执行同一个查询结果不变,通常通过MVCC实现。幻读指的是同一个事务中多次执行同一个查询,读取到的数据行发生改变,包括行数减少或增加,这通常需要锁住满足条件的记录及所有这些记录之间的gap。
从实现角度看,不可重复读主要解决的是数据被修改的问题,而幻读则主要涉及数据的新增或删除。在RC隔离级别下,通过锁定满足条件的记录来避免被修改;在RR隔离级别下,则使用MVCC实现可重复读。
ANSI SQL标准定义了事务的隔离级别,但并没有从隔离程度进行定义。这些隔离级别分别解决脏读、不可重复读和幻读的问题。
值得注意的是,除了MySQL默认采用RR隔离级别外,其他主要数据库系统如Oracle通常默认使用RC隔离级别,解决了脏读问题,但允许不可重复读和幻读。2024-12-20