新闻详情

新闻详情

首页 / 资讯中心 / 详情

EdgeDB(Gel)DELETE 语句实战指南:从 Cheatsheet 出发掌握数据删除的两种范式

发布时间:2026/11/4 22:34:36来源:尧图网络
EdgeDB(Gel)DELETE 语句实战指南:从 Cheatsheet 出发掌握数据删除的两种范式
EdgeDBGelDELETE 语句实战指南从 Cheatsheet 出发掌握数据删除的两种范式【免费下载链接】edgedbGel supercharges Postgres with a modern data model, graph queries, Auth AI solutions, and much more.项目地址: https://gitcode.com/gh_mirrors/ed/edgedb本文基于 EdgeDB 官方 Cheatsheet 中的 Deleting data 一页展开系统讲解在 EdgeDBGel中删除对象的两种核心写法直接对类型集做filter删除以及通过反向链接backlink定位并删除。读完本文你将掌握delete语句的完整语法、filter/order by/offset/limit子句的语义、删除返回值的使用方式以及链接删除策略link deletion policy与级联删除的底层机制并能直接把这些模式应用到自己的 schema 中。从 Cheatsheet 说起两种删除范式原 Cheatsheetdocs/resources/cheatsheets/delete.rst以一组电影评论User、Movie、Reviewschema 为背景给出了两种删除某个用户所有评论的写法。其中用到的对象类型定义在 docs/resources/cheatsheets/objects.rst要点如下type User extending HasImage { required name: str { constraint exclusive; } } type Review { required body: str; required rating: int64 { constraint min_value(0); constraint max_value(5); } required flag: bool { default : False; } required author: User; required movie: Movie; required creation_time: datetime { default : datetime_current(); } }注意Review.author是required author: User即每条评论都有一条指向作者的多对一链接反之从User出发可以通过反向链接.author[is Review]找到该用户写过的全部评论。范式一直接按链接路径过滤删除第一种写法直接指定要删除的类型并通过链接路径过滤delete Review filter .author.name trouble2020要点在于filter子句里的路径表达式.author.nameEdgeQL 会自动沿Review - author - User.name解析筛出所有作者名为trouble2020的Review对象并删除。这符合直觉也是日常最常用的方式。范式二通过反向链接backlink删除Cheatsheet 给出的另一种方式利用了反向链接遍历delete ( select User filter .name troll2020 ).author[is Review]逐步拆解select User filter .name troll2020先找出目标用户.author[is Review]对该用户沿author链接的反方向做一次类型过滤遍历得到指向该用户的所有Review整个括号表达式是一个对象集合delete直接作用于这个集合。这里的[is Review]是类型过滤type filter保证反向遍历只保留Review类型避免把其它也指向该User的对象误纳入删除范围。这种写法在从一个对象出发删除其所有关联对象的场景中非常自然也常与update语句中的-一起用于先解除链接再删除的模式见下文链接删除策略。DELETE 语句的完整语法与语义Cheatsheet 只是速查完整的语句形式定义在 docs/reference/reference/edgeql/delete.rst[ with with-item [, ...] ] delete expr [ filter filter-expr ] [ order by order-expr [direction] [then ...] ] [ offset offset-expr ] [ limit limit-expr ] ;几个关键语义点with子句既可以声明模块别名也可以声明表达式别名供delete语句内部引用详见 docs/reference/edgeql/with.rst。整个delete expr ...语句是delete (select ...)的语法糖expr、filter、order by、offset、limit共同决定要删除的集合其成型方式与显式select完全一致。这解释了为什么 Cheatsheet 范式二能直接delete (select User ...).author[is Review]——括号里是一个合法的集合表达式。语句执行成功后返回被删除对象的集合。在 docs/reference/edgeql/delete.rst 中可以看到带全部子句的完整示例delete Hero filter .name ilike the % order by .name offset 10 limit 5;该示例先按名字模糊过滤再排序、跳过前 10 条、最多删除 5 条——相当于一次分批清理。删除与 select 的等价关系源码佐证delete即delete (select ...)的语法糖这一点在仓库测试 tests/test_edgeql_delete.py 的test_edgeql_delete_sugar_01第 378 行起中有直接验证DELETE DeleteTest FILTER .name[-1] ! 2 ORDER BY .name OFFSET 2 LIMIT 2; # should delete 4 and 5测试先插入 6 条名为sugar delete 1到sugar delete 6的记录然后执行带filter/order by/offset/limit的删除最后断言只剩sugar delete 1、sugar delete 2、sugar delete 3、sugar delete 6——即OFFSET 2 LIMIT 2精准删掉了排序后的第 4、5 条。这说明排序与分页子句确实作用于被删除集合的成型过程与select行为一致。同文件中还有test_edgeql_delete_returning_01到_05、test_edgeql_delete_union、test_edgeql_delete_multi_simultaneous_01等用例覆盖了删除返回值、并集删除、多对象同时删除等场景是深入学习delete行为的第一手材料。删除返回值数据永久消失前的最后一刻delete返回被删除对象的集合你可以把它继续交给select在数据被永久删除前取出其属性与链接with movie : (delete Movie filter .title Untitled) select movie {id, title};正如 docs/reference/edgeql/delete.rst 中所强调这是该数据在永久删除前最后一次可用的时机。常见的实用模式包括删除前把对象快照归档到审计表、统计本次删除了多少条、或把被删对象的 id 记录下来用于后续补偿逻辑。测试文件中的test_edgeql_delete_returning_*系列用例如test_edgeql_delete_returning_01tests/test_edgeql_delete.py 第 179 行专门验证了这种删除后立即 select的返回行为。链接删除策略为什么删除会被拒绝默认情况下你不能删除一个仍被其它对象链接引用的对象。例如db delete Hero filter .name Yelena Belova; ConstraintViolationError: deletion of default::Hero (af7076e0-3e98-11ec-abb3-b3435bbe7c7e) is prohibited by link target policy {}这个报错发生的原因是 Yelena 仍出现在《黑寡妇》电影的characters链接列表中。必须先解除这条链接再执行删除update Movie filter .title Black Widow set { characters - (select Hero filter .name Yelena Belova) }; delete Hero filter .name Yelena Belova;这与 Cheatsheet 范式二先取出反向链接集合再删除的思路互为补充范式二是直接对反向链接集合执行删除而这里先用-把链接从源对象上移除再删除目标对象。如果业务上允许删目标时自动断开链接可以在 schema 中把链接的删除策略改为on target delete allowtype Movie { required title: str { constraint exclusive }; required release_year: int64; multi characters: Person { on target delete allow; }; }删除策略的完整清单见 docs/reference/datamodel/links.rstref_datamodel_link_deletion一节。级联删除delete source 与 delete target链接的删除策略不仅限于禁止/放行默认策略禁止删除仍被引用的目标对象上述报错即源于此on target delete allow允许删除目标对象链接随之消失on target delete delete source删除目标对象时连带删除链接的源对象——这就是级联删除cascading delete的实现方式例如删除作者时同时删掉他写的所有评论on target delete restrict更加严格的限制。对应的还有on source delete相关策略。正如 docs/reference/edgeql/delete.rst 中的提醒级联删除能力强大使用时要格外谨慎一个delete可能波及一整条对象链。建议在投入生产前先在测试环境用delete的返回集合确认实际波及范围。总结与推荐阅读回到 Cheatsheet 的两行速查-- 范式一按链接路径过滤 delete Review filter .author.name trouble2020 -- 范式二反向链接 类型过滤 delete ( select User filter .name troll2020 ).author[is Review]两者结果等价但表达路径不同范式一从被删对象出发正向过滤范式二从根对象出发反向遍历。实际项目中前者适合按条件批量清理某类对象后者适合删除某对象的全部关联。如果希望进一步深入推荐按以下顺序阅读仓库内材料docs/resources/cheatsheets/objects.rst本文示例所用的User/Review/Movie完整 schema 定义docs/reference/edgeql/delete.rstdelete的全面行为说明链接删除策略、级联、返回值docs/reference/reference/edgeql/delete.rst语句的正式语法与delete (select ...)等价关系tests/test_edgeql_delete.py覆盖语法糖、返回值、并集删除、多对象同时删除等场景的测试用例是验证本文所有结论的最直接依据。【免费下载链接】edgedbGel supercharges Postgres with a modern data model, graph queries, Auth AI solutions, and much more.项目地址: https://gitcode.com/gh_mirrors/ed/edgedb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/4 15:56:54

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/3 12:09:35

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/4 17:01:23

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/4 12:33:12

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/4 1:25:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/4 3:51:11

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉