首页 > 编程知识 正文

mysqlmyisam和innodb,springcloud五大组件面试题

时间:2023-05-03 23:36:51 阅读:30348 作者:1314

mysql都可以分成那些锁吗? 1 .按片粒度由大到小分类。 表锁、页岩锁和行锁; 特殊场景中使用的全局锁定

2 .按锁定级别分类:共享(读取)锁定、排他(写入)、共享(读取)、排他(写入) );

3 .以及Innodb引擎为解决幻读等同时情况下事务中存在的数据问题而引入的行记锁、间隙锁、下一密钥锁等

4 .然后是面向我们编程的两种锁定思想。 悲观锁定,乐观锁定。

你对表钥匙、行钥匙怎么理解? 表锁定:表级锁定是MySQL中每个存储引擎的最大粒度锁定机制。 该锁定机制的最大特点是实现逻辑非常简单,对系统的负面影响最小。 所以获取和解除锁定的速度很快。 表级锁定一次锁定整个表,因此可以很好地避免死锁问题。 当然,锁定粒度大带来的最大负面影响是,发生锁定资源冲突的概率也最高,并发性大幅降低。

使用表级锁定的主要是MyISAM等一些非事务性存储引擎。

行锁:与表锁相反,行锁的最大特点是锁对象的颗粒度小,而当前各大数据库管理软件实现的锁颗粒度最小。 由于锁定粒度小,因此发生锁定资源冲突的概率也最低,可以为APP应用程序提供尽可能大的并发处理能力,从而提高系统的整体性能。 在并发处理能力方面有很大的优势,但行级锁定会带来很多弊端。 由于锁定资源的粒度很小,因此每次获取锁定或解除锁定时都需要很多,消耗也很大。 另外,低电平的锁定也容易发生死锁。

使用行级锁定的主要是InnoDB存储引擎。

应用方案:从锁定的角度看,表级锁定适合于以查询为中心并在索引条件(如web APP应用程序)下更新数据的APP应用程序。行级锁定可以是基于索引条件同时更新数据的情况

mysql是否基于锁定级别? MySQL根据锁定级别分为共享(读)锁定和独占(独占)写入锁定

共享锁又称读锁定,是在读操作(SELECT )时创建的锁定。 其他用户可以同时读取数据,但在所有读锁定解除之前(即查询事务结束之前),任何事务都不能修改数据(获取数据的写锁定)。 事务a对数据b进行读锁定后,其他事务只能对数据b进行读锁定,而不能对其进行写锁定。 获取读锁定的事务只能读取数据,不能修改数据。

SQL显示锁的写法:

选择…lock in share mode; 在查询语句后添加LOCK IN SHARE MODE时,MySQL会对查询结果中的每一行施加读锁定。 如果查询结果集中没有其他线程对任何行使用写锁定,则可以成功申请读锁定。 否则,就会被屏蔽。 其他线程也可以使用读锁定读取表。 此外,这些线程读取相同版本的数据。

排他锁也称为写锁定、排他锁定。一旦事务a对数据b施加了写锁定,其他事务就不能对数据b施加任何类型的锁定。 获得写锁定的事务既可以读取数据,也可以修改数据。

SQL显示锁的写法:

选择…for update; 在查询语句后添加FOR UPDATE时,MySQL会对查询结果中的每一行施加写锁定。 如果查询结果集中没有其他线程对任何行使用写锁定,则可以成功申请写锁定。 否则,就会被屏蔽。 此外,即使写锁定申请成功后,也请等待事务前读锁定的释放后再进行操作。

悲观锁定和乐观锁定的看法? 由于“悲观锁定”是悲观的,因此处理数据时总是考虑修改其他事务正在处理的数据。 因此,在处理自己之前,锁定不允许其他事务修改自己处理的数据。

“乐观锁定”相对乐观,可以控制是否使用版本号进行了修改,而不必担心其他事务正在修改自己处理的数据。

因此,悲观的锁定会适应许多写入和较少读取的场景,而乐观的锁定会适应较少写入和较多读取的场景。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。