读锁和写锁
回想鎖協議,對什么操作加什么鎖是一個問題,加鎖加到什么時候有是一個問題。鎖協議里常常會看到“加鎖直到事務結束”的煩心字樣。而在InnoDB中,select,insert,update,delete等語句執行時都會自動加解鎖。select的鎖一般執行完就釋放了,修改操作的X鎖會持有到事務結束,效率高很多。
mysql也給用戶提供了加鎖的機會,只要在sql后加LOCK IN SHARE MODE 或FOR UPDATE
共享鎖(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE
排他鎖(X):SELECT * FROM table_name WHERE ... FOR UPDATE
值得注意的是,自己加的鎖沒有釋放鎖的語句,所以鎖會持有到事務結束。
?
總結
- 上一篇: InnoDB的行锁和表锁
- 下一篇: 谈谈对jvm的理解