MySql数据库锁---共享锁与排它锁

MySql锁概述

        数据库中锁设计出来的初衷是处理并发问题,保证数据的安全

MySQL 数据库锁可以从下面 3 个维度进行划分:

  1. 按照锁的使用方式,MySQL 锁可以分成共享锁、排他锁两种;
  2. 根据加锁的范围,MySQL 锁大致可以分成全局锁、表级锁和行锁三类;
  3. 从思想层面上看,MySQL 锁可以分为悲观锁、乐观锁两种;

共享锁与排它锁

        共享锁:

                如何使用(语法介绍)

        共享锁,Share lock,也叫读锁。它是指当对象(数据库表资源-可以是整张表,也可以是表中若干行)被锁定时,允许其它事务读取该对象,也允许其它事务从该对象上再次获取共享锁,但不能对该对象进行写入。

                加锁方式有如下两种方式:

-- 方式1 mysql5 语法
select ... from 表名 lock in share mode;
-- 方式2 mysql8 以后语法
select ... from 表名 for share;
                给 user 表加共享锁(表级共享锁)

                给 user 表 id=3 的行加共享锁(行级共享锁)
                共享锁小结

通过上述两个实例可以看出:

  • 当共享锁加在 user 表上,则其它事务可以再次获取 user 表的共享锁、可以进行读操作,但是无法获取user表的排他锁失败、写操作会被堵塞;

  • 当共享锁加在 user 表 id=3 的行上,则其它事务可以再次获取 user 表 id=3 行上的共享锁、可以进行读操作,其它事务再次获取 user 表 id=3 行上的排他锁失败,写操作被堵塞,但是事务可以再次获取 user 表 id=3 以外行上的排他锁;

总之:

  • 无论共享表锁还是共享的行锁,其它会话或者事务都可以进行读操作,但是会阻塞写操作,对于共享行锁来说,只阻塞当前共享行锁锁定的行;

  • 对于当前获取共享锁的事务,内部可发生写操作(共享锁不对自身限制);

        排它锁:

                如何使用(语法介绍)

        排它锁,Exclusive Lock,也叫写锁或者独占锁,主要是防止其它事务和当前加锁事务锁定同一对象。同一对象主要有两层含义:

  1. 当排他锁加在表上,则其它事务无法对该表进行 insert,update,delete,alter,drop 等更新操作;

  2. 当排他锁加在表的行上,则其它事务无法对该行进行 insert,update,delete,alter,drop 等更新操作;

                排它锁加锁方式为:

-- 排它锁加锁方式
select ... from 表名 for update;
                给 user 表对象加排他锁

                给 user 表 id=3 的行对象加排他锁

 

                排它锁小结
  • 排它锁对读操作不阻塞,但是对其它读操作过程中需要获取排它锁的请求会阻塞
  • 排它锁会阻塞其它事务对排它锁锁定资源的写操作;
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值