PostgreSQL Foreign Key外键
在本节中,我们将了解PostgreSQL 外键的工作原理、PostgreSQL外键示例、如何使用外键约束将 PostgreSQL 外键添加到表中。
什么是 PostgreSQL Foreign Key外键/外键约束?
外键是一组列,其值取决于来自另一个表的主键利益。它用于使一列或一组列中的值显示在另一个表中的同一列或列组合中。
外键也称为引用键,它与另一个表的主键字段匹配,这意味着一个表中的外键字段引用另一个表的主键字段。
在PostgreSQL中,外键的值与其他表中主键的实际值平行;这就是为什么它也被称为Referential integrity Constraint的原因。
PostgreSQL外键约束指定了Child表中一组列或一列中的值,等同于Parent表中一组列或一列中的值。
换句话说,我们可以说外键可以与表生成父子关系。
在父子关系中,父表保留初始列值,子表的列值引用父列值。
如何在 PostgreSQL 中创建外键
在 PostgreSQL 中,我们可以借助以下命令创建外键:
- CREATE TABLE命令
- ALTER TABLE命令
现在,我们正在详细讨论每一项。
使用 CREATE TABLE 命令创建外键
我们可以在 CREATE TABLE 命令的帮助下在 PostgreSQL 中创建一个外键。
创建外键的语法
下图用于在 PostgreSQL 中使用CREATE TABLE命令定义外键:
[CONSTRAINT constraint_name]
FOREIGN KEY [foreign_key_name] (column_name, ...)
REFERENCES parent_table_name (column_name,...)
[ON DELETE referenceOption]
[ON UPDATE referenceOption]
在上面的语法中,我们使用了以下参数,我们在下表中进行了讨论:
参数名称 | 描述 |
---|---|
Constraint_name |
|
Column_name |
|
Parent_table |
|
Refrence_option |
|
在PostgreSQL中,我们有五种不同的引用选项,分别是:
- SET DEFAULT
- SET NULL
- CASCADE
- NO ACTION
- RESTRICT
让我们在下表中对五种不同的参考选项一一进行简单介绍:
参考选项 | 解释 |
---|---|
SET DEFAULT |
|
SET NULL |
|
CASCADE |
|
RESTRICT |
|
NO ACTION |
|
使用 Create 命令的 PostgreSQL 外键示例
要了解PostgreSQL 外键的工作原理,我们将看到下面的示例,该示例描述了如何在 PostgreSQL 中使用外键。
在下面的命令中,我们将使用CREATE命令的帮助创建两个表作为Employee和Department并使用INSERT命令插入一些值。
要将Employee创建到Javatpoint 数据库中,我们将使用CREATE命令。
在创建Employee表之前,如果Javatpoint数据库中存在类似的表,我们将使用DROP TABLE命令。
DROP TABLE IF EXISTS Employee;
执行上述命令后,我们会得到如下窗口信息,显示Employee表已经删除成功。
删除之前创建的Employee表后,我们将创建一个新的Employee表,其中包含各种列,例如Employee_id、Employee_name列。
在此,Employee_id列是Generated Always as identity constraint。
CREATE TABLE Employee(
Employee_id INT GENERATED ALWAYS AS IDENTITY,
Employee_name VARCHAR(50) NOT NULL,
PRIMARY KEY(Employee_id)
);
执行上述命令后,我们将收到以下消息:Employee表已成功创建到Javatpoint数据库中。
创建Employee表后,我们将在CREATE命令的帮助下将第二个表(名为Department表)创建到Javatpoint 数据库中。
在创建Department表之前,我们将使用DROP TABLE命令确保Javatpoint数据库中不存在类似的表。
DROP TABLE IF EXISTS Department;
执行上述命令后,我们将得到以下窗口消息:部门已从Javatpoint 数据库中成功删除。
删除Department表后,我们将创建一个新的Department表,其中包含各种列,例如Department_id、Department_name 列。
CREATE TABLE Department(
Department_id INT GENERATED ALWAYS AS IDENTITY,
Employee_id INT,
Department_name VARCHAR(200) NOT NULL,
PRIMARY KEY(Department_id),
CONSTRAINT fk_Employee
FOREIGN KEY(Employee_id)
REFERENCES Employee(Employee_id)
);
执行上述命令后,我们将收到以下消息:Department表已成功创建到Javatpoint数据库中。
在上面的例子中,Employee表是父表, Department表是子表。每个员工有零个或多个部门,每个部门都属于零个或一个员工。
Department表中的Employee_id列是外键列,它引用了Employee表中同名的主键列。
在下面的语句中, Department表中的外键约束fk_Employee将Employee_id指定为外键:
CONSTRAINT fk_Employee
FOREIGN KEY(Employee_id)
REFERENCES Employee(Employee_id)
热门文章
优秀文章