MySQL是一種流行的關系型數據庫管理系統。當多個用戶嘗試同時訪問相同的數據行時,鎖等待可以發生。鎖等待時,MySQL將嘗試在鎖定表之前等待時間長度內獲取鎖定。若超時,則所有等待的進程將會被迫放棄對該數據行的操作,以便允許其他進程能夠訪問該數據行。
mysql>show variables like "%timeout%"; +----------------------------+----------+ | Variable_name | Value | +----------------------------+----------+ | connect_timeout | 10 | | deadlock_timeout_long | 50000000 | | deadlock_timeout_short | 10000 | | delayed_insert_timeout | 300 | | have_statement_timeout | YES | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 50 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 600 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 60 | | wait_timeout | 600 | +----------------------------+----------+ 15 rows in set (0.01 sec)
上述查詢結果中展示的是MySQL的一些超時參數的默認值。其中,wait_timeout參數會對鎖等待超時時間產生影響。該參數設置客戶端連接的空閑時間長度,如果該客戶端空閑時間超出了設定的值,則MySQL將自動斷開該連接。
mysql>set innodb_lock_wait_timeout=10; Query OK, 0 rows affected (0.00 sec) mysql>select * from test where id=1 for update; ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
以上代碼展示了如何手動設置表鎖等待超時時間。在查詢時使用了for update
鎖定,若鎖等待超過設定的超時時間,則MySQL將返回錯誤信息。
上一篇css相關視頻
下一篇css鼠標移動后圖標變大