面试中的数据库基本知识(锁的分类)

Myisam和Innodb的区别

1).MyISAM存储引擎的特点是:表级锁(不支持行级锁)、不支持事务和支持全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发、重负荷生产系统上,表锁结构的特性就显得力不从心;
2).InnoDB存储引擎的特点是:行级锁(也支持表级锁)、事务安全(ACID兼容)、支持外键、不支持FULLTEXT类型的索引(5.6.4以后版本开始支持FULLTEXT类型的索引)。InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎。InnoDB是为处理巨大量时拥有最大性能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。

  • 表级锁: 开销小,加锁快;不会出现死锁(因为MyISAM会一次性获得SQL所需的全部锁);锁定粒度大,发生锁冲突的概率最高,并发度最低。,MySQL的表级锁有两种模式: 表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。
  • 行级锁: 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。行级锁有共享锁(S)和排他锁(X)

Myisam与Innodb区别总结

锁的分类

  • 按锁的粒度分:表级锁,行级锁,页级锁
  • 按锁级别划分:共享锁,排他锁(读锁、写锁)
    共享锁(S锁):
    用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。
    事务对数据A加上共享锁后,其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据
    排他锁(X锁):
    用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。
  • 按加锁方式划分:自动锁,显式锁
  • 按操作划分:DML锁,DDL锁
    DML锁用于确保一次只有一个人能修改一行,而且这时别人不能删除这个表
    DDL操作中会自动为对象加DDL锁(DDL Lock),从而保护这些对象不会被其他会话所修改
  • 按使用方式划分:乐观锁,悲观锁
    乐观锁
    每次去拿数据的时候都认为别人不会修改,故不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据
    示例:版本号或时间戳控制
    适用范围:适用于多读少写的场景
    悲观锁
    每次去拿数据的时候都认为别人会修改,故每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁
    实例:DB的行锁、表锁等
    适用范围:适用于数据一致性比较高的场景
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值