行级锁,表级锁,乐观锁,悲观锁简介

名词解释:

表级锁:一般是指表结构共享锁,是不可对该表执行DDL操作,但对DML操作都不限制。

行级锁:一般是指排它锁,即被锁定行不可进行修改,删除,只可以被其他会话select。行级锁之前需要先加表结构共享锁。是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。

悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。

乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。

 补充:共享锁:对某一资源加共享锁,自身可以读该资源,其他人也可以读该资源(也可以再继续加共享锁,即 共享锁可多个共     存),但无法修改。要想修改就必须等所有共享锁都释放完之后。语法为:select * from table lock in share mode

排他锁:对某一资源加排他锁,自身可以进行增删改查,其他人无法进行任何操作。语法为:select * from table for update -- 增删改自动加了排他锁

表级锁:

  1. table-level locking,锁住整个表。
  2. 开销小,加锁快。
  3. 不会死锁(一次性加载所需的所有表)。
  4. 锁粒度大,发生锁冲突概率大,并发效率低。
  5. 适合查询。

行级锁:

  1. row-level loking,锁住一行记录。
  2. 开销大,加锁慢。
  3. 会死锁。
  4. 锁粒度小,发生所冲突概率小,并发效率高。
  5. 适合并发写,事务控制。
  6. 并不是直接丢记录行加锁,而是对行对应的索引加锁

乐观锁和悲观锁:

对于乐观锁和悲观锁,我们知道两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下(多读场景),即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果是多写的情况,一般会经常产生冲突,这就会导致上层应用会不断的进行retry,这样反倒是降低了性能,所以一般多写的场景下用悲观锁就比较合适。

行级锁,表级锁,乐观锁,悲观锁简介相关推荐

  1. Oracle锁表 行级锁 表级锁 行级锁

    2019独角兽企业重金招聘Python工程师标准>>> Oracle锁表  行级锁  表级锁 ---- 行被排他锁定 ----在某行的锁被释放之前,其他用户不能修改此行       ...

  2. mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

  3. MySQL数据库事务中的行级锁,表级锁,页级锁

    锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...

  4. mysql行级锁unique_MySQL行级锁,表级锁,页级锁详解

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

  5. MySQL之锁-表级锁

    目录 MySQL之锁-表级锁 1.表级锁分类 2.表锁 2.1分类 2.2表共享读锁 2.2.1特点 2.2.2加读锁 2.3表独占写锁 2.3.1特点 2.3.2加写锁 2.2.3释放锁 3.元数据 ...

  6. mysql 高并发写入锁表_使用mysql中的锁解决高并发问题

    阿里云产品通用代金券,最高可领1888分享一波阿里云红包. 阿里云的购买入口 为什么要加锁 多核计算机的出现,计算机实现真正并行计算,可以在同一时刻,执行多个任务.在多线程编程中,因为线程执行顺序不可 ...

  7. ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL、DBA必备)

    ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL.DBA必备) 文章目录 ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL.DBA必备) 前 ...

  8. MySQL 锁表后快速解决方法 及 锁表原因

    前几天同事在晚上上线的时候执行sql语句造成锁表,想总结一下以避免后续发生. (1) 遇到锁表快速解决办法 依次执行1-6步,运行第6步生成的语句即可. 如果特别着急,运行 1 2 6 步 以及第6步 ...

  9. mysql乐观和悲观锁实现_mysql实现乐观锁和悲观锁该怎么编写?

    乐观锁和悲观锁相信大家都是知道的,这是java中的基础知识,今天我们就来看看它们两者该如何使用代码实现吧. 乐观锁实现 1).表设计 表task,分别有三个字段id,value.version 2). ...

  10. mysql如何加悲观锁_【mysql】关于悲观锁

    关于mysql中的锁 在并发环境下,有可能会出现脏读(Dirty Read).不可重复读(Unrepeatable Read). 幻读(Phantom Read).更新丢失(Lost update)等 ...

最新文章

  1. python数据转换函数_常用python数据类型转换函数总结
  2. OSChina 周二乱弹 ——在影楼工作的妹子,可追不?
  3. extjs中文字体在firefox和Adobe Air里显示偏小的问题
  4. Redis 3.2.1集群 —— fail状态的产生
  5. mysql raiserror_RAISERROR在SQL Server数据库中的用法
  6. (1) openssl基础概念
  7. 网站数据库服务器怎么启动,启动数据库服务器
  8. ssh连接局域网内ubuntu主机_ubuntu使用ssh连接远程电脑的方法
  9. iOS9 : Storyboard References
  10. Spark源码分析之Master资源调度算法原理
  11. Cubieboard通过aria2和minidlna来架设家庭媒体中心
  12. C# decimal保留指定的小数位数,不四舍五入
  13. Install: pymongo
  14. 使用 patchrom 移植 MIUI
  15. 你如何理解目前市面上流行的贷款软件?
  16. mysql 索引代码_mysql索引
  17. 软件需求工程 高校教学平台 测试报告
  18. ODOO 进出口外贸行业解决方案
  19. (转载)成都移动IPV6光猫设置教程
  20. OCA/OCP Oracle 数据库12c考试指南读书笔记:第3章: Installing Oracle Grid Infrastructure for a Stand-Alone Server

热门文章

  1. blast的-max_target_seqs?
  2. 【C】编一程序,将两个字符串连接起来,不要用strcat函数
  3. 网络故障排查常见方法
  4. Django之路由层、视图层、模板层介绍
  5. 电影步入下半年血拼关键期,这会是猫眼们持续破局的命门吗?
  6. Category (mathematics)
  7. 二十九、进阶之项目数据请求
  8. Monit的web监控界面
  9. Rodney Brooks: 我们需要更理性看待人工智能技术
  10. 超简单解析显示金字塔(Display pyramid)题目