美文网首页
MySQL数据库事务隔离级别

MySQL数据库事务隔离级别

作者: a乐乐_1234 | 来源:发表于2018-05-09 11:29 被阅读0次

四种隔离级别

  1. READ UNCOMMITTED(读取未提交的数据)
       这个事务隔离级别中所有事务都可以看到未提交的执行结果。这可能会产生很多问题,因为事务未提交表明结果是不确定的,万一回滚了,读取的结果就是错误的,一般都不会使用这个隔离级别,也称为“脏读”。
  2. READ COMMITTED(读取提交数据)
       大多数数据库默认的隔离级别(但不是MySQL默认的隔离级别),事务间是不可见的,一个事务只能读取到已提交事务的执行结果,也称为“不可重复读”,即同一个事务内执行相同的读语句,读取的结果可能不一致(会读取到其他事务提交的更新后的结果)。
  3. REPEATABLE READ(可重读)
       MySQL默认的隔离级别,同一个事务中执行相同的读语句,结果都是一致的,InnoDB默认级别。这也会有个问题,如果在这个事务中,其他事务修改了结果,可能发生“幻读”。InnoDB通过多版本并发控制机制解决了幻读问题
  4. SERIALIZABLE(串行化)
      最高的隔离级别,它强制事务排序,并行处理,解决了幻读问题,也就是在每个读数据行上加锁,这不仅会使性能大打折扣(只能读,写要等待),还会出现连锁反应(一个事务超时,后面的事务可能都会超时)

修改事务隔离等级

  1. 全局修改,修改mysql.ini配置文件,在最后加上
#可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
transaction-isolation = REPEATABLE-READ
  1. 当前session修改,在登录mysql客户端后,执行命令
-- 设置隔离级别READ UNCOMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- 查询隔离级别
SELECT @@TX_ISOLATION;

mysql有一个autocommit参数,默认是on,它的作用是每一条查询都是一个事务,并且自动开始,自动提交(执行完就自动结束),通常我们通过Spring进行事务管理,Spring可以将一个方法内所有语句作为一个事务,代码层面还会引出事务传播的问题。

相关文章

网友评论

      本文标题:MySQL数据库事务隔离级别

      本文链接:https://www.haomeiwen.com/subject/kzagrftx.html