zoukankan      html  css  js  c++  java
  • mysql事务的隔离级别

    mysql事务的隔离级别

    查看当前数据库的隔离级别:
    select @@tx_isolation;
    
    • 默认的隔离级别为:可重复度(REPEATABLE-READ)
    设置当前会话的隔离级别:
    set tx_isolation='<隔离级别>'
    

    读未提交----read-uncommitted

    当多个会话同时操作同一张表,其中某一个会话M尝试去读取表中的数据时,它会直接读取到其他会话开启事务后对表的内容造成修改后的但事务尚未提交的内容。当事务发生回滚,会话M再去查询,会出现与此之前不同的数据,造成脏读。

    • 会话A开启事务,往表中修改了数据,但事务还未结束。此时会话B想要查询这个表的数据,查到的内容是刚刚会话A修改后的内容。若会话A在会话B刚刚查询之后选择回滚了事务,会话B再去查询,会跟之前查询到的内容不一样。

    读已提交----read-committed

    跟上面的读未提交的相反,当前的会话只会读到其他会话结束后的表数据,无论其他会话在自己的事务中做了啥修改,只要为结束当前的会话,其他的会话都无法读取到会话未结束前的修改。

    可重复读----repeatable-read

    会话M开始事务去查询的同时,其他多个会话在对会话M查询的内容做修改,无论其他会话结束与否,会话M的事务只要没有结束,会话M去查询的内容始终与会话M开启事务时查询到的内容一致。当会话M的事务结束后,会话M再去查询,才能查询到其他会话做出修改后的内容。

    串行化----serializable

    多个会话之间存在串行关系,如果会话之间都只是查询的话,那么不会存在阻塞。当其中的某些会话需要对表的数据进行增改的时候,必须的等待其他操作该表的会话结束后才会执行增改操作。

    • 读未提交:会产生脏读
    • 读已提交:解决了脏读问题,当修改的事务结束后再去读时会跟之前读的数据不一致,造成不可重复读
    • 可重复读:解决了重复读的问题,只要当前的会话不结束,重复读的数据永远一致,但当前的会话结束后再去读,数据跟之前的还是不一致,造成幻读。
    • 串行化: 解决了幻读,但同时带来了数据库的阻塞,造成效率问题。
  • 相关阅读:
    Atitit RSA非对称加密原理与解决方案
    Atitit RSA非对称加密原理与解决方案
    atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc
    atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc
    Mac设置su root密码
    Window系统命令行调用控制面板程序
    Ubuntu 安装最新版nodejs
    python中time.strftime不支持中文,报错UnicodeEncodeError: 'locale' codec can't encode character 'u5e74' in position 2: encoding error
    字节跳动——IT技术工程师面试题
    HTTP状态码
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/11768685.html
Copyright © 2011-2022 走看看