• 数据库的隔离级别


    事务并发运行的问题介绍
    ●对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:

      ➢脏读:对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段.之后,若T2回滚,T1读取的内容就是临时且无效的.

      ➢不可重复读:对于两个事务T1, T2, T1读取了一个字段,然后T2更新了该字段之后,T1再次读取同一个字段,值就不同了,

      ➢幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行.之后,如果T1再次读取同一个表,就会多出几行

    数据库事务的隔离性:数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题.
     
    ●一个事务与其他事务隔离的程度称为隔离级别,数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱.
      
    利用事务隔离级别解决上述三种问题

    ➢数据库提供的4种事务隔离级别:

      READ UNCOMMITTED(读未提交数据)       允许事务读取未被其他事物提交的变更脏读,不可重复读和幻读的问题都会出现

      READ COMMITED(读已提交数据)    只允许事务读取已经被其它事务提交的变更,可以避免脏读. 但不可重复读和幻读问题仍然可能出现

      REPEATABLE READ(可重复读)       确保事务可以多次从一个字段中读取相同的值.在这个事务持续期问,禁止其他事物对这个字段进行更新.可以避免脏读和不可重复读,但幻读的问题仍然存在.

      SERIALIZABLE(串 行化)           确保事务可以从一个表中读取相同的行在这个事务持续期间,禁止其他事务对该表执行插入,更新和删除操作.所有并发问题都可以避免,但性能十分低下.

    ➢Oracle支持的2种事务隔离级别: READ COMMITED,SERIALIZABLE。Oracle默认的事务隔离级别为:READ COMMITED

    ➢Mysql支持4种事务隔离级别.Mysql默认的事务隔离级别为: REPEATABLE READ

    一些相关的sql命令
    ➢查看隔离级别
    select @@tx_isolation;      # @@transaction_isolation 为在mysql 5.7的别名
    select @@transaction_isolation; # mysql 8.0的话,第一个被弃用了,需要用第二个

    ➢设置隔离级别

    set session transaction isolation level 隔离级别;  #设置当前的事务的隔离级别
    set global transaction isolation level 隔离级别;   #设置全局的事务的隔离级别
    #session和global  可以不写,默认为session
     
     
  • 相关阅读:
    高性能javascript 笔记 第一章 loading and executing (一)
    css 微信webui
    C语言之指针
    Java中的异常
    Java中的接口
    SQL Server中自连接和联合的用法
    SQL Server中多对多关系的实现
    SQL Server中用SQL命令建表和主外键约束
    SQL Server中的分页查询
    SQL Server中的内连接
  • 原文地址:https://www.cnblogs.com/winter-bamboo/p/10847197.html
Copyright © 2020-2023  润新知