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.pswp.cn/news/370623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370623.shtml
英文地址,請注明出處:http://en.pswp.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…