開發(fā)人員為什么必須要了解數據庫鎖詳解-創(chuàng)新互聯

1.鎖?

創(chuàng)新互聯公司是一家集網站建設,銅陵企業(yè)網站建設,銅陵品牌網站建設,網站定制,銅陵網站建設報價,網絡營銷,網絡優(yōu)化,銅陵網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。

1.1何為鎖


鎖在現實中的意義為:封閉的器物,以鑰匙或暗碼開啟。在計算機中的鎖一般用來管理對共享資源的并發(fā)訪問,比如我們java同學熟悉的Lock,synchronized等都是我們常見的鎖。當然在我們的數據庫中也有鎖用來控制資源的并發(fā)訪問,這也是數據庫和文件系統的區(qū)別之一。

1.2為什么要懂數據庫鎖?


通常來說對于一般的開發(fā)人員,在使用數據庫的時候一般懂點DQL(select),DML(insert,update,delete)就夠了。

小明是一個剛剛畢業(yè)在互聯網公司工作的Java開發(fā)工程師,平常的工作就是完成PM的需求,當然在完成需求的同時肯定逃脫不了spring,springmvc,mybatis的那一套框架,所以一般來說sql還是自己手寫,遇到比較復雜的sql會從網上去百度一下。對于一些比較重要操作,比如交易啊這些,小明會用spring的事務來對數據庫的事務進行管理,由于數據量比較小目前還涉及不了分布式事務。

前幾個月小明過得都還風調雨順,知道有一天,小明接了一個需求,商家有個配置項,叫優(yōu)惠配置項,可以配置買一送一,買一送二等等規(guī)則,當然這些配置是批量傳輸給后端的,這樣就有個問題每個規(guī)則都得去匹配他到底是刪除還是添加還是修改,這樣后端邏輯就比較麻煩,聰明的小明想到了一個辦法,直接刪除這個商家的配置,然后全部添加進去。小明馬上開發(fā)完畢,成功上線。

開始上線沒什么毛病,但是日志經常會出現一些mysql-insert-deadlock異常。由于小明經驗比較淺,對于這類型的問題第一次遇見,于是去問了他們組的老司機-大紅,大紅一看見這個問題,然后看了他的代碼之后,輸出了幾個命令看了幾個日志,馬上定位了問題,告訴了小明:這是因為delete的時候會加間隙鎖,但是間隙鎖之間卻可以兼容,但是插入新的數據的時候就會因為插入意向鎖會被間隙鎖阻塞,導致雙方被資源被互占,導致死鎖。小明聽了之后似懂非懂,由于大紅的事情比較多,不方便一直麻煩大紅,所以決定自己下來自己想。下班過后,小明回想大紅說的話,什么是間隙鎖,什么是插入意向鎖,看來作為開發(fā)者對數據庫不應該只會寫SQL啊,不然遇到一些疑難雜癥完全沒法解決啊。想完,于是小明就踏上了學習Mysql鎖這條不歸之路。

2.InnoDB


2.1mysql體系架構


小明沒有著急去了解鎖這方面的知識,他首先先了解了下Mysql體系架構:

可以發(fā)現Mysql由連接池組件、管理服務和工具組件、sql接口組件、查詢分析器組件、優(yōu)化器組件、 緩沖組件、插件式存儲引擎、物理文件組成。

小明發(fā)現在mysql中存儲引擎是以插件的方式提供的,在Mysql中有多種存儲引擎,每個存儲引擎都有自己的特點。隨后小明在命令行中打出了:

show engines \G;

當前文章:開發(fā)人員為什么必須要了解數據庫鎖詳解-創(chuàng)新互聯
轉載注明:http://muchs.cn/article40/dchdeo.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站收錄品牌網站設計、自適應網站、網頁設計公司、網站導航、品牌網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

網站建設網站維護公司