TX行锁发生的常见场景:

1、当前会话要更新或删除的记录,已经被其他会话更新或删除。

2、对于表上有唯一索引的情况,多个会话插入或更新为相同的键值。

3、对于表上有位图索引的情况,多个会话即使更新不同记录,只要这些记录在位图索引上的键值相同,也会产生行锁。

1、当前会话要更新或删除的记录,已经被其他会话更新或删除。

2、对于表上有唯一索引的情况,多个会话插入或更新为相同的键值。

3、对于表上有位图索引的情况,多个会话即使更新不同记录,只要这些记录在位图索引上的键值相同,也会产生行锁。

一般我们可能认为在发生行锁的时候,几个SQL的语句是一样的,事实上这种理解是错误的。我举一个简单的例子:

首先在表上找到job为manager的记录,有三条:

select empno from emp where job='MANAGER';

--显示7566/7698/ 7782 三条记录。

之后在会话1 将部门ID为10的员工的记录删除掉

sess1:delete from emp where deptno=10;

-- 7782/7839/ 7934 三条记录被删除,但并未提交。其中7782的记录刚好是job为manager的。

接下来在session2做一个delete的操作,此时就会被hang住。

sess2:delete from empwherejob='MANAGER';

那么hang的情况说明时候会结束呢?

--if sess 1 rollback, 7566/ 7698/7782将被删除

--if sess 1 commit, 7566/ 7698将被删除

也就是说只有资源被释放,系统才会解除TX行锁。

转贴自:http://www.sohu.com/a/207720182_505827

[oracle]TX行锁发生的常见场景(转贴)的更多相关文章

  1. oracle学习----行级锁的理解

    通过实验来理解行级锁的发生 1.创建需要的表 SQL> conn / as sysdba已连接.SQL> create table dept as select * from scott. ...

  2. 【锁】MySQL和Oracle行锁比较

    InnoDB INNODB表是索引组织的表,主键是聚集索引,非主键索引都包含主键信息. INNODB默认是行锁. INNODB行锁是通过给索引项加锁来实现的,即只有通过索引条件检索数据,InnoDB才 ...

  3. Record is locked by another user --Oracle行锁解锁

    Oracle修改表中记录时出现record is locked by another user的问题 在操作表时没有commit,导致表被锁,只要执行下面两行语句,就可以了将行锁解锁了. 1.     ...

  4. Oracle 唯一主键引发的行锁

    SQL> create table test(id int PRIMARY KEY, name char(10)); 表已创建. Session 1: SQL> select * from ...

  5. oracle行锁select for update

    oracle行锁select for update 学习了:https://blog.csdn.net/zdwzzu2006/article/details/50490157 学习了:https:// ...

  6. 【转载】TX - row lock contention 的一些场景

    TX - row lock contention 的一些场景 原创 2016-07-11 易欣 云和恩墨 易欣(Eson) 云和恩墨技术专家 本文整理来自7月7日周四晚云和恩墨大讲堂嘉宾易欣分享的主题 ...

  7. Oracle数据库的锁类型

    Oracle数据库的锁类型 博客分类: oracle   Oracle数据库的锁类型 根据保护的对象不同,Oracle数据库锁可以分为以下几大类:DML锁(data   locks,数据锁),用于保护 ...

  8. mysql的锁--行锁,表锁,乐观锁,悲观锁

    一 引言--为什么mysql提供了锁 最近看到了mysql有行锁和表锁两个概念,越想越疑惑.为什么mysql要提供锁机制,而且这种机制不是一个摆设,还有很多人在用.在现代数据库里几乎有事务机制,aci ...

  9. Java如何实现对Mysql数据库的行锁

    场景如下:     用户账户有余额,当发生交易时,需要实时更新余额.这里如果发生并发问题,那么会造成用户余额和实际交易的不一致,这对公司和客户来说都是很危险的. 那么如何避免:     网上查了下,有 ...

随机推荐

  1. FlowPortal BPM 明细表中新添加的行一直排在最后的问题

    明细表中的数据提交过之后再编辑时,添加的行不管在第几行添加都显示在最后一行的问题 Solution:明细表的数据库表中加字段OrderIndex,设为必填,系统会自动排序

  2. wince窗口被静态的焦点挡住

    效果如下图: 问题:文本框被挡住了 解决办法如下: 找到该窗体,设置属性Menu值为无即可解决

  3. 第二章 Django之python安装(1)

    Python 安装 Django 由百分百的纯 Python 代码编写而成,因此必须在系统中安装 Python .Django 需要 2.3 或更高版本的 Python.如果使用的是 Linux 或 ...

  4. Linux命令——gzip、zcat、bzip2、bzcat、tar

    参考:Linux命令——ar 为什么文件要压缩? 当文件过大时,无论是本地做备份,复制都很麻烦,而且还浪费磁盘空间.如果用网络传输,大文件无疑会浪费大量宝贵带宽.文件压缩技术可以有效解决这个问题,但是 ...

  5. Free lunch is over

    译文:http://www.mamicode.com/info-detail-1324737.html 原文:http://www.gotw.ca/publications/concurrency-d ...

  6. Android-File读写+SharedPreferences的存取地址

    写了两个demo,一个是使用SharedPreferences将数据存储在应用文件中并读取,另一个是使用Context的openFileOutput和openFileInput将数据存储在应用文件中并 ...

  7. 02-命令篇——基础命令&常用命令

    基础命令 docker 启动与停止 启动docker systemctl start docker 停止docker systemctl stop docker 重启docker systemctl ...

  8. redis事务机制

    目录 一.事务的实现 1.multi——开启事务 2.命令入队列 3.exec——执行事务 4.DISCARD——放弃执行 5.错误处理 二.watch命令 redis官方文档:Redis trans ...

  9. jq监听页面的滚动事件,

    jQuery监听页面的滚动状态,实现代码: $(document).scroll(function() {       var scroH = $(document).scrollTop(); //滚 ...

  10. 使用selenium实现站长素材图片采集

    from selenium import webdriver import requests,os from lxml import etree from selenium.webdriver.chr ...