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