精华内容
下载资源
问答
  • 数据库锁有几种

    2017-12-04 13:04:00
    锁的类型:共享(S):多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S立即被释放。排它(X):仅允许一个事务封锁此页;其他任何事务必须等到X被释放才能对该页进行访问...
    锁的类型有三种: 
    共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。 
    排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。 

    更新(U)锁:用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁;当被读取的页将要被更新时,则升级为X锁;U锁一直到事务结束时才能被释放。

    本文转自博客园知识天地的博客,原文链接:数据库锁有几种,如需转载请自行联系原博主。

    展开全文
  • 数据库的锁有几种?语句怎么实现

    千次阅读 2019-09-17 09:01:34
      数据库是一个多用户共享资源,当多个用户并发存储数据时,数据库就会产生多个事物同时存储同一数据情况。若对并发操作不加控制就可能读取或存取不正确数据,破坏数据不正确性(脏读,不可重复读,幻读...

    1 为什么需要锁

      数据库是一个多用户共享的资源,当多个用户并发的存储数据时,数据库就会产生多个事物同时存储同一数据的情况。若对并发操作不加控制就可能读取或存取不正确的数据,破坏数据的不正确性(脏读,不可重复读,幻读等),可能产生死锁。为了解决这个问题,加锁是一个非常重要的技术,对实现数据库并发控制是一个好的方案。简单来说,当执行SQL语句事物前,应向数据库发出请求,对你访问的记录加锁。在这个事物释放锁之前,其他事物不能对这个数据进行更新操作。

    2 有哪些锁

      MySQL数据库中的锁有共享锁、排他锁、行锁、表级锁、行级锁以及页面锁。

    2.1 共享锁(Shared Lock,也叫S锁)

      共享锁(S)表示对数据进行读操作,因此多个事物可以同时为一个对象加锁。这个事物释放锁之前,其他事物不能对该对象进行更新操作。产生共享锁的语句是:

    select * from t_user lock in share mode;
    

    2.2 排他锁(Exclusive Lock,也叫X锁)

      排他锁表示对数据进行写操作,如果一个事物给一个对象添加了排他锁,其他事物就不能给他加其他锁。产生排他锁的SQL语句如下:

    select * from ad_plan for update;
    

    2.3 行锁

      行锁表示对一条记录加锁,只影响一条记录。通常用在DML语句中,如INSERT, UPDATE, DELETE等。
      InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。
      InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

    2.4 锁的密度

      根据锁的级别或密度来划分,MySQL有三种锁的级别:页级、表级、行级。

    2.4.1 表级锁

      表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。
      当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并大度大打折扣。
      使用表级锁定的主要是MyISAM,MEMORY,CSV等一些非事务性存储引擎。

    2.4.2 行级锁

      行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。
      虽然能够在并发处理能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由于锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也更多,带来的消耗自然也就更大了。此外,行级锁定也最容易发生死锁。
      使用行级锁定的主要是InnoDB存储引擎。

    2.4.3 页面锁

      页级锁定是MySQL中比较独特的一种锁定级别,在其他数据库管理软件中也并不是太常见。页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者之间。另外,页级锁定和行级锁定一样,会发生死锁。
      在数据库实现资源锁定的过程中,随着锁定资源颗粒度的减小,锁定相同数据量的数据所需要消耗的内存数量是越来越多的,实现算法也会越来越复杂。不过,随着锁定资源颗粒度的减小,应用程序的访问请求遇到锁等待的可能性也会随之降低,系统整体并发度也随之提升。
      使用页级锁定的主要是BerkeleyDB存储引擎。

    展开全文
  • 数据库锁的几种类型

    2019-02-26 09:22:00
    ORACLE里锁有以下几种模式:0:none 1:null空e.g. 1级锁有:Select,有时会在v$locked_object出现。 2:Row-S行共享(RS):共享表锁,subshare e.g. 2级锁有:Selectforupdate,LockForUpdate,LockRowShare ...

    ORACLE里锁有以下几种模式: 
    0:none

    1:null 空 
    e.g. 1级锁有:Select,有时会在v$locked_object出现。 

    2:Row-S 行共享(RS):共享表锁,sub share  
         e.g. 2级锁有:Select for update,Lock For Update,Lock Row Share  
                select for update当对话使用for update子串打开一个游标时,所有返
                回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查
                询这些数据行,不能进行update、delete或select for update操作。

    3:Row-X 行独占(RX):用于行的修改,sub exclusive 
         e.g.3级锁有:Insert, Update, Delete, Lock Row Exclusive 
               没有commit之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁, 我们必
               须释放掉上一个才能继续工作。

    4:Share 共享锁(S):阻止其他DML操作,share 
         e.g. 4级锁有:Create Index, Lock Share 
                locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作会提示
                ora-00054错误。 
                00054, 00000, "resource busy and acquire with NOWAIT specified" 
                // *Cause: Resource interested is busy. 
                // *Action: Retry if necessary.

    5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive  
         e.g. 5级锁有:Lock Share Row Exclusive  
                具体来讲有主外键约束时update / delete ... ; 可能会产生4,5的锁。 

    6:exclusive 独占(X):独立访问使用,exclusive 
         e.g .6级锁有:Alter table, Drop table, Drop Index, Truncate table, Lock Exclusive 

    数字越大锁级别越高, 影响的操作越多。 


     常用查询DB中锁的SQL语句: 
    select b.owner,b.object_name,l.session_id,l.locked_mode 
    from v$locked_object l, dba_objects b 
    where b.object_id=l.object_id 
     

    select t2.username,t2.sid,t2.serial#,t2.logon_time  
    from v$locked_object t1,v$session t2  
    where t1.session_id=t2.sid order by t2.logon_time 
     

    如果有长期出现的一列,可能是没有释放的锁。我们可以用下面SQL语句杀掉长期没有释放非正常的锁: 

    alter system kill session 'sid,serial#'; 

    如果出现了锁的问题, 某个DML操作可能等待很久没有反应。 

    当你采用的是直接连接数据库的方式,也不要用OS系统命令 $kill process_num 或者 $kill -9 process_num来终止用户连接,因为一个用户进程可能产生一个以上的锁, 杀OS进程并不能彻底清除锁的问题。

     

    转载于:https://www.cnblogs.com/Memories-off/p/10435255.html

    展开全文
  • 徐无忌深入JVM虚拟机笔记:MySQL数据库锁有几种?实现原理是什么? 完成:第一遍 1.数据库并发控制通过什么实现? 当多个事务并发方法对同一个数据进行操作 通过数据库锁实现对数据库的并发控制。 2.锁类型有哪三种...

    徐无忌MySQL笔记:MySQL数据库锁有几种?实现原理是什么?

    完成:第一遍

    1.数据库并发控制通过什么实现?

    当多个事务并发方法对同一个数据进行操作
    通过数据库锁实现对数据库的并发控制。

    2.锁类型有哪三种?

    从对数据的操作粒度来划分,粒度就是同一维度下,数据统计的粗细程度,计算机领域中粒度指系统内存扩展增量的最小值
    3种锁:

    表锁

    行锁

    页锁

    3.表锁有哪些特点?

    特点一:粒度最大

    特点二:实现简单

    特点三:每一次将整个表锁定

    特点四:锁定粒度大导致资源争用概率非常高,并发程度大打折扣

    4.行锁有哪些特点?

    特点一:粒度最小

    特点二:锁定资源导致的争用概率最小,给予尽可能大的并发处理能力

    特点三:为了满足小的粒度资源锁定,每次获取和释放需要带来更多的消耗

    特点四:行级锁定最容易发生死锁

    5.什么是死锁?

    死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

    6.页锁有哪些特点?

    这里的叶锁,指的是B+树叶子节点的大小和磁盘的交互单位页是相同大小的。

    特点一:粒度界于表锁和行锁之间,并发度一般

    特点二:每个B+树叶子节点存放了多行记录,一个叶子节点就是一页数据,锁定一页的数据,其实锁定的是相邻数据

    特点三:会出现死锁

    7.MyISAM实现了什么锁?

    一.只提供表锁

    二.在执行查询语句(SELECT)前,会自动给表加读锁,允许其他用户的读请求,但不允许写请求

    三.在执行更新操作(UPDATE、DELETE、INSERT)前,会自动给表加写锁,不允许其他用户的读和写请求

    8.InnoDB实现了什么锁?

    一.支持表锁、行锁

    二.InnoDB是通过给索引项加锁,来实现行锁的

    9.InnoDB行锁的使用有什么条件?

    条件一:如果不通过索引条件进行查询,InnoDB使用表锁,行锁不生效

    条件二:行锁是针对索引加锁,不是针对记录加的锁。即使访问的是不同行,但如果它们索引相同,还是会出现锁冲突

    条件三:即使在查询条件中使用了索引,但用不用索引来查询,取决于MySQL的判断。比如一个很小的表,MySQL认为全表扫描效率更高,就不会使用索引,此时InnoDB将使用表锁,而不是行锁

    条件四:因此在锁冲突的时候,需要检查SQL的执行计划,确定是否使用了索引

    10.InnoDB如何加锁?

    查询时:在执行查询语句(SELECT)前,基于MVCC(多版本控制)的方式,什么锁都不会加

    更新时:在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给行加写锁,其他用户的写请求无法完成,但通过MVCC(多版本控制)的方式,可以允许读请求

    展开全文
  • 给你介绍一下ORACLE的锁吧数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的...
  • 数据库的锁

    2016-05-11 11:39:11
    数据库基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改...
  • 0, 'None ', 1, 'Null ', 2, 'Row-S(SS) ', 3, 'Row-X(SX) ', 4, ‘Share(S)’, 5, 'S/Row-X (SSX) ', ...2级锁有:Select for update,Lock For Update,Lock Row Share select for update当对话使用for u
  • Q:一个业务服务器,一个数据库,操作:查询用户当前余额,扣除当前余额3%作为手续费 synchronized lock dblock Q:两个业务服务器,一个... 高可用获取和释放功能 获取和释放锁的性能要好 一、基于数据
  • 数据库基本的锁类型

    千次阅读 2014-08-06 21:52:55
    数据库基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。...
  • 数据库的锁是什么,几种锁,代表什么?请大神解答,谢谢谢谢谢谢谢谢
  • 数据库锁

    2018-09-13 22:55:06
    数据库锁有几种? 据我所知有以下几种: 锁类型有三种:  共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。  排它(X)锁:仅允许一个事务封锁此页;...
  • 常见的分布式实现方案以下几种: 基于数据库,如MySQL 基于缓存,如Redis 基于Zookeeper、etcd等 下面记录一下数据库分布的优、缺点: 基于数据库的这种实现方式很简单; 不具备可重入; 没有...
  • 数据库与事务

    2018-10-22 11:38:05
    我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发应用,同一时间会大量并发访问,如果加锁过度,会极大降低并发处理能力。所以对于...
  • 数据库锁的粒度

    2015-02-07 16:09:00
    锁的粒度主要下面几种类型: (1)行锁,行锁是粒度中最小资源。行锁就是指事务在操作数据过程中,锁定一行或多行数据,其它事务不能同一时候处理这些行数据。行级占用数据资源最小,所以在事务...
  • 分布式数据库锁

    2017-11-26 10:04:17
    于是便了分布式锁数据库锁是并发锁的实现分布式需要满足以下个条件 在分布式环境下,在同一时间只能被一台机器一个线程执行 为了避免死锁,分布式是一把可重入 CREATE TABLE `resou
  • 由于系统都是由多个微服务组成的,相比较于传统的应用系统,锁的实现就变的复杂了很多,单体应用的锁也不适用与分布式系统,下面就介绍几种分布式锁的实现方式,常见的分布式锁的实现方式有数据库分布式锁,redis...
  • 数据库锁机制

    2020-04-07 13:40:29
    2.锁有几种分类? 3.讲讲乐观锁悲观锁吧 4.mvcc是咋回事? 5.具体mvcc机制有什么? 6.说到事务了,聊聊事务 7.再说说独占锁,共享锁吧 8.读写锁机制是什么呢?(佯攻) 9.内存模型 还有哪些可以聊聊...
  • 几种NoSQL数据库概述

    2019-09-23 22:13:39
    关系型数据库的优点大概以下: ①可以通过事务来保持数据的一致性,并且,如银行转账可以通过数据库来实现 ②可以进行多表的join连接 ③20多年的发展历史,比较成熟 ④可以应用于各种各样的系统中 但也存在...
  • 以mysql为例,数据库的锁,大概如下几种: 根据数据操作的方式,数据库可以分为读锁和写锁。 写锁:    当一个线程或者一个事务,要对某个“资源”进行写操作时,首先需要获取对这个“资源”的写权限,为了...
  • Redis实现分布式锁的几种方法总结 分布式是控制分布式系统之间同步访问共享资源一种方式。在分布式系统中,常常需要协调他们动作。如果不同系统或是同一个系统不同主机之间共享了一个或一组资源,那么访问...
  • 在加锁选择上,有几种方式,悲观,乐观。 悲观,简单理解就是把需要数据全部加锁,在事务提交之前,这些数据全部不可读取和修改。 乐观,使用对数据进行版本校验和比较,来对保证本次更新时最新...
  • 首先MySQL数据引擎,一个是MyISAM,与InnoDB MyISAM与InnoDB最大不同是:MyISAM不支持事务,而InnoDB支持事务 具体不同在于: MyISAM: 1)不支持事务和外键 2)极度强调读取速度(这方面性能高) 3)不...
  • 数据库为了维护事务的几种性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发应用,同一时间会大量并发访问,如果加锁过度,会极大降低并发处理能力。所以对于加锁处理,可以说...
  • 数据库锁基础

    2009-04-01 22:57:00
    天看过数据库锁的介绍,当时虽说看完了,似懂非懂,还记得有次笔试题目,估计也错了,最近看过高并发性数据维护课程后,现在翻看基础,豁然开朗,现整理笔记,及个人理解 SQL2005隔离级别4,Read ...
  • 如下概念是 指数据库操作 的几种现象 ,一般是由于没处理好 并发事务导致现象 脏读: A正在执行事务已修改数据了 还没提交,而事务B 读到这数据是修改后果数据, A事务把订单金额5000 修改成8000 还未提交, B事务...
  • 众所周知 再单机环境下 如果有不同线程对共享...我们会需要使用到分布式锁 目前 常用的分布式锁有是基于数据库的是基于Redis的 还有一是基于zookeeper的。 数据库的方法实现最为简单 我们可以构建...
  • 分布式实现的几种方式 写在前面:本篇文章主要搬自本人云笔记,不当之处,欢迎指正,共同学习; 1、数据库锁的方式 1.1、基于表记录实现方式 准备条件:创建表ABC,并做唯一索引version; //1、线程A加锁: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 790
精华内容 316
关键字:

数据库的锁有几种