一尘不染

什么决定了多表查询的锁定顺序?

sql

SQL标准是否为多表查询指定锁定顺序?

例如,给定:

SELECT department.id FROM permissions, terminals, departments WHERE department.id = ? AND terminal.id = ? AND permissions.parent = department.id AND permissions.child = terminals.id;

  1. SQL标准是保证锁定顺序还是由(特定于实现的)执行计划确定?
  2. 有没有办法保证锁定顺序?
  3. 如果没有办法保证锁定顺序,我们应该如何防止死锁?

更新
:在未解释您的推理之前,请不要投票结束该问题。就我而言,这是一个编程问题,这使Stackoverflow变得非常重要。如果您认为这个问题需要进一步完善,请解释一下,我们非常乐意为您解答。


阅读 122

收藏
2021-03-10

共1个答案

一尘不染

根据http://codingdict.com/questions/200019锁定顺序由特定于实现的执行顺序确定。答案进一步说,没有确定的方法可以防止死锁。在命令式编程中,我们可以通过以相同的顺序获取锁来防止死锁,但是似乎在声明性系统中,当检测到死锁时,我们必须通过重试操作来解决死锁。

此外,我认为,由于数据库执行计划会在其生命周期内发生变化,因此从技术上讲,不可能防止死锁。

2021-03-10