mysql加锁语法_MySql 加锁问题

1、设置非自动提交 set autocommit=0;  这时候 for update才会起作用

2、一般用法 set autocommit=0;  for update(加锁)  ;  commit/rollback; set autocommit=1;

首先看一下,set autocommit=0 后,执行哪些语句会自动加锁,加的是什么锁?

测试环境:5.6.16   innnoDB引擎 非自动提交方式(即 set autocommit=0;)

测试过程:执行 select * from w_help ;这个语句,并不会加锁 其他命令窗口一样可以增删改查;测试代码如下

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

DELIMITER $$DROP PROCEDURE IF EXISTS`test_release`.`test_Lock`$$CREATE DEFINER=`encysys48`@`%` PROCEDURE `test_Lock`(IN v_id VARCHAR(20),IN v_flag VARCHAR(10))BEGIN

set autocommit=0;select t.flag from test_lock t where t.hf_serial = v_id for update;/*update test_lock t

set t.flag = v_flag

where t.hf_serial = v_id;*/

--insert into w_help(char_content) values ('aaaaaaaaaaaaaaaaaaaa') for update;

--delete from w_help where w_help.id = '451';

select * fromw_help ;selectsleep(v_flag);commit;set autocommit=1;END$$

DELIMITER ;

存储过程 加锁后SLEEP

call test_Lock(1,10) --调用存储过程

在释放锁之前,下面的语句都是可以执行的,说明表并没有加锁

select * fromw_help;insert w_help(char_content) values("abcd");updatew_help tset t.char_content = '12345'

where t.id = "458";delete from w_help --where w_help.id = '458'

执行 insert into w_help(char_content) values ('aaaaaaaaaaaaaaaaaaaa') ;这个语句,只会给一行加锁,(值得一提的是 这个语句后面不能跟 for update 否则会报错,不知道是我写的语法问题,还是根本就不能加)  insert into w_help(char_content) values ('aaaaaaaaaaaaaaaaaaaa') for update; 就会报错;

其他事务语句执行情况如下:

select * from w_help; --可以执行

insert w_help(char_content) values("abcd"); --可以执行

updatew_help tset t.char_content = '12345'

where t.id = "464"; --可以执行

delete from w_help where w_help.id = '464'; --可以执行

delete from w_help --不能执行会等待锁释放后执行

执行 update w_help t

set t.char_content = v_flag

where t.id ="476"; 这个语句,只会给一行加锁,(前提是指明了主键)

其他事务语句执行情况如下:

select * from w_help; --可以执行

insert w_help(char_content) values("abcd"); --可以执行

updatew_help tset t.char_content = '12345'

where t.id = "479"; --可以执行

delete from w_help where w_help.id = '478'; --可以执行

delete from w_help --不能执行

如果不指明主键 则会锁住整个表,其他事务语句执行情况如下:

select * from w_help; --可以执行

insert w_help(char_content) values("abcd"); --可以执行并且不会被update

updatew_help tset t.char_content = '12345'

where t.id = "489"; --不能执行 等待锁被释放后继续执行

delete from w_help where w_help.id = '489'; --不能执行 等待锁被释放后继续执行

delete from w_help --不能执行 等待锁被释放后继续执行

执行 delete from w_help where w_help.id = '490';这个语句 产生行级锁,

其他事务语句执行情况如下:

select * from w_help; --可以执行

insert w_help(char_content) values("abcd"); --可以执行

updatew_help tset t.char_content = '12345'

where t.id = "490"; --被锁定的唯一一行 不能执行

delete from w_help where w_help.id = '488'; --不是被锁定的那一行,可以执行

delete from w_help --不能执行

还有一个奇葩的问题 select * from w_help for update; 并不能限制其他线程读取数据;可以限制其他线程加锁(即其他线程便不能加锁了)

这样的的话怎么防止读脏数据就是个问题了;不过我是在两个连接中测试的,即一个连接执行此语句,另一个连接仍然可以读数据,但是不可以修改!

所以,如果修改数据,select 时一定要 for update,否则就会有致命错误!

最后附上测试用的乱七八糟的代码,不值得看,只是做个备份而已,说不定哪时会用到;

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

DELIMITER $$DROP PROCEDURE IF EXISTS`test_release`.`test_Lock`$$CREATE DEFINER=`encysys48`@`%` PROCEDURE `test_Lock`(IN v_id VARCHAR(20),IN v_flag VARCHAR(10))BEGIN

set autocommit=0;select t.flag from test_lock t where t.hf_serial = v_id for update;/*update w_help t

set t.char_content = v_flag ;

-- where t.id ="476";

-- insert into w_help(char_content) values ('aaaaaaaaaaaaaaaaaaaa') ;*/

delete from w_help where w_help.id = '490';--select * from w_help ;

selectsleep(v_flag);commit;set autocommit=1;END$$

DELIMITER ;--

select * from w_help; --可以执行

insert w_help(char_content) values("abcd"); --可以执行

updatew_help tset t.char_content = '12345'

where t.id = "490"; --被锁定的唯一一行 不能执行

delete from w_help where w_help.id = '488'; --不是同一行,可以执行

delete from w_help --不能执行

updatew_help tset t.char_content = "666" where t.id = "489";

乱七八糟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

td过长,将固定宽度table撑开

解决办法: 在table上加上样式: table{table-layout:fixed;word-break:break-all} table-layout:fixed tablle的列宽由表格宽度和列宽设定。 word-break:break-all 允许在单词内换行。 正常情况下: table表格中td过长: 加上样式之后&#…

Spring Boot 之注解@Component @ConfigurationProperties(prefix = sms)

从spring-boot开始,已经支持yml文件形式的配置,ConfigurationProperties的大致作用就是通过它可以把properties或者yml配置直接转成对象 例如: 配置文件: sms.urlXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX sms.appkeyXXXXXXXXXXXXXXXXXXXXXXXXXXXXX …

Java临时缓存API –测试早期草案评审RI

它被称为“ 永无止境的故事 ”。 JSR在11年半前开始运作,并于2001年3月6日通过了JSR 评审投票 。 如果您想知道要获得成千上万个低JSR编号需要什么,那就是秘密。 与迈克尔恩德(Michael Ende)的德国幻想小说不同,这不是…

Android几秒后自动关闭dialog

代码改变世界 Android几秒后自动关闭dialog AlertDialog.Builder builder new AlertDialog.Builder(v.getContext());builder.setTitle("发送成功!");builder.setMessage("2秒后自动关闭!");builder.setCancelable(true);final Ale…

如何获取注解中的值_如何在运行时利用注解信息

注解( annontation )是 Java 1.5 之后引入的一个为程序添加元数据的功能。注解本身并不是魔法,只是在代码里添加了描述代码自身的信息,至于如何理解和使用这些信息,则需要专门的解析代码来负责。本文首先介绍注解的基本…

mysql5.7运行按钮_MySQL 5.7.* 启动问题

mysql-5.7.10-winx64启动 mysqld.exe,报错:mysqld: Could not create or access the registry key needed for the MySQL applicationto log to the Windows EventLog. Run the application with sufficientprivileges once to create the key, add the …

控制元素的div属性

1、需求分析 改变元素的宽、高、颜色、显示、重置等属性。 2、技术分析 基础的css、html、js 3、详细分析 如图&#xff0c;单击按钮&#xff0c;改变元素属性: 3.1 HTML部分 根据视图不难发现&#xff0c;内容分两大不分:按钮栏和效果图&#xff0c;所以设置两个div。 <…

使用JMeter和Yourkit进行REST / HTTP服务的性能分析

我的上一篇文章描述了如何使用JMeter完成异步REST / HTTP服务的压力测试或负载测试。 但是&#xff0c;运行这样的测试通常表明被测系统不能很好地应对不断增加的负载。 现在的问题是如何找到瓶颈&#xff1f; 深入研究代码以检测可疑部分可能是另一种选择。 但是考虑到潜在的…

EasyUI 加载时需要显示和隐藏 panel(面板)内容破版问题

1.当页面加载的完成时,如果面板中的内容是未加载的如果把他的状态从隐藏变为显示会导致破版,页面信息显示不全 2.这时需要刷新面板$(#id).panel(open).panel(refresh); 3.它就会重新加载转载于:https://www.cnblogs.com/eagle-xie/p/6892706.html

java中间件_90%的Java程序员,都扛不住这波消息中间件的面试四连炮!

概述大家平时也有用到一些消息中间件(MQ)&#xff0c;但是对其理解可能仅停留在会使用API能实现生产消息、消费消息就完事了。对MQ更加深入的问题&#xff0c;可能很多人没怎么思考过。比如&#xff0c;你跳槽面试时&#xff0c;如果面试官看到你简历上写了&#xff0c;熟练掌握…

python 取array并集_Python内置数据结构原理与性能简易分析

ins ngladc文末左下方阅读原文指向了本人博客链接&#xff0c;不含广告。参考资料中的相关链接&#xff0c;可以在博客文章的最下方获取。推荐苹果手机用户使用浅色模式观看。前言 对于一些算法题&#xff0c;可以使用Python自带的内置函数解决。但很多时候用就用了&#xff0c…

ae合成复制脚本_稀缺资源—这几个AE脚本使用频率很高,赶紧收藏吧!

「第442期」毫无疑问&#xff0c;AE已经成为目前制作短视频比较主流的软件&#xff0c;效果的多样化深受很多创作者的喜爱。随着对软件的熟悉&#xff0c;越发觉得AE主要是基于多图层控制的软件。如果制作一些简单的效果&#xff0c;几个图层几个滤镜就可以搞定&#xff0c;但如…

android activity and fragment活动周期

1.状态 /* 每个活动一共有四种状态 *&#xff1a;1。运行状态&#xff0c;就是栈顶的那个 * 2。暂停状态&#xff1a;就是不处于栈顶&#xff0c;但是依然可见&#xff0c;比如对话框下面的界面 * 3。停止状态&#xff1a;不处于栈顶&#xff0c;并且不可见 * 4。销毁状态 * */…

html css基础知识

1 这是自己学习html时候做的一些记录&#xff0c;供大家参考 <!--2 块和内联3 块元素:独占一行的元素4 div p h ul5 div没有任何语义&#xff0c;就是一个纯粹的快元素6 就是为了方便布局7 …

番石榴的ListenableFuture

Guava中的ListenableFuture试图为Future对象定义一致的API&#xff0c;以注册完成回调。 通过在Future完成时添加回调的功能&#xff0c;我们可以异步有效地响应传入的事件。 如果您的应用程序与许多将来的对象高度并发&#xff0c;我强烈建议您尽可能使用ListenableFuture 。 …

程序员的幸福感和颈椎病

脖子一直疼&#xff01; 去医院检查&#xff0c;拍片子的医生在造影室里冲我喊&#xff1a; “小伙子&#xff0c;你多大年纪啦&#xff1f;” 我说&#xff1a;“我三十来岁&#xff0c;咋啦” 医生说&#xff1a;“怎么这么年轻就得这种病啊&#xff01;” 我当时腿就有点软&…

python实现词语相似度计算分析_相似度计算的方法及Python实现

现实生活中&#xff0c;我们经常提到距离这个词&#xff0c;本文谈的相似度就是基于距离定义的&#xff0c;当两个向量之间的距离特别小时&#xff0c;就说这俩个向量相似度高&#xff0c;反之相似度不高。所以&#xff0c;衡量相似度的指标就是距离度量。经常使用的相似度计算…

poll函数_I/O复用 - 三组I/O复用函数的比较

在之前的文章中 I/O复用 - epoll 和 I/O复用 - select&poll 中我们讨论了三组I/O复用的系统调用&#xff0c;这3组系统调用都能同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间&#xff0c;直到一个或多个文件描述符上有事件发生时返回&#xff0c;返回值是…

HTML适应手机浏览器宽度

在网页的<head>中增加以上这句话&#xff0c;可以让网页的宽度自动适应手机屏幕的宽度: <meta name"viewport" content"widthdevice-width, initial-scale1.0, minimum-scale0.5, maximum-scale2.0, user-scalableyes" /> <meta name&q…

css3画图那些事(三角形、圆形、梯形等)

闲来无事&#xff0c;写写图形。当时巩固一下css3吧.。前端小白&#xff0c;写的不好还请前辈多指教。 三角形 { width: 0;height: 0;border-bottom: 140px solid red ;border-right: 70px solid transparent;border-left: 70px solid transparent; } 圆形 {width: 0px;height…