zoukankan      html  css  js  c++  java
  • mysql 锁知识

    一、加锁常用命令

    1.修改隔离级别
    set session transaction isolation level read uncommitted; 修改全局隔离级别为 读未提交
    set global transaction isolation level read uncommitted; 修改当前事务隔离级别为读未提交
    
    –1:Read Uncommitted
    
    –2:Read Committed
    
    –4:Repeatable Read
    
    –8:Serializable 
    
    2.查询数据库隔级别
    select @@global.tx_isolation;

    一、加锁测试

    1.开启一个事务,让等待10s 后提交释放锁
    START TRANSACTION;  
    
    SELECT idd from iodn_area where idd>7 FOR UPDATE;  
    
    select SLEEP(10); 
    
    COMMIT; 
    2.在另一个事务中更新某一行记录
    update iodn_area set area_name ='wuqu' where idd=119;

    3.总结:当第一个事务加锁命中索引后,锁定的是一行记录,当在第二个事务中更新同一行记录是要等待第一个事务执行完毕,如果没有命中索引,则锁定整个表,无论第二个事务更新哪行记录都是不行的。

     二、不可重复读测试

    A 事务
    START TRANSACTION;  
    
    SELECT city_id from iodn_area where idd=107 ; 
    
    查询后使用B 事务更新city_id
    
    SELECT city_id from iodn_area where idd=107 ; 
    COMMIT; 
    
    总结:首先不可重复读是在一个事务内而定义的,在A事务内的两次查询结果不一样,而本次测试结果是两次查询结果一样,原因是mysql 默认的隔离级别是repeatable-read ,通过mvcc多版本控制已经解决了不可重复读的问题

     三、读未提交 测试

    读未提交比较简单,主要是A 事务在事务内 读到了 B 事务未提交的数据,当B 事务故障后发生故障导致回滚,那么A 事务就读到了脏数据

    四、读已经提交测试

    读已经提交和未提交差不多,只不过A事务读取到了B事务已经提交的数据,导致A 事务不可重复读。

  • 相关阅读:
    这些简单优化能让你的Win10流畅很多
    win7系统登录界面背景怎么修改?
    如何在win7下通过easyBCD引导安装Ubuntu14.04
    为什么我的电脑打不开便签?
    打开Word为什么会出现感叹号呢???
    图像变换原理
    运行
    php、前端开发(网站建设)环境搭建
    zend studio面板功能
    zend studio汉化
  • 原文地址:https://www.cnblogs.com/lufei33180/p/14267607.html
Copyright © 2011-2022 走看看