sql - 删除行和引用行 ID 的行
问题描述
假设我们有一张图纸桌。
CREATE TABLE public.drawings
(
drawingid integer NOT NULL DEFAULT nextval('drawings_drawingid_seq'::regclass),
name text,
discipline text,
type text,
CONSTRAINT drawings_pkey PRIMARY KEY (drawingid)
);
我们有一个修订表,其中存储了每张图纸的所有修订数据。
CREATE TABLE public.revisions
(
revisionid integer NOT NULL DEFAULT nextval('revisions_revisionid_seq'::regclass),
drawingid integer,
sequence integer,
revision text,
state text,
meta jsonb,
"Description" text,
"TB_DRAWING_NO" text,
"File Name" text,
"ATT_CADTYPE" text,
"PW_SUITABILITY" text,
"TB_TITLE_LINE_1" text,
"TB_TITLE_LINE_2" text,
"TB_TITLE_LINE_3" text,
"TB_TITLE_LINE_4" text,
--snip
"RV_APPDATE10" timestamp without time zone,
"RV_APPDATE11" timestamp without time zone,
"RV_APPDATE12" timestamp without time zone,
"File Updated" timestamp without time zone,
"Updated" timestamp without time zone,
"Created" timestamp without time zone,
"File Updated By" text,
"Updated By" text,
"Created By" text,
CONSTRAINT revisions_pkey PRIMARY KEY (revisionid),
CONSTRAINT revisions_drawingid_fkey FOREIGN KEY (drawingid)
REFERENCES public.drawings (drawingid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
假设我想从表中删除很多行drawings
,但我也希望从中删除相关修订revisions
,我不想留下孤立的行。这样做最有效的方法是什么?
解决方案
为此,您可以CASCADE
在定义约束时使用 PostgreSQL 中的关键字:
CONSTRAINT revisions_drawingid_fkey FOREIGN KEY (drawingid)
REFERENCES public.drawings (drawingid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE
现在,当删除 中的一行时drawings
,它会自动删除 中的孤立行revisions
。
推荐阅读
- jenkins - Jenkinsfile 签出不同的仓库并更新文件
- python - 使用 AssertEqual 函数时简单的硒测试失败
- kotlin - 使用对象映射器(在 kotlin 中)从 S3 读取没有键名的 json 文件(大约 180 MB)到数据类
- google-chrome - 生成灯塔报告时可以更改用户代理吗?
- reactjs - 使 react/redux 实现模式可重用
- c - C 嵌套结构的问题。错误:使用不完整的 typedef 无效
- amazon-web-services - docker-compose 没有这样的命令:转换错误
- mqtt - 使用 Mosquitto brokier 从多个服务器接收 MQTT
- kubernetes - 如何将部署分配给特定的节点池
- angular - 从内部订阅添加角度组件输入数据