簡單總結一下行鎖和表鎖。併發
使用行鎖或表鎖都是使用的悲觀鎖:SELECT ...FOR UPDATE。 當查詢有明確的主鍵時使用的是行鎖;查詢無明確主鍵時使用表鎖。 注意要使用InnoDB引擎。 銀行、庫存中會用到,這裏以商品庫存爲例。product表中,id爲主鍵,商品名稱爲name。code
1. 明確指定主鍵,而且有結果集,Row_Level Lock, 行鎖。 如:SELECT * FROM product WHERE id='5' FOR UPDATE; 2. 明確指定主鍵,而且無結果集,無Lock,不會上鎖。 如:SELECT * FROM product WHERE id='-100' FOR UPDATE; 3. 無主鍵 Table-Level Locl,會鎖表。 如:SELECT * FROM product WHERE name='xiaomi' FOR UPDATE; 4. 主鍵不明確,Table-Level Lock,會鎖表。 如:SELECT * FROM product WHERE id <> '5' FOR UPDATE; 如:SELECT * FROM product WHERE id LIKE '5' FOR UPDATE;