📜  DBMS中的主键

📅  最后修改于: 2020-12-13 05:34:06             🧑  作者: Mango

DBMS中的主键

DBMS中有某些键可用于不同目的,其中最广为人知的是主键。

这里,在本节中,我们将研究主键-它是什么,主键的用途是什么,并且我们还将实现一些示例以了解主键的工作原理。

什么是主键

主键是表的最小属性集,具有唯一标识行的任务,或者我们可以说给定特定表的元组。

主键的使用

如上所述,主键用于唯一地标识表的行。因此,需要唯一标识的行,键约束设置为该特定字段的主键。主键永远不能具有NULL值,因为主键的用途是唯一地标识一个值,但是如果那里没有值,它将如何维持下去。因此,具有主键约束的字段集不能为NULL。此外,用户可以添加或删除密钥(如果已应用)完全取决于用户。

注意:在一个表中只有一个或多个列的情况下,一个表只能有一个主键。

了解主键

让我们发现一些示例,通过这些示例我们可以了解主键的角色和使用。通常,在数据库中,我们将主键应用于需要唯一标识其他数据库字段的元组或列。

例如:当我们将学生的注册详细信息存储在数据库中时,我们会找到唯一的注册号字段,并将主键分配给该字段。同样,对于一个雇员表,我们在表的雇员ID上设置主键。

让我们实际了解它:

下表是名为STUDENT_DETAILS的表,其中Roll_no,Name和Marks是其指定的属性。

我们知道,从这三个属性中,Roll_no属性是可以唯一标识表的其他两个属性的属性,因为每个学生在每个组织中都具有唯一的编号。因此,我们可以在Roll_no列上设置主键约束。

如果我们将Name设置为主键怎么办?

如果我们在Name属性上设置主键,则该键将无效,因为两个或多个学生可以具有相同的名称。因此,如果我们在“名称”上设置主键并尝试为两个学生输入相同的名称,则会显示错误。这就是为什么我们不能将Name属性设置为主键的原因。

如果将标记设置为主键怎么办?

如果我们在Marks属性上设置主键,那么这将是不合适的方法,因为两个或更多学生可以在一个科目中获得相似的分数。因此,如果将Marks属性设置为主键,则将无法为其他实体输入相同的分数。这就是为什么我们不能为Marks属性设置主键的原因。

我们可以看下面的表格来理解它:

其他示例

考虑另一个示例,其中我们有一个名为PRODUCT_DETAILS的表,该表具有以下属性:

COMP_Id:可以从其购买不同产品的公司ID。

Prod_Name:它摄取我们购买的产品。

Prod_Id:每个产品都有一个标识号。

注意事项:

  • 我们无法为Prod_Name设置主键,因为我们可以从两家不同的公司购买同一产品。
  • 另一方面, COMP_IdProd_Id都可以唯一地标识公司和产品。因此,问题在于我们应该在哪个属性上设置主键,还是应该将主键设置为两个属性,即Prod_Id和Comp_Id。
  • 如果我们在COMP_Id上设置主键,那将是错误的,因为我们可以从同一家公司购买不止一种类型的产品。因此,如果我们将主键设置为COMP_Id,则将无法使用该公司购买更多不同的产品。
  • 同样,我们不能同时为Prod_Id和COMP_Id设置主键,因为一个表中只能有一个主键。
  • 如果我们将主键设置为Prod_Id,则该方法将是正确的,因为我们购买的每个产品都具有唯一的标识。因此,我们应该为Prod_Id设置主键。

通过查看下表,我们可以更好地理解它:

定义主键

让我们讨论如何在STUDENT_DETAILS表属性上设置主键:

创建主键

以下是在STUDENT_DETAILS表的Roll_no属性上创建主键的语法:

CREATE TABLE STUDENT_DETAIL (
Roll_no int NOT NULL PRIMARY KEY,
Name varchar (200) NOT NULL,
Marks int NOT NULL
} ;

它是SQL和Oracle服务器中使用的基本语法。

删除主键

也可以使用ALTERDROP命令从属性中删除设置的主键。

ALTER TABLE STUDENT_DETAIL DROP PRIMARY KEY ;

创建表后添加主键

为了在创建表后设置主键,请使用ALTER命令并添加主键约束。语法如下所示:

ALTER TABLE STUDENT_DETAIL
    ADD CONSTRAINT PK_STUDENT_DETAIL PRIMARY KEY (Roll_no, Name);

我们采用Name属性只是为了理解语法。

因此,通过这种方式,我们可以在表上使用和设置主键。但是,用于定义主键的语法对于不同类型的数据库可能有所不同。