欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql 寫鎖會等待讀鎖

劉柏宏2年前10瀏覽0評論

MySQL 是一款非常流行的開源數據庫管理系統,在多用戶操作數據的情況下,常常會出現讀寫沖突的情況。在 MySQL 中,讀和寫操作的鎖被分為兩種,分別是讀鎖和寫鎖。其中,讀鎖可以被多個客戶端同時獲取,而寫鎖只能被一個客戶端獨占。

當一個客戶端獲取了寫鎖之后,其他客戶端如果想要進行讀或寫操作,就必須等待當前寫鎖釋放。如果此時有其他客戶端已經獲取到了讀鎖,那么也會等待當前寫鎖釋放。這就是因為在 MySQL 中,寫鎖會等待讀鎖,但是讀鎖不會等待寫鎖。

SET autocommit = 0;
START TRANSACTION;
SELECT * FROM myTable WHERE id = 1 FOR UPDATE;
-- 這里獲取了id為1的行的寫鎖
UPDATE myTable SET name='new_name' WHERE id = 1;
-- 進行了寫操作
COMMIT;

在上面的代碼中,我們使用了 SELECT ... FOR UPDATE 關鍵字獲取了 id 為 1 的行的寫鎖。這意味著其他客戶端無論是讀操作還是寫操作,都必須等待我們對這一行的寫鎖釋放。

當然,如果我們使用了 SELECT ... LOCK IN SHARE MODE 關鍵字,那么就是獲取了 id 為 1 的行的讀鎖。此時其他客戶端可以繼續獲取該行的讀鎖,但是不能進行寫操作,只有在當前客戶端的讀鎖釋放之后,其他客戶端才能進行寫操作。

SET autocommit = 0;
START TRANSACTION;
SELECT * FROM myTable WHERE id = 1 LOCK IN SHARE MODE;
-- 這里獲取了id為1的行的讀鎖
COMMIT;

結論:在 MySQL 中,寫操作會等待讀鎖的釋放,讀操作不會等待寫鎖的釋放。