博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试中的数据库基本知识(锁的分类)
阅读量:3909 次
发布时间:2019-05-23

本文共 1017 字,大约阅读时间需要 3 分钟。

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的行锁、表锁等
    适用范围:适用于数据一致性比较高的场景

转载地址:http://eeqen.baihongyu.com/

你可能感兴趣的文章
编译器配置(1)——ARMv7,ARMv8(AArch64) 浮点配置等相关知识
查看>>
Android 编译(2)——jack-server相关问题
查看>>
网络服务(2)——以太网配置IPV4和IPV6
查看>>
网络服务(3)——以太网phy的识别加载(RK3399)
查看>>
网络服务(5)——usb网卡名称修改(RK3399 Ubuntu)
查看>>
行业观察与理解-互联网巨幕下各行业的现状和发展
查看>>
数据结构与算法大全
查看>>
稳定排序和不稳定排序
查看>>
句柄泄露与CloseHandle()
查看>>
一些笔记
查看>>
SVN的安装和使用
查看>>
APP测试点分析
查看>>
JDK安装过程中出现“javac不是内部或外部命令”问题的解决
查看>>
Git使用教程
查看>>
APT使用指南
查看>>
adb介绍
查看>>
Android lint相关
查看>>
WebDriver介绍
查看>>
testNG介绍
查看>>
Python integer ranges
查看>>