2
大家都知道,如果一個過程進行是否有處理SQL IN列表的已定義順序?
SELECT id FROM dead WHERE id = 'A' FOR UPDATE;
SELECT id FROM dead WHERE id = 'B' FOR UPDATE;
,另一個去
SELECT id FROM dead WHERE id = 'B' FOR UPDATE;
SELECT id FROM dead WHERE id = 'A' FOR UPDATE;
,那你就有僵局。 我寧願認爲
SELECT id FROM dead WHERE id IN ('A', 'B') FOR UPDATE;
就會死鎖對
SELECT id FROM dead WHERE id IN ('B', 'A') FOR UPDATE;
但鎖定定義的IN列表的順序 - 其中那些會死鎖對我的單選過程?
更確切地說,如果我有字母順序的鎖定順序約定,那麼我可以安全地將鎖A和鎖B合併到一個SQL語句中(考慮到緩慢的網絡可能會減少網絡訪問數據庫的次數)。
您正在使用哪些DBMS?甲骨文? Postgres的? –
如果有定義的訂單,它*將*是針對特定產品的,而且它不是SQL標準中的*,所以我們肯定需要知道您正在使用哪種產品。 –
我希望我的代碼能夠在多個數據庫上工作,所以我認爲您告訴它不在標準中,因此我無法在此上下文中使用IN列表。如果你能告訴我Oracle承諾支持一個訂單而不改變它,那麼我會考慮特定數據庫的特殊情況代碼。 – user3012850