美文网首页
数据库锁的基本认识

数据库锁的基本认识

作者: Hmcf | 来源:发表于2019-11-18 11:30 被阅读0次

    数据库中锁通常分为行锁和表锁。(有的还有页锁)

    行锁:

    • 共享锁
      又称读锁,简单讲就是多个事务对同一数据进行共享一把锁,都能访问到数据,但是只能读不能修改。

      适用于:用来确认某行记录是否存在,并确保没有人对这个记录进行UPDATE或者DELETE操作,如果当前事务也需要对该记录进行更新操作,则很有可能造成死锁。

      使用方法:
      SELECT * from contry where id = "1" lock in share
      由于对于contry 表中,id字段为主键,就也相当于索引。执行加锁时,会将id这个索引为1的记录加上锁,那么这个锁就是行锁。

    • 排他锁
      又称写锁,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,只有获取排他锁的事务可以对数据进行读取和修改。

      适用于:锁定行记录后需要进行更新操作的应用。

      对于多个不同的事务,对同一个资源只能有一把锁。
      与共享锁类型,在需要执行的语句后面加上for update就可以了
      SELECT * from contry where id = "1" for update

    • 悲观锁
      悲观锁包含了共享锁和排它锁。

    • 乐观锁
      不加锁,解决并发 使用版本号+1或者时间戳来记录update/insert的最新数据。

    注意:悲观锁和乐观锁的概述在本人另一篇文中https://www.jianshu.com/p/fbc52087cf70
    里面有介绍。

    表锁:
    表级锁使用与并发性不高,以查询为主,少量更新的应用,比如小型的web应用。
    而行级锁适用于高并发环境下,对事务完整性要求较高的系统,如在线事务处理系统。

    相关文章

      网友评论

          本文标题:数据库锁的基本认识

          本文链接:https://www.haomeiwen.com/subject/mcmvictx.html