在这两个语句的关系数据库中是否可能出现死锁?我正在尝试简化我的问题和示例 - 请假设这些选择,我认为通常只需要可共享的读锁定,现在需要独占的读锁:
Concurrent Connection 1:
SELECT {...}
FROM A
JOIN B ON {...}
Concurrent Connection 2:
SELECT {...}
FROM B
JOIN A ON {...}
Run Code Online (Sandbox Code Playgroud)
也就是说,连接的顺序是否重要?SQL中的单个语句是原子的吗?首先锁定A然后在第一个语句中B和B先锁定然后在第二个语句中锁定A?
我想不是 - 我的直觉告诉我,这样的两个单一陈述不会陷入僵局,无论多么复杂.我相信一个声明作为一个整体被分析,并且需要锁定的资源使用一些确定性的全局顺序(即按字母顺序)被锁定.但我需要的不仅仅是一种直觉 - 我无法想出一种证明它的方法,而且我无法找到它.
我对MS SQL 2005很感兴趣,但我不认为这个问题是特定于实现的.
其次:由于它与MS SQL有关,我还想知道Common Table Expressions也有这种保证--CTE主要是语法上的好处(+递归),并由引擎整合到传统的单个语句中.