当前位置: 首页 > 面试题库 >

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

卓正业
2023-03-14
问题内容

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变得非常重要。如果您认为这个问题需要进一步完善,请解释一下,我们非常乐意为您解答。


问题答案:

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

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



 类似资料:
  • 问题内容: 在python中,我编写了此函数来告诉自己如何在python中工作: 然后我用 这是我的Python解释器打印的输出: 为什么即使我先将a2输入到函数中,for循环也还是在a2之前打印a3值? 问题答案: 是一本字典。字典是无序的- 简而言之,未指定顺序和实现细节。深入了解之下,该顺序将根据项目的哈希值,插入顺序等而发生巨大变化,因此最好不要依赖与之相关的任何内容。

  • 问题内容: 在围棋编程语言规范说: 3.未指定地图的迭代顺序。[…] 这是可以预期的,因为地图类型可以实现为哈希表,搜索树或其他某种数据结构。但是,如何在Go中实现呢? 换句话说,是什么决定了键的迭代顺序 我开始怀疑这个之后,我看到了地图键显然 也 有一定的迭代顺序。像这样的程序 在我的机器上打印以下内容: 无论 插入顺序如何。 带有映射的等效程序也以随机顺序打印键,但是这里的键顺序 取决于 插入

  • 问题内容: 这不是完整/正确的MySQL查询伪代码: http://dev.mysql.com/doc/refman/5.0/en/select.html指出:如果将FOR UPDATE与使用页面或行锁的存储引擎一起使用,则查询所检查的行将被写锁,直到当前交易结束 是这里只有被MySQL锁定返回的一条记录还是必须扫描以查找单个记录的所有记录? 问题答案: 我们为什么不尝试一下呢? 设置数据库 现在

  • 问题内容: 在设计模式手册中,具有双重检查锁定的单例模式已实现如下: 我不明白为什么要使用它。使用不会 违反使用双重检查锁定(即性能)的目的吗? 问题答案: 真正的问题是可能在完成构造之前为其分配存储空间。将看到该作业并尝试使用它。由于使用的是的部分构造版本,因此导致失败。

  • 在JavaServlet环境中,哪些因素是同时用户数量的瓶颈。 服务器每个端口允许的HTTP连接数 还有其他因素吗? 编辑:为了不考虑业务逻辑,假设只有一个servlet在Log4j上打印一行。 我的Tomcat服务器能同时处理6000个HTTP连接吗?为什么不呢(文件处理?每个请求的CPU时间?) 为每个连接生成的垃圾量是否会产生影响?例如,如果Tomcat为每个HTTP连接创建并留下20KB的

  • 问题内容: 我有一个由不同线程同时读取的表。 每个线程必须选择100行,在每行上执行一些任务(与数据库无关),然后它们必须从表中删除选定的行。 使用此查询选择行: 我的问题是:如何忽略(或跳过)以前使用MySQL中的select语句锁定的行? 问题答案: 我通常创建一个默认为NULL的process_id列,然后让每个线程使用唯一的标识符来执行以下操作: 这样可以确保每个线程从表中选择唯一的行集。