前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库锁机制

数据库锁机制

作者头像
吉林乌拉
发布2019-09-12 12:52:22
5960
发布2019-09-12 12:52:22
举报
文章被收录于专栏:吉林乌拉吉林乌拉

数据库在并发时会出现很多问题,但有些时候会提高程序的运行效率,而有些时候则会产生非常严重的BUG。数据库为了解决因并发而产生的问题,于是底层采用数据库锁的的机制来解决并发问题,也就是类似Java中的同步锁。虽然不同数据库的锁机制在底层可能是不同的,但是它们的实现原理都是一样的。下面我们看一下数据库锁机制的底层实现原理。

锁的分类

按照锁定的对象不同可以分为表锁定和行锁定。它们的区别是前者是对整个表锁定,而后者是对表中的特定行进行锁定。从并发事物锁定的关系上来分,可以分为共享锁定和独占锁定。它们的区别是共享锁定会防止独占锁定,但允许其它的共享锁定。而独占锁定既防止其它的独占锁定又防止其它的共享锁定。

应用场景

按照上面介绍的锁的分类如果我们要对数据库进行数据更改时也就是UPDATE,那么数据库必须在进行更改的行上添加独占锁定,只有这样才能保证数据库的数据安全。除此之外还有INSERT、DELETE等操作都会隐式的添加行锁定。下面我们已Oracle数据库为例子,来重点介绍一下数据库的锁定。

Oracle锁

  • 行共享锁:可以通过SELECT FOR UPDATE语句隐式的获得行共享锁。在Oracle中也可以通过LOCK TABLE IN ROW SHARE MQDE 语句显式的获得行共享锁。行共享锁的特性是:它并不防止对数据行进行更改操作,但是它可以防止其它操作获取独占锁。行共享锁还允许进行多个并发的行共享和行独占性锁,并允许进行数据表的共享或采用共享行独占锁定。
  • 行独占锁:可以通过INSERT、UPDATE和DELETE语句隐式的获取行独占锁,当然也可以直接通过LOCK TABLE IN ROW EXCLUSIVE MODE语句显式的获取行独占锁。行独占锁的特性是:它可以防止其它操作获取一个共享锁、共享独占锁或独占锁。
  • 表共享锁:可以通过LOCK TABLE IN SHARE MODE显示获得。表共享锁的个特性是:它可以防止其它操作获取行独占锁或者防止其它表共享行独占锁或表独占锁,它允许在表中拥有多个行共享和表共享锁。该锁可以让会话具有对表事务级一致性访问,因为其它会话在用户提交或者回滚该事务并释放该表的锁之前不能更改这个被锁定的表。
  • 表共享行独占:可以通过LOCK TABLE IN SHARE ROW EXCLUSIVE MODE语句获得。表共享行独占的特性是:它可以防止其它会话获取一个表共享、行独占或者表独占锁,它允许其它行共享锁。这种锁类似表共享锁,只是它一次只能对一个表放置一个表共享行独占锁定。例如:如果A会话拥有该锁,则B会话可以执行SELECT FOR UPDATE 操作,但如果B会话试图更新选择的行时,则需要等待。
  • 表独占:可以通过LOCK TABLE IN EXCLUSIVE MODE 显示获得。表独占的特性是:它可以防止其它会话对该表的任何其它锁定。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吉林乌拉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档