|NO.Z.00037|——————————|BigDataEnd|——|Java&MySQL单表/约束/事务.V15|——|MySQL.v15|脏读事务隔离级别|隔离界别相关命令|

一、mysql事务隔离级别
### --- 数据并发访问

——>        一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库.
——>        数据库的相同数据可能被多个事务同时访问,如果不采取隔离措施,
——>        就会导致各种问题, 破坏数据的完整性
### --- 并发访问会产生的问题

——>        事务在操作时的理想状态: 所有的事务之间保持隔离,互不影响。
——>        因为并发操作,多个用户同时访问同一个 数据。可能引发并发访问的问题
并发访问的问题 说明
脏读 一个事务读取到了另一个事务中尚未提交的数据
不可重复读 一个事务中两次读取的数据内容不一致, 要求的是在一个事务中多次读取时数据是一致的. 这是进行 update 操作时引发的问题
幻读 一个事务中,某一次的 select 操作得到的结果所表征的数据状态, 无法支撑后续的业务操作. 查询得到的数据状态不准确,导致幻读.
### --- 四种隔离级别

——>        通过设置隔离级别,可以防止上面的三种并发问题.
——>        MySQL数据库有四种隔离级别 上面的级别最低,下面的级别最高。
——>        ✔ 会出现问题
——>        ✘ 不会出现问题
级别 名字 隔离级别 脏读 不可重复 读幻
数据库的默认隔离级别
1 读未提交 read uncommitted  
2 读已提交 read committed Oracle和SQLServer
3 可重复读 repeatable read MySql
4 串行化 serializable  
二、隔离界别的相关命令
### --- 查看隔离级别
~~~     mysql的默认隔离级别,可重复读repeatable read 可以防止 脏读与不可重复读,不能防止幻读

select @@tx_isolation;
### --- 设置事务隔离级别,需要退出 MySQL 再重新登录才能看到隔离级别的变化

set global transaction isolation level 级别名称;
read uncommitted 读未提交
read committed 读已提交
repeatable read 可重复读
serializable 串行化
### --- 例如: 修改隔离级别为 读未提交

set global transaction isolation level read uncommitted;
三、sql语句
### --- sql语句

/*
    MySql的隔离级别
            各个事务之间是隔离,相互独立.但是如果多个事务对数据库中的同一批数据
        进行并发访问的时候,就会引发一些问题,可以通过设置不同的隔离级别来解决
        对应的问题
    
    并发访问的问题
        脏读: 一个事务读取到了另一个事务没有提交的数据.
        不可重复读:  一个事务中 两次读取的数据不一致.
        幻读: 一个事务中,一次查询的结果,无法支撑后续的业务操作.
    
    设置隔离级别
        read uncommitted: 读未提交
            可以防止哪些问题: 无
            
        read committed: 读已提交 (Oracle默认 隔离级别)
            可以防止: 脏读
        
        repeatable read : 可重复读  (MySql默认的隔离级别)
            可以防止: 脏读 ,不可重复读
            
        serializable : 串行化
            可以防止: 脏读 ,不可重复读 ,幻读
            
    注意: 隔离级别 从小到大 安全性是越来越高的,但是效率是越来越低的,
    根据不同的情况选择对应的隔离级别
    
*/
/*
    查看隔离级别
    select @@tx_isolation;
    
    设置隔离级别
    set global transaction isolation level 级别名称;
    read uncommitted 读未提交
    read committed   读已提交
    repeatable read  可重复读
    serializable     串行化

*/
-- 查看隔离级别   MySql默认隔离级别  repeatable read
SELECT @@tx_isolation;

-- 设置隔离级别为 读已提交
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED ;

 
 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on 2022-04-05 13:34  yanqi_vip  阅读(23)  评论(0)    收藏  举报

导航