问题出现的场景

今天有个需求是对数据库中一张表进行相关的CRUD操作,刚开始的时候操作都没有,知道我测试删除功能的时候,页面点击删除没有任何反应。

问题追踪

使用debug模式启动项目,并且在删除逻辑开始的地方打上断点,在前端点击相关的删除按钮,后台并没有进入断点。由此得到可能是前端页面请求出现了错误。于是打开Chrome的开发者工具选到Network,查看那个删除的ajax请求信息。 结果如下:

遇到问题先问一波度娘,但是网上大多数的答案都是什么ajax请求跨域什么的,但是我本地跑的项目压根就没有跨域的场景,前后端都是一起的。于是放弃百度,回忆自己在这之前所做的操作。

找到问题

在做删除功能之前我是先做的新增的功能于是数据库中存在了很多不符合规定的数据。于是我使用的plsql对数据进行删除。具体的删除方法如下:

  • 步骤一:
    使用plsql中查询语句查询出所有数据。
select a.* from BPM_WISDOMINSPECT_BIDEXPERT a
order by wf_doccreated desc  for update
  • 步骤二
    在查询出来的结果中进行删除。

    点击图片中小锁,然后选定指定行在点击左上角上的减号完成删除操作。单完成了所有的操作后点击左上角的√然后在点击plsql整个窗口左上角的那个提交按钮提交事务。

为了检验手动删除有没有出现问题,于是我再次使用了上述sql查询了下。发现数据一切正常。于是我在页面选中我要删除记录进行删除,这时候就出了文中刚开始出现的那种问题,浏览器没有任何反应。

得出结论

经过仔细的查看,原来使用for update进行查询,不管你是否进行了操作,只要执行了这条语句就会开启事务。因为我在查询后并没有提交事务,于是页面请求的删除操作就之一被阻塞了。当我在plsql中点击提交事务后,刚刚没有响应的页面完成了响应。

for update语句的替代方案

select rowid ,a.* from BPM_WISDOMINSPECT_BIDEXPERT a
order by wf_doccreated desc

使用这种方式进行查询,一开始是不会开启事务的,只有你在查询出来的结果中删除了某些记录才需要提交事务。

for update执行机制

Select …for update(nowait)
Select * from tab1 for update
用户发出这条命令之后,oracle将会对返回集中的数据建立行级封锁,以防止其他用户的修改。
如果此时其他用户对上面返回结果集的数据进行dml或ddl操作都会返回一个错误信息或发生阻塞。

  • 1:对返回结果集进行update或delete操作会发生阻塞。
  • 2:对该表进行ddl操作将会报:Ora-00054:resource busy and acquire with nowait specified.
原因分析

此时Oracle已经对返回的结果集上加了排它的行级锁,所有其他对这些数据进行的修改或删除操作都必须等待这个锁的释放,产生的外在现象就是其他的操作将发生阻塞,这个这个操作commit或rollback.

同样这个查询的事务将会对该表加表级锁,不允许对该表的任何ddl操作,否则将会报出ora-00054错误::resource busy and acquire with nowait specified.

PLSQL使用for update编辑数据库的坑相关推荐

  1. 使用Plsql+oracle client 连接 Oracle数据库

    最近刚入职一家做Java开发的公司,公司数据库使用的是Oracle.以前做开发都是用MySQL的,公司里面的同事都在用的数据库工具plsql,口碑不错,也跟着他们来用.刚开始下载安装plsql,连接数 ...

  2. mysql bulk update_Django bulk_create()、update()与数据库事务的效率对比分析

    下面以创建10000个对象为例进行测试: # 用for循环挨个创建,共花费37秒 for i in range(10000): name="String number %s"%i ...

  3. vb mysql 表格显示,在VB中编辑数据库和电子表格

    在VB50中有很多功能强大的控件,其中数据控件与一些绑定控件(如文本框,图片框及 ActiveX控件)的相互协作,能够方便地实现对各种数据库记录.表格乃至电子表格的浏览和编辑操作. 下面介绍实例,其 ...

  4. plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致

      plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致 . plsql 登录后提示: Database character se ...

  5. plsql如何导入csv文件,PLSQL导入csv文件到数据库

    搜索热词 好久不用oracle了,突然忘记怎么导入数据了.今天再记录一下吧. 1.建表.目的是:被导入到数据的存储位置. 因为数据库中曾经有过相同表结构的表,所以直接使用sql建表. sql" ...

  6. 向量数据库入坑:使用 Docker 和 Milvus 快速构建本地轻量图片搜索引擎

    本篇文章,我来分享如何使用 Docker 来搭建一个能够跑在本地的轻量图片搜索引擎,实现日常生活中我们习以为常,但是实现起来颇为麻烦的功能:以图搜图. 写在前面 之前网上看到一个问题<如何在自己 ...

  7. 【逆向】【Android微信】加密数据库踩坑

    2020-02-19 晴 焦作 出场人物 饭咸 - 程序员 沉瓶 - 产品经理 工作环境 硬件:MacBook Pro (Retina, 13-inch, Early 2015) 硬件相应系统:mac ...

  8. Realm数据库踩坑

    今天升级Realm数据库实体类的时候,发现数据库东西不见了,折腾了一下午,得到一些教训,这里转一些知识点,下次升级时候用. /*** Realm数据库升级*/ public class MyMigra ...

  9. 阿里云ECS服务器配置LAMP时安装配置mysql数据库填坑(二)

    阿里云ECS服务器配置LAMP时安装配置mysql数据库填坑(二) 上篇文章讲到的是安装apache服务器时遇到的坑,经过排错总算是把Apache的坑填完了,没想到安装mysql又跳坑里了,真是不得不 ...

  10. centos 安装2个mysql_CentOs服务器下安装两个个MySql数据库踩坑日记

    背景: 其实并非本意非要安装两个服务器,奈何不知道前面项目的数据库密码,并且数据库版本是8.x,另外还有项目在上面运行,前面的人把数据库装到了系统盘,留下了500G的数据盘没用,所以本着折腾的精神,就 ...

最新文章

  1. zabbix3.2.3安装部署
  2. Space-Filling Designs
  3. 向 Fiddler 告别,拥抱 Fastest 吧!
  4. mongodb 监控权限_运维监控产品分析篇
  5. [斯坦福]距离编码-更为强大的GNN
  6. 利用filebeat推送mysql慢查询日志
  7. Tensorflow2.0数据和部署(四)——Tensorflow高级模型部署
  8. 如何使用ImageRanger Pro Edition mac版创建缩略图?
  9. 【人脸识别】基于matlab ksvd字典学习人脸表情识别【含Matlab源码 460期】
  10. [学习笔记]2020年win10最常用dos命令以及win+R即可运行的命令(使用命令打开自己想要的内容,总比找不到更好,赶快收藏)
  11. directx9 截屏
  12. 数据结构-哈夫曼编码例题
  13. 二级域名间相互请求 ajax跨域请求
  14. [答疑]能举一个人取代业务实体的例子吗
  15. oracle查询 相关的表,Oracle 查询用户,表,受权相关语句
  16. python解超越方程_初试在Python中使用PARI/GP
  17. Android 360开源全面插件化框架RePlugin 实战
  18. 大数据运维架构师培训(4):Oozie,Flume,Sqoop,Azkaban,Ranger
  19. 让其他局域网电脑也可以访问本机的NAT虚拟机
  20. Nginx常用配置及代理转发

热门文章

  1. WPS安装自定义项安装程序出错问题
  2. Spring之事务管理与事务的传播特性
  3. 批量转换word为pdf
  4. 红外与可见光图像融合(二)之思维导图
  5. mysql数据脱敏_数据脱敏|静态脱敏|动态脱敏—数据库脱敏_产品
  6. 12CPU数据通路的功能和基本结构
  7. Python实现Excel和TXT文件格式的转换
  8. 汽车UDS诊断之诊断会话控制服务(0x10)深度剖析
  9. 微信H5 分享(自定义标题、图片、链接) 与 禁止分享(微信隐藏功能按钮) 功能的写法
  10. 均匀权重向量集合的生成