• 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 事务不可重复读。

  • 相关阅读:
    Oracle SQL Developer 设置自动提示(完成设置)
    访问控制修饰符
    BigDecimal.valueOf
    Use try-with-resources
    python学习之字符编码
    python语法:
    python学习之环境搭建 输入输出
    C51存储的优化
    c51中的bit,SBIT
    关于IO模拟时序(SPI)的注意事项
  • 原文地址:https://www.cnblogs.com/lufei33180/p/14267607.html
Copyright © 2020-2023  润新知