📜  SQL 中的主键约束

📅  最后修改于: 2022-05-13 01:54:38.802000             🧑  作者: Mango

SQL 中的主键约束

主键约束描述了一个包含一个或多个列的键,这些列将有助于唯一标识表中的每个元组/记录。

特性 :

  1. 不允许重复值,即分配为主键的列应仅具有 UNIQUE 值。
  2. 具有主键的列中不存在 NULL 值。因此,具有主键的列中有强制值。
  3. 尽管主键可能有多个列,但每个表只存在一个主键。
  4. 不能使用已经存在的主键插入新行。
  5. 分类为:a) 具有单列的简单主键 2) 复合主键具有多列。
  6. 在 Create table/Alter table 语句中定义。

可以使用 PRIMARY KEY 约束在表中创建主键。它可以在两个层次上创建。

  1. 柱子
  2. 桌子。

列级别的 SQL PRIMARY KEY :
如果主键只包含一列,则应在列级别定义。以下代码在人员表上创建主键“ID”。

句法 :

Create Table Person
(
Id int NOT NULL PRIMARY KEY, 
Name varchar2(20), 
Address varchar2(50)
);

这里添加了 NOT NULL 以确保 ID 应该具有唯一值。如果未指定,SQL 将自动将空值设置为主键。

示例-1:
要验证主键的工作:

Insert into Person values(1, 'Ajay', 'Mumbai');

输出 :

1 row created

示例 2 :
让我们看看您是否会再次插入相同的值。

Insert into Person values(1, 'Ajay', 'Mumbai');

输出 :

Error at line 1: unique constraint violated

由于我们插入了重复值,因此会抛出错误,因为主键“Id”只能包含唯一值。

示例 3 :

Insert into Person values('', 'Ajay', 'Mumbai');

输出 :

Error at line 1: cannot insert Null into<"user"."Person"."ID">

主键不能包含空值,因此也会引发错误。

表级别的 SQL PRIMARY KEY :
只要主键包含多个列,就必须在表级别指定。

句法:

Create Table Person
(Id int NOT NULL, 
Name varchar2(20), 
Address varchar2(50), 
PRIMARY KEY(Id, Name)
);                

在这里,一张表中只有一个主键,但它由多列(Id、Name)组成。但是,以下是允许的。

Insert into Person values(1, 'Ajay', 'Mumbai');
Insert into Person values(2, 'Ajay', 'Mumbai');

由于多列组成主键,因此两行被认为是不同的。 SQL 允许两个值中的任何一个可以重复,但组合必须是唯一的。

带有 ALTER TABLE 的 SQL PRIMARY KEY :
大多数情况下,主键是在创建表的过程中定义的,但有时主键可能不会在已存在的表中创建。但是,我们可以使用 Alter 语句添加主键。

句法 :

Alter Table Person add Primary Key(Id);

使用以下查询在多列中添加主键。

Alter Table Person add Primary Key(Id, Name);

添加为主键的列必须包含唯一值,否则将被违反。如果 id 包含重复值,则不能将其设为主键。它违反了主键的基本规则。更改表以添加 Id 作为可能包含重复值的主键会产生错误。

输出 :

Error at line 1: cannot validate- primary key violated

此外,使用alter 语句添加为主键的列不应具有空值。更改表以添加 Id 作为可能包含空值的主键会生成错误。

输出 :

Error at line 1: column contains NULL values; cannot alter to NOT NULL

删除主键约束:
要删除表上的主键约束,请使用给定的 SQL,如下所示。

ALTER table Person DROP PRIMARY KEY;