You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何操作CTE执行DELETE会导致Employee主表数据被删除?

问题:对CTE执行DELETE为何删除了Employee主表数据

相关截图

  • Employee表初始数据:
    Employee表数据
  • 执行的操作语句:
    操作语句
  • 执行结果:
    执行结果

我无法理解为何Employee表的数据会被删除,明明是对CTE执行DELETE操作而非直接操作主表,恳请技术人员帮忙解答。


原因解析

这是因为CTE(公共表表达式)本质上是与底层表绑定的逻辑视图,并非独立的数据副本。当你对CTE执行DELETE操作时,数据库引擎会把这个操作直接映射到底层的Employee物理表——只要CTE是直接基于主表定义、没有使用聚合、分组、去重等会生成不可更新结果集的操作,对CTE的修改就会直接作用于源表。

从你提供的操作语句来看,你的CTE只是简单筛选了Employee表中Salary > 5000的行,属于可更新的CTE。这种情况下,DELETE操作会被数据库解析为:删除Employee表中满足Salary > 5000的记录,自然会导致主表数据被删除。

如果想要避免修改主表,你需要将CTE的数据生成临时表或物理副本,比如执行SELECT ... INTO #TempTable FROM Employee WHERE Salary > 5000,再对临时表进行操作。

内容的提问来源于stack exchange,提问作者sourav moha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:27:36