十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
数据库锁机制是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
米东网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。创新互联2013年至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
数据库在并发时会出现很多问题,但有些时候会提高程序的运行效率,而有些时候则会产生非常严重的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 显示获得。表独占的特性是:它可以防止其它会话对该表的任何其它锁定。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。