MySQL

MySQL(InnoDB存储引擎)默认是自动提交事务的,所以这个测试,需要先将MySQL的autocommit设置为0,关闭自动提交,需要自己手动提交事务

-- 关闭自动提交

set autocommit=0;

-- 开启事务

begin;

这里我主要针对的是悲观锁,其实也就是行锁和表锁,SQL 加上 FOR UPDATE 即可

行锁

这个时候,我们再开启一个客户端访问MySQL,输入同一条加锁的SQL查询

这个时候是没有任何结果的,因为t_card表已经加锁了(这个时候其实加的是行锁),所以cardid=‘1’ 这一行的其他加锁操作是无效的

但是不加锁查询这一条记录却是可以的

也就是说虽然这一条记录所在的行被锁定了,但是并不影响我们正常的查询,当然了针对这一行的DML操作也是无效的

那如果我们对除了cardid=‘1’ 的其他行操作会怎样呢?

对于其他的行DML是完全没问题的,所以我在前面才说这是行锁,因为只有我们的cardid=‘1’的行被锁了

好吧,我们放过cardid=‘1’这一行吧

提交事务之后,另一边的加锁SQL才会生效

表锁

上面我们测试的只是行锁,那表锁,或者说怎样才会发生表锁?

没错,我们不根据主键查询,而是查询所有的记录,MySQL就对整张表加锁了,这不就是表锁了嘛。对于这张表的任何记录进行DML都是无效的

同时我们对于这张表的任何行进行加锁SQL操作是无效的,那普通的SQL查询又怎样呢?

还好,这不妨碍我们的普通查询,毕竟查询是与锁这东西没什么缘分的

结论

只要有锁存在的地方(无论是一行还是整张表),我们对有锁的地方进行任何加锁SQL都是无效的,当然了DML也是无效的;但是我们的普通查询是没有问题的,同时对于没有锁的行也是可以进行DML操作的

至于如何解除锁,可以查看这篇博客: https://zhengdl126.iteye.com/blog/1570865 。最后记得把MySQL的autocommit = 1

Oracle

Oracle是需要我们手动提交事务的,所以,我们不需要任何设置即可测试

只有提交事务之后,另一边才会生效,同样的普通查询是没有问题的。如果不根据主键查询,就会锁整张表。最后的结论是与MySQL一致的

查看哪张表被锁以及解锁

-- 查看哪张表被锁

SELECT object_name, machine, s.sid, s.serial#, logon_time, locked_mode

FROM gv$locked_object l, dba_objects o, gv$session s

WHERE l.object_id = o.object_id

AND l.session_id = s.sid;

-- 解锁(根据上边SQL查询结果得到sid和serial#)

--alter system kill session ‘sid,serial#‘;

ALTER system kill session ‘23,1647‘;

mysql和oracle的锁_关于数据库行锁与表锁的认识相关推荐

  1. Mysql、Oracle、DM、Tbase数据库差异性

    MYSQL.ORACLE.TBASE.DM 数据库对比 数据类型差异 : 字符串: 以上数据库均支持标准的字符CHAR/VARCHAR 但Oracle与DM提供VARCHAR2 目前VARCHAR2与 ...

  2. mysql数据意外删了怎么办_MySQL数据库意外崩溃导致表数据文件损坏无法启动怎么办...

    MySQL数据库意外崩溃导致表数据文件损坏无法启动怎么办 发布时间:2020-07-20 13:45:46 来源:亿速云 阅读:57 作者:小猪 这篇文章主要为大家展示了MySQL数据库意外崩溃导致表 ...

  3. MySQL 用 truncate 命令快速清空一个数据库中的所有表

    MySQL 用 truncate 命令快速清空一个数据库中的所有表. 1. 先执行select语句生成所有truncate语句 语句格式: select CONCAT('truncate TABLE ...

  4. mysql和oracle共用服务器_如何用oracle 11g客户端 配置连接服务器数据库?同一台服务器上装MySQL和oracle会有冲突么...

    在上一篇文章中,小编为您详细介绍了关于<模拟飞行10 咋设置多显示器10?>相关知识.本篇中小编将再为您讲解标题如何用oracle 11g客户端 配置连接服务器数据库?同一台服务器上装My ...

  5. springboot mysql行锁_SpringBoot基于数据库实现简单的分布式锁

    本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...

  6. mysql和oracle冲突吗_三分钟带你分清MySQL 和Oracle之间的误区

    原标题:三分钟带你分清MySQL 和Oracle之间的误区 来自:华为云开发者社区 摘要:MySQL和Oracle,别再傻傻分不清. MySQL 和Oracle 在开发中的使用是随处可见的,那就简单去 ...

  7. mysql 分库分表策略_【数据库】分库分表策略

    关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数.处理能力都有限.当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库.优化索引,做很多操作时性能仍下降严重.此时就要考 ...

  8. java 变量锁_一张图看透java的“锁”事

    Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率. Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家 ...

  9. 请列举你了解的分布式锁_这几种常见的“分布式锁”写法,搞懂再也不怕面试官,安排!...

    什么是分布式锁? 大家好,我是jack xu,今天跟大家聊一聊分布式锁.首先说下什么是分布式锁,当我们在进行下订单减库存,抢票,选课,抢红包这些业务场景时,如果在此处没有锁的控制,会导致很严重的问题. ...

最新文章

  1. 程序员别只顾着敲代码了,看看吧
  2. stackoverflow国内被墙的打开办法
  3. 类的实质——类成员public、private属性的另类解释
  4. 解题代码 用jquery控制一个按钮当一次点击完之后5 秒后才能继续点击 验证码的制作...
  5. ORACLE查询闪回
  6. 基于深度神经网络的噪声标签学习
  7. nginx一个端口配置多域名服务
  8. 如何在Java中将字节数组转换为十六进制字符串?
  9. Python3 格式化数字 补零 数字补零
  10. 使用electron-builder对Electron项目进行打包
  11. chrome最新版本下载
  12. 黑马程序员_java基础一
  13. Matlab取整函数之Floor\fix\round\ceil取余函数rem\mod
  14. QQHelper:QQ大家来找茬 辅助工具 外挂
  15. 国耀明医互联网医院: 白露吃什么好 白露食疗方
  16. UI设计教程分享之RGB与CMYK色彩模式对比
  17. 关于eclipse无法连接手机调试问题
  18. 海伦公式(附一种证明方法)
  19. 开车,开车,打疫苗以为能收获爱情,结果收到了警方提示,我哭了
  20. html5仿蚂蚁森林效果代码,vue仿支付宝蚂蚁森林水滴

热门文章

  1. G - Mike and gcd problem
  2. 20155203 - 杜可欣 - 预备作业2
  3. java 大数据处理之内存溢出解决办法(一)
  4. Linux dig
  5. Microsoft Sync Framework 2.1 软件开发包 (SDK)
  6. hdu 5178(尺取法)
  7. NYOJ 359 Delete it 字符串处理
  8. LinuxMint(Ubuntu)安装文泉驿家族黑体字
  9. 5-Error:failed to find Build Tools revision 28.0.0 rc1解决方案
  10. 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)