zoukankan      html  css  js  c++  java
  • MySQL死锁1

    MySQL行级排他锁的使用及死锁解除技巧

    这篇笔记存粹是做学习记录之用,方便将来查阅,老鸟请跳过。关于MySQL排他锁的具体使用。

    使用排他锁

    假设有一张user表如下:

    idnameage
    1 张成瑶 27
    2 钟其林 24

    打开navicat for mysql软件,先使用以下SQL,获取排他锁:

    1
    2
    3
    begin; #开启事务
    select * from user where id = 1 for update; #获取排他锁
    #commit; #这里注释掉,是为了模拟该事务正在执行没有提交事务

    运行这条语句,会发现正常执行。此时,新开一个查询窗口,再使用以下SQL再尝试获取排他锁:

    1
    select * from user where id = 1 for update;

    运行这条语句,会发现语句阻塞,一直处于查询状态。如果将之前那个查询窗口关闭,会发现这条SQL立即执行成功,因为关闭了窗口(没有提交的事务也随之关闭)。

    解除死锁

    万一并发环境下,由于事务出错没有提交成功,有可能造成死锁。此时,解除死锁的方法有一种是:将获取排他锁的SQL再运行一次,并确保同时执行了commit,只要执行成功,即可解除死锁。

  • 相关阅读:
    SpringMVC-初学习
    Mybatis-随笔
    Mybatis-逆向工程generator
    Mybatis-动态sql和模糊查询
    Mybatis-resultMap的一些用法(映射,关联查询)
    Mybatis基本的CRUD
    Spring框架(一)
    restful风格以及异常处理。
    SpringMVC后台校验
    Spring添加文件
  • 原文地址:https://www.cnblogs.com/longxok/p/10939852.html
Copyright © 2011-2022 走看看