您的位置:58编程 > PostgreSQL 外键

PostgreSQL 外键

2023-04-15 23:33 PostgreSQL 外键

 PostgreSQL 外键

回想第2章中的weathercities表。考虑以下问题:我们希望确保在cities表中有相应项之前任何人都不能在weather表中插入行。这叫做维持数据的引用完整性。在过分简化的数据库系统中,可以通过先检查cities表中是否有匹配的记录存在,然后决定应该接受还是拒绝即将插入weather表的行。这种方法有一些问题且并不方便,于是PostgreSQL可以为我们来解决:

新的表定义如下:

CREATE TABLE cities (
        city     varchar(80) primary key,
        location point
);

CREATE TABLE weather (
        city      varchar(80) references cities(city),
        temp_lo   int,
        temp_hi   int,
        prcp      real,
        date      date
);

现在尝试插入一个非法的记录:

INSERT INTO weather VALUES ("Berkeley", 45, 53, 0.0, "1994-11-28");

ERROR:  insert or update on table "weather" violates foreign key constraint "weather_city_fkey"
DETAIL:  Key (city)=(Berkeley) is not present in table "cities".

外键的行为可以很好地根据应用来调整。我们不会在这个教程里更深入地介绍,读者可以参考第 5 章中的信息。正确使用外键无疑会提高数据库应用的质量,因此强烈建议用户学会如何使用它们。


阅读全文
以上是58编程为你收集整理的 PostgreSQL 外键全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
  •  PostgreSQL 安全性

    PostgreSQL 安全性

    能够修改订阅者侧模式的用户可以作为超级用户执行任意代码。将这些表上的所有权和TRIGGER特权限制为超级用户信任的角色。 此外,...

  •  PostgreSQL pg_proc

    PostgreSQL pg_proc

    目录pg_proc存放有关函数、过程、聚集函数以及窗口函数(共称为例程)的信息。更多信息请参考CREATE FUNCTION、CREATE PROCEDURE...

  •  PostgreSQL pg_tablespace

    PostgreSQL pg_tablespace

    目录pg_tablespace存储关于可用表空间的信息。表可以被放置在特定表空间中以实现磁盘布局的管理。与大部分其他系统目录不同,pg_...

  •  PostgreSQL pg_type

    PostgreSQL pg_type

    目录pg_type存储有关数据类型的信息。基类和枚举类型(标度类型)使用CREATE TYPE创建,而域使用CREATE DOMAIN创建。数据库中的...

  •  PostgreSQL pg_group

    PostgreSQL pg_group

    视图pg_group为向后兼容而存在:它模拟了存在于PostgreSQL 8.1之前版本中的一个目录。它显式所有角色的名称和未被标记rolcanlogi...

  •  PostgreSQL pg_publication_tables

    PostgreSQL pg_publication_tables

    视图pg_publication_tables提供publication与其所包含的表之间的映射信息。和底层的目录pg_publication_rel不同,这个视图展开了...

  •  PostgreSQL pg_user_mappings

    PostgreSQL pg_user_mappings

    视图pg_user_mappings提供有关用户映射的信息。这是pg_user_mapping的一个公共可读视图,它对无权使用的用户省去了选项域。表51....

  •  PostgreSQL 消息格式

    PostgreSQL 消息格式

    本节描述各种消息的详细格式。每种消息都标记来指示它是由前端(F)、后端(B)或者两者(FB)发送的。 请注意,尽管每条消息在...

  •  PostgreSQL 编写一个自定义扫描提供者

    PostgreSQL 编写一个自定义扫描提供者

    目录58.1. 创建自定义扫描路径58.1.1. 自定义扫描路径回调58.2. 创建自定义扫描计划58.2.1. 自定义扫描计划回调58.3. 执行自定义...

  • vimscript教程 Vimscript编程参考
© 2024 58编程 58biancheng.com 版权所有 联系我们
桂ICP备12005667号-32 Powered by CMS