mysql事务隔离级别

79 阅读2分钟

四种事务隔离级别

read uncommitted:读未提交,指一个事务可以读取到另一个事务未提交的变更。

read committed:读已提交,指一个事务提交后所作的变更可以被其他事务看到。

repeatable read:可重复读,指一个事务在执行的过程中看到的数据,一直跟这个事务启动时所看到的数据是一致的(mysql innodb引擎默认的隔离级别)。

serializable:多个事务在对同一数据进行读写操作时,如果发生读写冲突,后面的事务必须等前一个事务执行完了才能执行。

不同的隔离级别会产生的问题

脏读:一个事务读取到另一个事务未提交的数据。在read uncommitted隔离级别下会发生,因为事务未提交可能随时发生回滚,所以读取到的数据就是过期的数据。

不可重复读:事务前后两次读取的数据不一致。在read uncommitted和read committed隔离级别下会发生。以read committed为例,一个事务可以读取到其他事务已提交的数据,事务A先读取到一条数据,然后事务B修改了这条数据并提交事务,事务A又读取这条数据,这个时候事务A两次读取的数据就一致,就会产生不可重复读的现象。

幻读:在一个事务内多次查询符合某个查询条件的记录,如果出现前后两次查询到的记录数量不一致,就意味着发生了幻读。在read uncommitted、read committed和repeatable read下都会发生。

如果隔离级别为serializable,也就意味着多个事务只能同时读同一数据,但不能同时读写同一数据,所以也不会出现上面的问题。