innodb表鎖 行級鎖為什么鎖住了整個表?
行級鎖為什么鎖住了整個表?對于寫,MySQL使用以下表鎖定方法:如果表上沒有鎖,請在表上設置寫鎖。否則,將鎖請求放入寫鎖隊列。對于讀,MySQL使用以下鎖定方法:如果表上沒有寫鎖,請在表上設置讀鎖。否
行級鎖為什么鎖住了整個表?
對于寫,MySQL使用以下表鎖定方法:
如果表上沒有鎖,請在表上設置寫鎖。否則,將鎖請求放入寫鎖隊列。
對于讀,MySQL使用以下鎖定方法:
如果表上沒有寫鎖,請在表上設置讀鎖。否則,將鎖請求放入讀鎖隊列。
釋放鎖時,寫鎖隊列中的線程可以使用鎖,然后是讀鎖隊列中的線程。這意味著,如果一個表上有許多更新,select語句將等待,直到不再有更新為止。
MySQL的不同存儲引擎代表不同的鎖定機制。例如MyISAM和內(nèi)存存儲引擎采用表級鎖;BDB存儲引擎采用頁級鎖,但也支持表級鎖;InnoDB存儲引擎支持行級鎖也支持表級鎖,但默認使用行級鎖。