数据库(五)

数据库锁的分类

  1. 按锁的颗粒度分,可分为表级锁,行级锁,页级锁(颗粒由小到大)
  2. 按锁级别划分,可分为共享锁、排他锁
  3. 按加锁方式分,可分为自动锁、显示锁(for update 操作等)
  4. 按操作划分、可分为DML锁(CRUD操作的),DDL锁(表结构变更的)
  5. 按使用方式划分、可分为乐观锁,悲观锁
共享锁排他锁
共享锁兼容冲突
排他锁冲突冲突

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

MyISAM与InnoDB关于锁方面的区别

  1. MyISAM默认用的是表级锁,不支持行级锁
  2. InnoDB默认使用的行级锁,也支持表级锁

表级锁会将整表锁住,不需要具体到某一行因此开销小
行级锁会锁住某一行数据,会造成死锁

锁的出现是多个事务同时操作同一张表,或者同一行数据。

MyISAM引擎进行select查询的时候会对表加上读锁(共享锁不影响其他事务上读锁),其他事务进行update操作为表加上写锁(排他锁,上了锁之后其他锁无法加上),需要等待读锁致性完成。

InnoDB在默认执行select操作的时候不会上共享锁。InnoDB在查询的时候如果是走索引是走的行级锁,如果是不走索引走的是表级锁。

MyISAM适合的场景

  1. 频繁执行全表count语句
  2. 对数据进行增删改的频率不高,查询频繁
  3. 没有事务

InnoDB适合的场景

  1. CRUD频繁
  2. 可靠性要求高,需要支持事务

数据库的四大特性

  1. 原子性
  2. 一致性
  3. 隔离性
  4. 持久性

事务隔离机制

事务隔离级别从小到大

事务隔离级别更新丢失脏读不可重复读幻读
未提交读(read-uncommited)避免发生发生发生
已提交读(read-commited)避免避免发生发生
可重复读(repeatable-read)避免避免避免发生
串行(serializable)避免避免避免避免
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值