国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql鎖表的原由有哪些

2024-07-24 12:33:38
字體:
來源:轉載
供稿:網友
  mysql鎖表的原因有哪些
 
  鎖是計算機協調多個進程或線程并發訪問某一資源的機制。
 
  在數據庫中,除傳統的計算資源(如CPU、RAM、I/O等)的爭用以外,數據也是一種供許多用戶共享的資源。
 
  如何保證數據并發訪問的一致性、有效性是所有數據庫必須解決的一個問題,鎖沖突也是影響數據庫并發訪問性能的一個重要因素。
 
  從這個角度來說,鎖對數據庫而言顯得尤其重要,也更加復雜。
 
  鎖表的原因
 
  1、鎖表發生在insert update 、delete 中
 
  2、鎖表的原理是 數據庫使用獨占式封鎖機制,當執行上面的語句時,對表進行鎖住,直到發生commite 或者 回滾 或者退出數據庫用戶
 
    第一、 A程序執行了對 tableA 的 insert ,并還未 commite時,B程序也對tableA 進行insert 則此時會發生資源正忙的異常 就是鎖表
 
    第二、鎖表常發生于并發而不是并行(并行時,一個線程操作數據庫時,另一個線程是不能操作數據庫的,cpu 和i/o 分配原則)
 
  3、減少鎖表的概率:
 
    減少insert 、update 、delete 語句執行 到 commite 之間的時間。
 
    具體點批量執行改為單個執行、優化sql自身的非執行速度 如果異常對事物進行回滾
 
  示例如下:
 
  使用 update
 
    假設kid 是表table 的 一個索引字段 且值不唯一:
 
    1):如果kid 有多個值為12的記錄那么:
 
      update table set name=’feie’ where kid=12;   #會鎖表
 
    2):如果kid有唯一的值為1的記錄那么:
 
      update table set name=’feie’ where kid=1;   #不會鎖
 
  總結:用索引字段做為條件進行修改時, 是否表鎖的取決于這個索引字段能否確定記錄唯一,當索引值對應記錄不唯一,會進行鎖表,相反則行鎖。
 
  使用 delete
 
    如果有兩個delete : kid1 與 kid2 是索引字段
 
    1):語句1 delete from table where kid1=1 and kid2=2;
 
    2):語句2 delete from table where kid1=1 and kid2=3;
 
        # 這樣的兩個delete 是不會鎖表的
 
    1):語句1 delete from table where kid1=1 and kid2=2;
 
    2):語句2 delete from table where kid1=1 ;
 
        # 這樣的兩個delete 會鎖表
 
  以上是“mysql鎖表的原因有哪些”這篇文章的所有內容,感謝各位的閱讀!

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 墨脱县| 延安市| 全椒县| 临颍县| 建水县| 民和| 万载县| 寻甸| 九龙县| 滨海县| 涞水县| 尤溪县| 邯郸县| 铜陵市| 乐东| 兴隆县| 海南省| 宁远县| 清丰县| 临猗县| 云安县| 溧水县| 荣成市| 抚顺县| 尚义县| 民县| 孟连| 哈巴河县| 怀仁县| 芮城县| 北京市| 华容县| 巴彦淖尔市| 广饶县| 肇州县| 揭西县| 修武县| 德保县| 延吉市| 湘潭县| 法库县|