1. 程式人生 > 實用技巧 >JSX繫結事件

JSX繫結事件

一、鎖的定義

  讀鎖(共享鎖):是多事務可以併發讀取資料的鎖,但任何事務都被阻塞等待對該資料進行寫操作和加寫鎖,直到已釋放所有共享鎖。

  寫鎖(排他鎖):是指只有當前事務才可以進行讀寫操作的鎖,則其他事務都被阻塞等待對該資料進行讀寫操作和加讀寫鎖,直到已釋放所有排他鎖。

 

二、鎖特點 

  •   表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低。
  •   行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。
  •   頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般。

 

三、MyISAM表鎖

  MyISAM 儲存引擎只支援表鎖,MySQL 的表級鎖有兩種模式:表共享讀鎖(Table Read Lock)和表獨佔寫鎖(Table Write Lock)。

     讀操作:一旦資料表被加上讀鎖,當一個請求在讀資料時,其他請求也可以讀,但是不能寫,因為一旦另外一個執行緒寫了資料,就會導致當前執行緒讀取到的資料不是最新的了。這就是不可重複讀現象。

  寫操作:一旦資料表被加上寫鎖,當一個請求在寫資料時,其他請求不能執行任何操作,因為在當前事務提交之前,其他的請求無法看到本次修改的內容。這有可能產生髒讀、不可重複讀和幻讀。

  讀鎖和寫鎖都是阻塞鎖:例如A對資料表增加了寫鎖,如果B請求對資料表加寫鎖,此時B的加鎖請求會一直處於阻塞狀態,直到A釋放了對錶的鎖,B才加鎖成功獲取到結果。

 

四、表鎖的加鎖/解鎖方式

  MyISAM 在執行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執行更新操作 (UPDATEDELETEINSERT 等)前,會自動給涉及的表加寫鎖;因此,使用者一般不需要直接用LOCK TABLE命令給MyISAM表顯式加鎖。

  鎖表:lock tables tbl_name read | wrinte,tbl_name1 read | wrinte,

  解鎖表:unlock table

  查看錶加鎖狀態:show open tables like '%tbl_name%';

  

 

   注意:當某事務在執行 LOCK TABLE

 後,只能訪問加鎖的這些表,該事務不能訪問未加鎖的表,其他事務可以訪問未加鎖的表;

  此外,Myisam的讀寫鎖排程是寫優先,因此Myisam不適合做寫為主表的引擎,因為寫鎖後其他執行緒不能做任何操作,大量更新會使查詢很難得到鎖,從而造成永遠堵塞。

 

五、Innodb行鎖

   行級鎖是Mysql中鎖定粒度最細的一種鎖,表示只針對當前操作的行進行加鎖。行級鎖能大大減少資料庫操作的衝突。其加鎖粒度最小,但加鎖的開銷也最大。有可能會出現死鎖的情況。