PostgreSQL删除外键方法及实例

1,168 阅读5分钟

PostgreSQL drop foreign key

关于PostgreSQL丢弃外键的介绍

下面的文章提供了一个关于PostgreSQL放弃外键的概要。PostgreSQL为用户提供了不同类型的键;基本上,外键是PostgreSQL数据库中键的类型之一。外键是用来在主键的帮助下引用表或列的,而放弃外键意味着我们从表或列中放弃外键。当我们在语句中使用drop cascade时,这意味着它将自动从表中删除所有引用的行,因为这种类型的外键我们称之为依赖性外键。另一种删除外键的方法是删除不依赖于任何其他列或表的外键。

语法

Alter table table_name drop constraint key name;

解释

  • 在上面的语法中,我们使用alter table语句来删除外键约束,其中table_name是指数据库中指定的表名,drop是用来从数据库表中删除外键约束的。另外,键名是指我们不会删除的表的实际外键名。

如何在PostgreSQL中删除外键?

  • 我们必须在我们的系统中安装PostgreSQL。
  • 我们需要关于PostgreSQL和数据库表的键约束的基本知识。
  • 我们必须需要一个数据库表来执行外键约束。
  • 我们只需要关于外键的基本知识,即如何使用它。
  • 我们可以在psql和pgAdmin的帮助下对表进行不同的操作。

让我们看看如何实现外键约束,我们还将看到如何从数据库表中删除外键。

首先,我们需要一个外键来执行删除外键的约束,所以让我们看看如何创建一个外键,如下所示。

例子 #1

代码

CREATE TABLE sample(
emp_id INT GENERATED ALWAYS AS IDENTITY,
emp_name VARCHAR(255) NOT NULL,
PRIMARY KEY(emp_id)
);

解释

  • 在上面的例子中,我们使用创建表来创建一个有两个属性如emp_id和emp_name的样本表,这里我们把主键分配给emp_id,如语句中所示。
  • 用下面的快照来说明上述声明的最终结果。

输出

PostgreSQL drop foreign key 1

现在我们通过使用下面的语句在样本表中插入一条记录,如下所示。

代码

INSERT INTO sample(emp_name)
VALUES('John'),
('Samm');

解释

  • 在上述语句的帮助下,我们向样本表插入两条记录。
  • 用下面的快照来说明上述声明的最终结果。

输出

insert a record into the sample table

现在我们通过使用下面的语句创建另一个表,如下所示。

代码

CREATE TABLE details (
cust_id INT GENERATED ALWAYS AS IDENTITY,
emp_id INT,
cust_name VARCHAR(255) NOT NULL,
cust_phone VARCHAR(15),
cust_email VARCHAR(100),
PRIMARY KEY(cust_id),
CONSTRAINT fk_sample
FOREIGN KEY(emp_id)
REFERENCES sample(emp_id)
ON DELETE CASCADE
);

解释

  • 在上述语句的帮助下,我们创建了具有不同属性的数据表,如cust_id, cust_name, cust_phone, cust_email,在这里,我们创建了一个外键,名称为emp_id,参考了样本表。
  • 通过使用下面的快照来说明上述声明的最终结果。

输出

PostgreSQL drop foreign key 3

现在我们通过使用下面的语句将记录插入到详细信息表中,如下所示。

代码

insert into details(emp_id, cust_name, cust_phone, cust_email)
values(1,'John','(202)-555-4321','john.123@gmail.com'),
(1,'John','(202)-555-4321','john.123@gmail.com'),
(2,'Sam','(101)-444-6541','sam.123@gmail.com');
select * from details;

解释

  • 在上述插入语句的帮助下,我们将记录插入到详细信息表中。请看这里,我们将相同的记录插入到表中,但如语句中所示。
  • 用下面的快照来说明上述声明的最终结果。

输出

insert records into the details

在上面的例子中,我们插入了两条相同的记录到表中,但违反了外键约束。所以我们通过使用以下语句删除第一条记录,如下所示。

代码

delete from details
where cust_id = 1;

在上面的两个例子中,我们创建了两个表,如样本表和细节表来实现外键约束。

那么现在,让我们看看如何通过使用下面的语句来删除外键约束。

例子#2

代码

alter table details drop constraint fk_sample;
  • 在上面的例子中,我们使用 alter table 语句来删除数据库表中的外键约束。在这个例子中,表名为details,外键名称为fk_sample,我们需要从数据库表中删除。
  • 通过使用下面的快照来说明上述声明的最终结果。

输出

Alter Table

另一种删除外键的方法是,如果表存在,你可以删除它们。

语法

Drop table if exists table name;

解释

  • 在上面的语法中,我们用drop table语句来删除外键约束,其中if exists表示数据库中是否有指定的表,table name表示数据库中指定的表名。
  • 看到这里,当我们使用上述语法时,它从数据库中删除了表,而不是特定的外键列,但是当我们使用alter table语句时,我们可以删除特定的外键约束。

让我们看一个不同的删除表的例子,如下。

例子#3

代码

Drop table if exists table name;

解释

  • 在上面的例子中,我们使用 drop table 语句来删除外键约束,其中样本是我们需要删除的数据库中的指定表名。在这个例子中,样本表不包含任何外键,我们只是展示了如何通过使用drop table语句来删除外键约束。
  • Drop table语句从数据库中删除了整个表,这意味着它直接删除了该表。
  • 通过使用下面的快照来说明上述声明的最终结果。

输出

PostgreSQL drop foreign key 6

同样,我们将使用drop表语句来删除第二个表,该表包含外键约束,如下图所示。

例子 #4

代码

drop table if exists details;

解释

  • 在上面的例子中,如果表存在,我们就使用drop表。在这个例子中,我们试图放弃一个包含外键约束的详细信息表,它给出了对样本表的引用。
  • 通过使用下面的快照来说明上述声明的最终结果。

输出

PostgreSQL drop foreign key 7

结论

从上面的文章中,我们已经看到了删除外键约束的基本语法。我们也看到了如何在PostgreSQL中通过不同的操作实例来实现它们。从这篇文章中,我们已经看到了我们如何在PostgreSQL中处理删除外键约束。