天天看點

FLUSH TABLES WITH READ LOCK 和 LOCK TABLES

 今天在解決資料庫同步異常的時候用到了flush tables with read lock 這個指令,于是順便就學習了下鎖表的相關知識。

1.FLUSH TABLES WITH READ LOCK

這個指令是全局讀鎖定,執行了指令之後所有庫所有表都被鎖定隻讀。一般都是用在資料庫聯機備份,這個時候資料庫的寫操作将被阻塞,讀操作順利進行。

解鎖的語句也是unlock tables。

2.LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}

這個指令是表級别的鎖定,可以定制鎖定某一個表。例如: lock  tables test read; 不影響其他表的寫操作。

解鎖語句也是unlock tables。

這兩個語句在執行的時候都需要注意個特點,就是 隐式送出的語句。在退出mysql終端的時候都會隐式的執行unlock tables。也就是如果要讓表鎖定生效就必須一直保持對話。

P.S.  MYSQL的read lock和wirte lock

read-lock:  允許其他并發的讀請求,但阻塞寫請求,即可以同時讀,但不允許任何寫。也叫共享鎖

write-lock: 不允許其他并發的讀和寫請求,是排他的(exclusive)。也叫獨占鎖

繼續閱讀