快捷搜索: 王者荣耀 脱发

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

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)

锁的分类

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