今天在解決數據庫同步異常的時候用到了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)。也叫獨占鎖
新聞熱點
疑難解答