目录

文章目录

  • 目录
  • PostgreSQL 的外键关联
  • 创建表时定义外键(References,参照)
  • 修改原有表的外键约束
  • 删除外键约束
  • 参考文档

PostgreSQL 的外键关联

一个外键约束指定一列(或一组列)中的值必须匹配出现在另一个表中某些行的值。我们说这维持了两个关联表之间的引用完整性。注意,一个从表外键所引用的主表 Column 必须是一个主键或者是被唯一约束所限制的。这意味着主表被引用的列总是拥有一个索引(位于主键或唯一约束之下的索引),因此在其上进行的一个引用行是否匹配的检查将会很高效。

创建表时定义外键(References,参照)

# 主表
CREATE TABLE products (product_no integer PRIMARY KEY,name text,price numeric
);# 从表
CREATE TABLE orders (order_id integer PRIMARY KEY,product_no integer REFERENCES products (product_no),quantity integer
);# 从表简写,因为缺少声明主表的列名,所以将主表的主键作为引用。
CREATE TABLE orders (order_id integer PRIMARY KEY,product_no integer REFERENCES products,quantity integer
);# 定义多个 Column 组成的外键,要求被约束列(外键)的数量和类型应该匹配被引用列(主键)的数量和类型。
CREATE TABLE t1 (a integer PRIMARY KEY,b integer,c integer,FOREIGN KEY (b, c) REFERENCES other_table (c1, c2)
);# many2many,添加一个中间表 order_items 来引用两个主表 products 和 orders。
CREATE TABLE products (product_no integer PRIMARY KEY,name text,price numeric
);CREATE TABLE orders (order_id integer PRIMARY KEY,shipping_address text,...
);CREATE TABLE order_items (product_no integer REFERENCES products,order_id integer REFERENCES orders,quantity integer,PRIMARY KEY (product_no, order_id)
);# on delete/update 的联动操作类型,例如:限制删除/更新、级联删除/更新。
# RESTRICT 和 NO ACTION 具有相同的语义,两者本质不同在于 NO ACTION 允许关联检查推迟到事务的最后,而 RESTRICT 则会马上报错。
# SET NULL 主表在 on delete/update 时,设置从表外键为 NULL。
# SET DEFAULT 主表在 on delete/update 时,设置从表外键为 DEFAULT(默认值)。
CREATE TABLE products (product_no integer PRIMARY KEY,name text,price numeric
);CREATE TABLE orders (order_id integer PRIMARY KEY,shipping_address text,...
);CREATE TABLE order_items (product_no integer REFERENCES products ON DELETE RESTRICT, # 限制删除order_id integer REFERENCES orders ON DELETE CASCADE,      # 级联删除quantity integer,PRIMARY KEY (product_no, order_id)
);

修改原有表的外键约束

格式:

ALTER TABLE 从表名 ADD CONSTRAINT 外键约束名 FOREIGN KEY (从表的外键) REFERENCES 主表名 (主表的主键);

注意:如果要给一个已存在的表添加 ON DELETE CASCADE 的外键约束,需要如下步骤:

  1. 删除已存在的外键约束。
  2. 添加一个 ON DELETE CASCADE 的外键约束。

删除外键约束

格式:

alter table 从表名 drop constraint 从表的外键约束名;

参考文档

http://www.postgres.cn/docs/12/ddl-constraints.html#DDL-CONSTRAINTS-FK

PostgreSQL — 外键关联操作相关推荐

  1. MySQL — 外键关联操作

    目录 文章目录 目录 MySQL 的外键约束 创建表时定义外键(References,参照) 修改原有表的外键约束 删除外键约束 参考文档 MySQL 的外键约束 注意,MySQL 的 InnoDB ...

  2. mysql外键(FK)及其外键关联操作reference

    mysql中外键的应用条件: 1.只有InnoDB可以使用外键, 2.在引用表中,必须有一个索引 使用语法:在创建表时写入 foreign key (外键名) reference 关联的表名 (关联的 ...

  3. JPA关系映射系列一:one-to-one外键关联

    2019独角兽企业重金招聘Python工程师标准>>> SpringDataJPA是Spring Data的一个子项目,通过提供基于JPA的Repository极大的减少了JPA作为 ...

  4. Python sqlalchemy orm 多外键关联

     多外键关联 注:在两个表之间进行多外键链接 如图: 案例: # 创建两张表并添加外键主键 # 调用Column创建字段 加类型 from sqlalchemy import Integer, For ...

  5. Python sqlalchemy orm 多对多外键关联

    多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...

  6. 外键 级联操作 mysql

    外键 级联操作 mysql 级联就是联动的操作 如果主表中 级联更新 效果,请表ID变化,从表关联的数据也发生变化 级联更新 如果主表中的数据删除 从表中与它相关联的数据也删除 演练代码 -- 级联更 ...

  7. Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)

    有一个东西一直在我脑海中是个很烦的东西,但是这东西不搞清楚会阻碍自己的前进.自己做项目demo永远只能用一张表... 所以今天还是学习了下外键希望能够搞明白一些... 百度上搜索外键的作用" ...

  8. 存在外键关联的主表truncate如何做

    主外键是数据库提供的一种两表之间强制关联的方法,也可以从应用层实现. 优点 缺点 数据库实现的主外键 由数据库层机制保证,无需应用额外实现 强关联,不易扩展变更 应用实现的主外键 易扩展变更 完全由应 ...

  9. 将一张表的主键作为外键关联到另一张表中

    将一张表的主键作为外键关联到另一张表中 1.外键的介绍 2.使用Navicat创建外键 3.外键的维护关系设定及其选择 1.外键的介绍 设置外键的作用很明显,就是讲两个表的数据产生关联,就比如个人信息 ...

最新文章

  1. Delete、Upadate、Insert事件触发常见错误
  2. 如何在同一台电脑开启多个tomcat服务器
  3. EJB调用原理分析 (飞茂EJB)
  4. mysql sqlstate 28000_mysql ERROR 1045 (28000): 错误解决办法
  5. 奇葩注释大盘点,你觉得哪个最牛逼?
  6. FCKEditor在.net的使用 cnblogs
  7. Sentinel实现限流熔断及与Spring Cloud整合
  8. 如何清空_回收站删除的文件怎么恢复?回收站清空如何恢复?
  9. 用深度神经网络修复H漫:看完这篇你就能眼中无码
  10. python爬虫——与不断变化的页面死磕和更新换代(3)
  11. 越南也自研5G设备,有这么容易?
  12. 关于嵌入式Linux做底层还是应用,要掌握什么技能
  13. android 设置全屏
  14. 网络机顶盒服务器响应超时怎么办,教你如何处理网络机顶盒常见问题
  15. 分享-IE游览器升级工具
  16. 红尘一醉,愿得一人心;烟火夫妻,白首不相离
  17. 二维码扫描的样式总结
  18. python爬取王者荣耀英雄素材图案例
  19. 撩妹奇招——修改Excel单元格默认格式
  20. Java中未加入修饰符_(整理)java修饰符

热门文章

  1. 解决Fiddler无法抓到手机的会话包
  2. C#开发Unity游戏教程之Scene视图与脚本的使用
  3. 回复 集赞 抢 《Apple Watch 苹果开发教程》活动开始了!!!
  4. 信息系统分析与设计杨选辉_信息系统分析与设计(第2版)
  5. mvvm模式和mvc的区别_mvvm 和 mvc 区别?
  6. vue 给iframe设置src_vue项目iframe的传值问题
  7. 机器人第一次独立手术!最快55分钟缝合肠道,华裔教授带队研发,“结果显著优于外科医生”...
  8. 3年完成2款云端AI芯片研发量产,百度造芯为什么这么快?
  9. 嬴彻CEO:自动驾驶技术只有依托量产,才有持久优势
  10. 只需2.5W功耗,就能达到5TOPS算力!地平线新一代AIoT芯片「旭日3」发布