2013年5月23日 星期四

[MySQL] 利用 LOCK TABLES 建立 Critical Section

開發MultiCore的核心,有一個重要的任務,就是確保資料的一致性,不管撰寫系統程式的,還是要網路程式,都需要考慮到這個問題。而MySQL提供一個叫LOCK TABLES的語法,可以用來建立Critical Section。

  • 語法
  • LOCK TABLES
    tbl_name [[AS] alias] lock_type
    [, tbl_name [[AS] alias] lock_type] ...

    lock_type:
    READ [LOCAL]
    | [LOW_PRIORITY] WRITE

    UNLOCK TABLES
    READ
    允許多個Session同時取得READ LOCK,但不可寫入,必須等到所有session都釋放READ LOCK才可寫入。

    WRITE
    此Option就像Semphore一樣,同時只有一個Session能使用這個Table(不論讀或寫),必須等到此Session釋放WRITE LOCK,其他Session才可使用。如果Session的網路斷線,LOCK也會自動歸還。

  • 範例
  • LOCK TABLES test WRITE;
    SELECT * FROM test;
    INSERT INTO test (c1, c2) values ('OK','KO');
    UNLOCK TABLES;

    Note : 若在Linux環境,可以開多個Terminal,連到MySQL做測試。

    沒有留言:

    張貼留言