PostgreSQL — 外键关联操作
目录
文章目录
- 目录
- 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 的外键约束,需要如下步骤:
- 删除已存在的外键约束。
- 添加一个 ON DELETE CASCADE 的外键约束。
删除外键约束
格式:
alter table 从表名 drop constraint 从表的外键约束名;
参考文档
http://www.postgres.cn/docs/12/ddl-constraints.html#DDL-CONSTRAINTS-FK
PostgreSQL — 外键关联操作相关推荐
- MySQL — 外键关联操作
目录 文章目录 目录 MySQL 的外键约束 创建表时定义外键(References,参照) 修改原有表的外键约束 删除外键约束 参考文档 MySQL 的外键约束 注意,MySQL 的 InnoDB ...
- mysql外键(FK)及其外键关联操作reference
mysql中外键的应用条件: 1.只有InnoDB可以使用外键, 2.在引用表中,必须有一个索引 使用语法:在创建表时写入 foreign key (外键名) reference 关联的表名 (关联的 ...
- JPA关系映射系列一:one-to-one外键关联
2019独角兽企业重金招聘Python工程师标准>>> SpringDataJPA是Spring Data的一个子项目,通过提供基于JPA的Repository极大的减少了JPA作为 ...
- Python sqlalchemy orm 多外键关联
多外键关联 注:在两个表之间进行多外键链接 如图: 案例: # 创建两张表并添加外键主键 # 调用Column创建字段 加类型 from sqlalchemy import Integer, For ...
- Python sqlalchemy orm 多对多外键关联
多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...
- 外键 级联操作 mysql
外键 级联操作 mysql 级联就是联动的操作 如果主表中 级联更新 效果,请表ID变化,从表关联的数据也发生变化 级联更新 如果主表中的数据删除 从表中与它相关联的数据也删除 演练代码 -- 级联更 ...
- Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)
有一个东西一直在我脑海中是个很烦的东西,但是这东西不搞清楚会阻碍自己的前进.自己做项目demo永远只能用一张表... 所以今天还是学习了下外键希望能够搞明白一些... 百度上搜索外键的作用" ...
- 存在外键关联的主表truncate如何做
主外键是数据库提供的一种两表之间强制关联的方法,也可以从应用层实现. 优点 缺点 数据库实现的主外键 由数据库层机制保证,无需应用额外实现 强关联,不易扩展变更 应用实现的主外键 易扩展变更 完全由应 ...
- 将一张表的主键作为外键关联到另一张表中
将一张表的主键作为外键关联到另一张表中 1.外键的介绍 2.使用Navicat创建外键 3.外键的维护关系设定及其选择 1.外键的介绍 设置外键的作用很明显,就是讲两个表的数据产生关联,就比如个人信息 ...
最新文章
- Delete、Upadate、Insert事件触发常见错误
- 如何在同一台电脑开启多个tomcat服务器
- EJB调用原理分析 (飞茂EJB)
- mysql sqlstate 28000_mysql ERROR 1045 (28000): 错误解决办法
- 奇葩注释大盘点,你觉得哪个最牛逼?
- FCKEditor在.net的使用 cnblogs
- Sentinel实现限流熔断及与Spring Cloud整合
- 如何清空_回收站删除的文件怎么恢复?回收站清空如何恢复?
- 用深度神经网络修复H漫:看完这篇你就能眼中无码
- python爬虫——与不断变化的页面死磕和更新换代(3)
- 越南也自研5G设备,有这么容易?
- 关于嵌入式Linux做底层还是应用,要掌握什么技能
- android 设置全屏
- 网络机顶盒服务器响应超时怎么办,教你如何处理网络机顶盒常见问题
- 分享-IE游览器升级工具
- 红尘一醉,愿得一人心;烟火夫妻,白首不相离
- 二维码扫描的样式总结
- python爬取王者荣耀英雄素材图案例
- 撩妹奇招——修改Excel单元格默认格式
- Java中未加入修饰符_(整理)java修饰符
热门文章
- 解决Fiddler无法抓到手机的会话包
- C#开发Unity游戏教程之Scene视图与脚本的使用
- 回复 集赞 抢 《Apple Watch 苹果开发教程》活动开始了!!!
- 信息系统分析与设计杨选辉_信息系统分析与设计(第2版)
- mvvm模式和mvc的区别_mvvm 和 mvc 区别?
- vue 给iframe设置src_vue项目iframe的传值问题
- 机器人第一次独立手术!最快55分钟缝合肠道,华裔教授带队研发,“结果显著优于外科医生”...
- 3年完成2款云端AI芯片研发量产,百度造芯为什么这么快?
- 嬴彻CEO:自动驾驶技术只有依托量产,才有持久优势
- 只需2.5W功耗,就能达到5TOPS算力!地平线新一代AIoT芯片「旭日3」发布