推薦答案
在 MySQL 中,s 鎖是共享鎖(Shared Lock),x 鎖是排他鎖(Exclusive Lock)。
共享鎖(s 鎖):共享鎖允許多個事務同時讀取同一份數據,但是不允許對數據進行修改。當一個事務獲得了共享鎖后,其他事務也可以獲得相同的共享鎖,但是如果有事務要獲得排他鎖,則必須等待所有共享鎖都被釋放。
排他鎖(x 鎖):排他鎖不僅禁止其他事務對數據進行修改,也禁止其他事務讀取該數據。只有在當前事務釋放鎖之后,其他事務才能再次獲得該數據的鎖。一個事務獲得了排他鎖后,其他事務不能再獲得共享鎖或排他鎖,必須等待當前事務釋放鎖。
通常情況下,s 鎖用于讀取數據,x 鎖用于修改數據。在 MySQL 中,如果一個事務要修改一條數據,它必須先獲得該數據的 x 鎖,然后才能進行修改操作。而如果一個事務要讀取一條數據,它可以先獲得該數據的 s 鎖,然后進行讀取操作。在讀取操作完成后,s 鎖就被自動釋放了。
其他答案
-
S鎖允許多個事務讀取同一行數據,但不允許進行修改。X鎖只允許一個事務對一行數據進行修改,其他事務不能讀取或修改該行數據。S鎖和X鎖之間互斥,即存在X鎖時不能獲取S鎖,存在S鎖時不能獲取X鎖。S鎖的并發性更高,但不適用于寫操作;X鎖的并發性較低,但適用于寫操作。
-
主要區別在于對于資源的訪問權限不同。s鎖適用于并發讀取數據的場景,因為不同的事務可以同時獲取s鎖并讀取數據,不會產生互斥的情況,這樣可以提高并發讀取的效率。x鎖適用于修改或刪除數據的場景,因為在執行修改或刪除操作時,需要獨占該資源,避免其他事務對該資源進行讀取或修改。