回覆列表
  • 1 # 使用者199988044325

    如果兩個程式都向表中寫資料顯然會造成很大的麻煩,甚至會有意外情況發生。如果表正由一個程式寫入,同時進行讀取的另一個程式也會產生混亂的結果。  鎖定表的方法  防止客戶機的請求互相干擾或者伺服器與維護程式相互干擾的方法主要有多種。如果你關閉資料庫,就可以保證伺服器和myisamchk和isamchk之間沒有互動作用。但是停止伺服器的執行並不是一個好注意,因為這樣做會使得沒有故障的資料庫和表也不可用。本節主要討論的過程,是避免伺服器和myisamchk或isamchk之間的互動作用。實現這種功能的方法是對錶進行鎖定。  伺服器由兩種表的鎖定方法:  

    1.內部鎖定  內部鎖定可以避免客戶機的請求相互干擾——例如,避免客戶機的SELECT查詢被另一個客戶機的UPDATE查詢所幹擾。也可以利用內部鎖定機制防止伺服器在利用myisamchk或isamchk檢查或修復表時對錶的訪問。  語法:  鎖定表:LOCKTABLEStbl_name{READ|WRITE},[tbl_name{READ|WRITE},…]  解鎖表:UNLOCKTABLES  LOCKTABLES為當前執行緒鎖定表。UNLOCKTABLES釋放被當前執行緒持有的任何鎖。當執行緒發出另外一個LOCKTABLES時,或當伺服器的連線被關閉時,當前執行緒鎖定的所有表自動被解鎖。  如果一個執行緒獲得在一個表上的一個READ鎖,該執行緒(和所有其他執行緒)只能從表中讀。如果一個執行緒獲得一個表上的一個WRITE鎖,那麼只有持鎖的執行緒READ或WRITE表,其他執行緒被阻止。  每個執行緒等待(沒有超時)直到它獲得它請求的所有鎖。  WRITE鎖通常比READ鎖有更高的優先順序,以確保更改儘快被處理。這意味著,如果一個執行緒獲得READ鎖,並且然後另外一個執行緒請求一個WRITE鎖,隨後的READ鎖請求將等待直到WRITE執行緒得到了鎖並且釋放了它。  顯然對於檢查,你只需要獲得讀鎖。再者鍾情跨下,只能讀取表,但不能修改它,因此他也允許其它客戶機讀取表。對於修復,你必須獲得些所以防止任何客戶機在你對錶進行操作時修改它。  

    2.外部鎖定  伺服器還可以使用外部鎖定(檔案級鎖)來防止其它程式在伺服器使用表時修改檔案。通常,在表的檢查操作中伺服器將外部鎖定與myisamchk或isamchk作合使用。但是,外部鎖定在某些系統中是禁用的,因為他不能可靠的進行工作。對執行myisamchk或isamchk所選擇的過程取決於伺服器是否能使用外部鎖定。如果不使用,則必修使用內部鎖定協議。  如果伺服器用--skip-locking選項執行,則外部鎖定禁用。該選項在某些系統中是預設的,如Linux。可以透過執行mysqladminvariables命令確定伺服器是否能夠使用外部鎖定。檢查skip_locking變數的值並按以下方法進行:  ◆如果skip_locking為off,則外部鎖定有效您可以繼續並執行人和一個實用程式來檢查表。伺服器和實用程式將合作對錶進行訪問。但是,執行任何一個實用程式之前,應該使用mysqladminflush-tables。為了修復表,應該使用表的修復鎖定協議。  ◆如果skip_locaking為on,則禁用外部鎖定,所以在myisamchk或isamchk檢查修復表示伺服器並不知道,最好關閉伺服器。如果堅持是伺服器保持開啟狀態,月確保在您使用此表示沒有客戶機來訪問它。

  • 中秋節和大豐收的關聯?
  • 家庭醫生團隊中,健康管理師做哪些工作?