zoukankan      html  css  js  c++  java
  • Mysql 锁

    锁分类

    • 行锁
    • 间隙锁
    • 表锁

    行锁(锁原理是基于索引的,如果不命中索引就会升级为表锁,注意Innodb存储引擎)

    1、查自动提交是否关闭

    命令行打开两个窗口,窗口1关闭自动提交
    show variables like 'autocommit';
    --关闭自动提交
    set autocommit=0;
    select * from user;
    +----+--------+--------+
    | id | xuehao | name   |
    +----+--------+--------+
    |  1 | 110    | stu1    |
    |  2 | 111    | stu10 |
    | 12 | 112    | stu20    |
    +----+--------+--------+
    在窗口1中更新一行数据,执行如下语句:
    start transaction;
    begin;
    update user set name='stu2' where id=1;
    执行完,打开窗口2,也来更新该记录,发现SQL不能执行
    update user set name='stu3' where id=1;
    这是时在窗口1手动提交事务,执行commit,在切换回窗口2发现SQL被执行。
    

    2、表锁

    思路:xuehao列没有索引,根据学号列更新,测试升级为表锁。
    窗口1中,
    set autocommit=0;
    start transaction;
    begin;
    update user set name='stu2' where xuehao='110';
    窗口2,执行SQL会被卡主
    update user set name='stu2' where xuehao='112';
    最后,切到窗口1,提交事务commit;窗口2的SQL才会执行。
    

    3、间隙锁
    事务隔离级别:可重复读,当保证范围查询,事务内不可变,需要间隙锁。
    间隙锁,查询对应的条件列上没有索引或者非唯一索引,间隙锁是左开右闭的。

    总结:
    注意行锁,在innodb引擎下,命中索引才会有;
    生产注意不要行锁变表锁,并发性查;
    间隙锁,会产生死锁。

  • 相关阅读:
    Sublime Text 3——插件配置篇
    Sublime Text 3——基本介绍篇
    线性同余方程
    费马小定理
    一点心事
    寒诗
    e网通学习笔记
    std::cout<<"Goodbye 2019"<<" "<<"Hello 2020"<<' ';
    新砍
    NOIP2019游记
  • 原文地址:https://www.cnblogs.com/xingrui/p/13499667.html
Copyright © 2011-2022 走看看