SQL查询中INSERT、DELETE、UPDATE的逻辑查询处理阶段

Posted

技术标签:

【中文标题】SQL查询中INSERT、DELETE、UPDATE的逻辑查询处理阶段【英文标题】:Logical query processing phase of INSERT, DELETE, and UPDATE in SQL queries 【发布时间】:2016-02-29 05:11:32 【问题描述】:

我很好奇 SQL 查询的逻辑查询处理阶段。

对于SELECT查询,逻辑查询处理阶段顺序为:

    来自 开启 外层 在哪里 分组依据 立方体 |汇总 有 选择 不同 订购人 顶部

INSERTUPDATEDELETE 的顺序是什么?

【问题讨论】:

还是和SELECT一样。在执行任何操作之前首先确定受影响的行 所以是关于 sql-server 还是 mysql 关于 sql-server 取决于“逻辑查询处理阶段”的含义。如果您查看查询计划,您会看到 SORTS (ORDER BY) 早于实际计划中的联接 【参考方案1】:

如果您想知道实际的查询处理顺序是什么,请查看执行计划。这将逐步告诉您 SQL Server 正在做什么。

https://technet.microsoft.com/en-us/library/ms178071(v=sql.105).aspx

【讨论】:

谢谢你.. 乔纳森·艾伦先生【参考方案2】:

SQL Server:Source

    来自 开启 加入 在哪里 分组依据 使用多维数据集或使用汇总 有 选择 不同 订购人 顶部

【讨论】:

嗨迈克尔..谢谢你的回答。你能解释一下插入、更新和删除查询吗.. @Sruthy 我的理解是没有区别。 Select/Update/Insert/Delete 的查询计划与 final 运算符没有区别。不过,我正在努力寻找资源来支持我的信念。我欢迎任何有相反证据的人。【参考方案3】:

我有同样的问题,但在互联网上找不到答案。 所以我试图从逻辑上得出答案。 这是一个简单的 UPDATE 语句(表的别名为 a):

UPDATE tbl_employees a
  SET a.Name = 'Anna'
  WHERE a.Id = 122;

显然,无论是SET还是WHERE都可以在识别表之前执行,所以UPDATE必须是第一个逻辑步骤。证明:别名 a 正在工作(在 Microsoft Access 中)。

在应用 SET 语句之前,需要知道应用它的记录。所以 WHERE 必须作为第二个逻辑步骤(省略 WHERE 会改变表中的所有记录)

在 WHERE 过滤的记录集上应用 SET 语句必须是第三步。

总结一下,逻辑处理顺序一定是:

    更新(~相当于 FROM) 在哪里 SET(~相当于 SELECT)

任何其他顺序似乎都很荒谬(你能假设任何其他顺序吗?)。

再一次,这是我自己的逻辑推导。我不确定。我会申请任何指向严肃互联网资源的链接。

【讨论】:

以上是关于SQL查询中INSERT、DELETE、UPDATE的逻辑查询处理阶段的主要内容,如果未能解决你的问题,请参考以下文章

名词解释

SQL 命名法:INSERT/UPDATE/DELETE 的“查询”或“命令”?

SQL:with 查询

SQL系列—— insert update delete

SQL注入之初窥insert,update,delete注入

SQL Inject漏洞手工测试:基于报错的信息获取(select/delete/update/insert)