MySQL的間隙鎖(Gap Lock)是用于防止并發事務插入相同的間隙數據,從而保證數據的一致性。間隙鎖的觸發條件有以下幾種情況:
在可重復讀事務隔離級別下,當一個事務在一個間隙上持有了共享鎖或排他鎖時,其他事務不能在該間隙內插入新的數據。換句話說,如果一個事務在一個間隙上持有了共享鎖或排他鎖,并且這個間隙之前和之后沒有其他已存在的數據,那么其他事務就不能在這個間隙內插入新的數據。
在可重復讀事務隔離級別下,當一個事務在某個間隙上持有了共享鎖時,其他事務不能在該間隙內插入新的數據。換句話說,如果一個事務在一個間隙上持有了共享鎖,并且這個間隙之前和之后沒有其他已存在的數據,那么其他事務就不能在這個間隙內插入新的數據。
在可重復讀事務隔離級別下,當一個事務在某個間隙上持有了排他鎖時,其他事務不能在該間隙內插入新的數據,并且其他事務也不能在間隙之前和之后插入新的數據。換句話說,如果一個事務在一個間隙上持有了排他鎖,并且這個間隙之前和之后沒有其他已存在的數據,那么其他事務就不能在這個間隙內插入新的數據,并且也不能在間隙之前和之后插入新的數據。
需要注意的是,間隙鎖只會在可重復讀事務隔離級別下起作用,而在讀提交事務隔離級別下是沒有間隙鎖的。