今天在解決資料庫同步異常的時候用到了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)。也叫獨占鎖