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
查询,逻辑查询处理阶段顺序为:
-
来自
开启
外层
在哪里
分组依据
立方体 |汇总
有
选择
不同
订购人
顶部
INSERT
、UPDATE
和 DELETE
的顺序是什么?
【问题讨论】:
还是和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 的“查询”或“命令”?