mysql面试之行级锁与页级锁与表级锁解析?

什么是行级锁、页级锁、表级锁?

(1)行级锁:引擎innoDB,对一行记录进行加锁。
(2)表级锁:引擎 MyISAM,对整个表进行加锁。
(3)页级锁:引擎 BDB,对查询出来的一页数据进行加锁。

innoDB支持行级锁和表级锁

行级锁原理以及使用?

行级锁之后有索引的列生效
数据加上共享锁之后只能读取数据不能修改修改
数据加上排他锁之后只有已访问到排他锁的事务可以访问和修改数据
排他锁和行级锁两者互斥
行级锁又分为共享锁和排它锁。
(1)共享锁:

(1):共享锁顾名思义就是多个事务对于数据可以共享同一把锁,都可以访问到时数据,但是只能访问不能修改数据。
(2):使用方式
	select ... lock in share mode;只适用于查询。

(2):排它锁

(1):排它锁又称为写锁,顾名思义,排他锁不能和其他锁进行共存,如果一个事务获取一行数据的排他锁,那么其他事务就不能再次来获取该行数据的其他锁了,包括共享锁和排他锁。但是已获取该行数据排它锁的事务可以对该行数据进行读取和修改。
(2):使用方法:在SQL语句结尾加上for update。另外在innoDB引擎中,update和delete语句会默认加上排它锁。

(3):查询导致死锁SQL的方式
查询innoDB状态:show ENGINE innodb status;

表级锁原理以及使用?

(1):表级锁是mysql各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次性会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。当然锁定资源大的话就用导致资源的争用概率非常高。使用表级锁定的主要是MyISAM,MEMORY,CSV等一些非事务性存储引擎。
(2):模式?
MyISAM表的读操作与写操作之间,以及写操作之间是串行的。当一个线程获得对一个表的写锁后,只有持有锁的线程可以对表进行更新操作。其他线程的读、写操作都会等待,直到锁被释放为止。

	(1):表共享读锁。不会阻塞其他用户对于用一个表的读操作,但会阻塞写操作。
	(2):表独占写锁。会阻塞其他用户对于同一张表的读写操作。

(3):加锁方式:

MyISAM在执行select之前,会自动对操作的表进行表级锁操作。在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此,用户一般不需要直接用LOCK TABLE命令给MyISAM表显式加锁。

页级锁的原理?

(1):页级锁定是MySQL中比较独特的一种锁定级别,在其他数据库管理软件中也并不是太常见。页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者之间。另外,页级锁定和行级锁定一样,会发生死锁

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值