数据库的锁机制

Posted wlwl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库的锁机制相关的知识,希望对你有一定的参考价值。

读锁:LOCK in SHARE MODE    写锁:for UPDATE

技术分享图片

行锁 (锁住某行数据)

SELECT name FROM t_goods_info where code = ‘huawei‘ for UPDATE;

页锁 (锁住某些数据)

SELECT NAME FROM t_goods_info where code in (‘huawei‘,‘xiaomi‘) for UPDATE;

表锁 (锁住整张表)

select name from t_goods_info for update

----------------------------------------------------------------

读锁能够对读请求共享,写锁具有排他性。

(1)当我们对一行数据开启事务后加读锁,我们还能再次加读锁;若是加写锁就会因为锁占用而出现等待,只有事务commit后才能加锁。

  技术分享图片

(2) 我们对一行数据加写锁后,只有事务commit后才能加其他锁(读锁/写锁)。

  技术分享图片

死锁:

 T1: select * from table (加共享锁)
       update table set column1=‘hello‘
T2: select * from table (加共享锁)
       update table set column1=‘hello‘

运行过程: T1  select完就发生了死锁,程序停止了。

原理:T1先到达执行select加共享锁,然后T2执行select加共享锁;
         T1 select执行完之后准备update,此时T2木有释放锁,所以
         T1无法执行,这样T1没有执行完,T2也无法执行。 

乐观锁和悲观锁:

   技术分享图片

以上是关于数据库的锁机制的主要内容,如果未能解决你的问题,请参考以下文章

Java学习---Java的锁和Mysql的锁机制

图解 synchronized 的锁升级机制

SQL SERVER的锁机制——概述(锁的兼容性与可以锁定的资源)

Mysql的锁机制与PHP文件锁处理高并发简单思路

Mysql的锁机制与PHP文件锁处理高并发简单思路

Mysql的锁机制与PHP文件锁处理高并发简单思路