1.乐观锁

如一个金融系统,当某个操作员读取用户的数据,并在读出的用户数据的基础上进行修改时(如更改用户帐户余额),如果采用悲观锁机制,也就意味着整个操作过 程中(从操作员读出数据、开始修改直至提交修改结果的全过程,甚至还包括操作 员中途去煮咖啡的时间),数据库记录始终处于加锁状态,可以想见,如果面对几百上千个并发,这样的情况将导致怎样的后果。乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本 ( version )记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。同时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号等于数据库表当前版本号,则予以更新,否则认为是过期数据。

在操作数据时非常乐观,认为别的线程不会同时修改数据,所以不会上锁,但是在更新的时候会判断在此期间别的线程有没有更新过这个数据。

2.悲观锁

悲观锁,正如其名,具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)

每次去拿数据的时候认为别的线程也会同时修改数据,所以每次在拿数据的时候都会上锁,这样别的线程想拿到这个数据就会阻塞直到它拿到锁

3.共享锁:

  允许多个事务封锁一个共享表;任何事务都不能修改该表;

4.排它锁:

  允许一个事务封锁此表;其他必须等到排它锁被释放才能对该表进行访问

 
5.更新锁:

  用来预定要对此页施加X锁,它允许读,不允许再加锁 

数据库包含哪几种锁?相关推荐

  1. MySQL数据库的锁 --- 六种分类 - 14种锁详细介绍

    MySQL锁概述 锁是计算机协调多个进程或线程并发访问某一个资源的机制,在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性 ...

  2. 浅谈Java中15种锁的分析比较

    作者:站长,来自:搜云库技术团队 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类,介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享 ...

  3. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...

    http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...

  4. java B锁_Java中15种锁的介绍

    原标题:Java中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 1.公平锁 / 非公平锁 2.可重入锁 / 不可重入锁 3.独享 ...

  5. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等

    Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享锁 互 ...

  6. 数据库常用的几种引擎,区别和比较

    数据库常用引擎和区别和比较 面试官经常问的基础问题,就是基于MySQL数据库的这几种引擎. · MyISAM:默认的MySQL插件式存储引擎,它是在Web.数据仓储和其他应用环境下最常使用的存储引擎之 ...

  7. 后端开发应彻底掌握的13 种锁的实现方式

    最近有很多小伙伴给我留言,分布式系统时代,线程并发,资源抢占,"锁" 慢慢变得很重要.那么常见的锁都有哪些? 今天就和大家简单聊聊这个话题 1.悲观锁 正如其名,它是指对数据修改时 ...

  8. mysql 聊聊InnoDB七种锁

    前言 本文将跟大家聊聊InnoDB的锁.本文比较长,包括一条SQL是如何加锁的,一些加锁规则.如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的. 为什么需要加锁呢? InnoDB的七种锁 ...

  9. 数据库并发控制,选择乐观锁还是悲观锁?

    出处:http://www.cnblogs.com/chenlulouis/  今天,在这里,我们将讨论的是在实际生产过程中,对于并发控制你是选择乐观锁还是悲观锁.这两种锁各自的应用环境应该怎样选择? ...

最新文章

  1. 安装esp8266库_基于ESP8266,DIY低成本智能远程开关灯小装置
  2. (C++)1023 组个最小数 简单贪心
  3. GraphPad Prism —— 简单又好用的生物数据统计绘图软件
  4. filebeat+elk简单搭配
  5. bi 存储过程方案_BI 系统中容易被忽视的数据源功能
  6. LeetCode 189. 旋转数组(环形替换)
  7. Java 面向对象:super关键字的理解
  8. java代码里出现中文乱码怎么解决
  9. PAT 1018 锤子剪刀布
  10. cs1.6服务器怎么注册,CS服务器登录与管理工具
  11. 机器学习算法(一) K-Means算法简述以及在MNIST上的聚类实现
  12. shineblink 火焰传感器
  13. 贪心 :PIPI渡江
  14. 2021年度软件企业 100 强榜单(附全名单)看看有你家公司没
  15. 设计模式-装饰器模式 C++
  16. 计算机桌面属性打不开,电脑计算机属性打不开怎么办
  17. Little Girl and Game(规律
  18. DM6467的CAN模块调试(SPI转CAN)
  19. sklearn中predict()与predict_proba()返回值意义
  20. navicat15 oracle library is not loaded

热门文章

  1. python io密集 多线程_Python进阶:聊聊IO密集型任务、计算密集型任务,以及多线程、多进程...
  2. 记录一次minerd肉鸡木马的排查思路
  3. 网络营销实验报告SEO综合实践
  4. 面试-vue组件间通信
  5. xxtea 加密解密
  6. 福大软工 · 第十次作业 - 项目测评(团队)
  7. ai 如何导出html格式,Adobe Illustrator导出SVG的设置方法
  8. linux终端如何连接wifi,如何在 Linux 终端中连接使用 WiFi?
  9. 基于ssm+mysql的javaee微博博客系统,Java实现类似新浪微博网站、朋友圈分享系统
  10. 计算机 发声原理,耳机 篇十五:动铁耳机发声原理哦。喜欢记得收藏。