• 售前

  • 售后

热门帖子
入门百科

postgresql 实现多表关联删除

[复制链接]
卢云i 显示全部楼层 发表于 2021-10-26 12:41:46 |阅读模式 打印 上一主题 下一主题
t_aj_ajjbxx

t_aj_ajfbxx

t_xt_dwxx

两表关联,删除一张表中数据
  1. delete from db_lx.t_aj_ajfbxx ajfb
  2. USING db_lx.t_xt_dwxx dw
  3. where dw.c_bh=ajfb.c_ssdw and dw.c_sfbh='65';
复制代码
只有t_aj_ajfbxx 表中数据被删除

三表关联,删除一张表中数据
  1. delete from db_lx.t_aj_ajjbxx ajjb
  2. USING db_lx.t_aj_ajfbxx ajfb,db_lx.t_xt_dwxx dw
  3. where ajjb.c_bh = ajfb.c_ajbh and ajfb.c_ssdw=dw.c_bh and dw.c_sfbh='65';
复制代码
只有t_aj_ajjbxx 表中数据被删除

增补:PostgreSQL的级联删除(主键删除则外键数据记录同时删除)
背景形貌:

近来的一个项目中,所涉及的数据库表之间有设置级联关系,即表legal_positionsinfo中的id是表legal_approval的外键。
如今有一个功能是根据id删除表legal_positionsinfo中的一条记录。
但是在程序调试删除时,报错如下:
  1. update or delete on table "legal_positionsinfo" violates foreign key constraint "legal_approval_position_id_fkey" on table "legal_approval" DETAIL: Key (id)=(1) is still referenced from table "legal_approval".
复制代码
告急是由于两表之间存在级联关系,主键记录删除则外键记录也应该同时删除。
办理办法:

这里使用的是强盛的数据库管理和计划工具Navicat,必要在数据库中设置级联删除,即将NO ACTION 改为 CASCADE即可:

那外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL都代表着什么意思呢?区别是什么呢?
  1. CASCADE:
复制代码
父表delete、update的时间,子表会delete、update掉关联记录;
  1. SET NULL:
复制代码
父表delete、update的时间,子表会将关联记录的外键字段所在列设为null,所以注意在计划子表时外键不能设为not null;
  1. RESTRICT:
复制代码
如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不答应删除父表中的记录;
  1. NO ACTION:
复制代码
同 RESTRICT,也是起首先查抄外键;
  1. SET DEFAULT:
复制代码
父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能辨认。
外键束缚使用最多有两种环境:

1)父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败;
2)父表更新时子表也更新,父表删除时子表匹配的项也删除。
以上为个人履历,渴望能给各人一个参考,也渴望各人多多支持草根技术分享。如有错误或未思量完全的地方,望不吝见教。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作