MySQL 中的 MUL vs PRI vs UNI
 
本教程将教授 MySQL 中的 PRI、MUL 和 UNI 键。
通过在本教程中逐步进行,我们将了解 PRI、MUL 和 UNI 键之间的基本区别以及如何使用它们。我们还将使用示例代码在表格中看到它们的效果。
MySQL 中的键
键是一个属性,有时是一组属性,用于唯一标识表中的一行。
MySQL 中使用各种键用于各种目的,包括主键、唯一键、复合键、外键、超级键、备用键和候选键。
我们将重点介绍本文的主键、唯一键和多键。
MySQL 中的 PRI、UNI 和 MUL 键
PRI 表示主键,强制表中记录的唯一性。它不允许 NULL 值。
单列或多列可以用作主键。UNI 键表示唯一键,强制表(关系)中的行(记录)的唯一性,如主键,并具有 NULL 值。
一列或多列可用于生成唯一键。
MUL 键不是它们,这意味着 MUL 键是一个既不是主键也不是唯一键的索引。它允许 NULL 值,并且与其名称 MUL 相同的值的多次出现源自多个。
如果你在同一列上应用了多个键,则会根据它们的优先级、PRI、UNI 和 MUL 显示这些键。
让我们借助以下示例代码来理解。
#create an employee table
CREATE TABLE employee(
    ID INT PRIMARY KEY NOT NULL, #this is PRI Key
    FIRST_NAME VARCHAR(60) NOT NULL, 
    LAST_NAME VARCHAR(60) NOT NULL,
    GENDER VARCHAR(60) NOT NULL, INDEX(GENDER), #this is MUL Key
    COUNTRY_CODE VARCHAR(30), INDEX(COUNTRY_CODE), #this is MUL Key
    CITIZEN_ID INT UNIQUE KEY #this is UNI Key
);
#insert some data
INSERT INTO employee(ID, FIRST_NAME, LAST_NAME,GENDER, COUNTRY_CODE,CITIZEN_ID)
VALUES
(1,'Thomas', 'Christopher','Male','+61',485),
(2,'Lisa', 'Mark', 'Female','+59',408),
(3,'Anthony', 'Richard', 'Male','+61',215),
(4,'Matthew', 'Charles', 'Male',NULL, 610),
(5,'Kiren', 'Donald','Female','+31', null);
#use the following query to describe table columns and their properties
desc employee;
输出:

请参阅上面的示例代码并观察输出以了解。需要注意的是,表中只能有一个 PRI 键,但可以有多个 UNI 和 MUL 键。
在上面的输出中,我们在 ID 列上应用了一个 PRI 键,它不允许 NULL 值。这意味着,如果将一个 ID 分配给员工,则不会将同一 ID 分配给表中的任何其他人。
我们在 CITIZEN_ID 列上应用了一个 UNI 键;它强制唯一性并允许 NULL 值。我们可以在名为 GENDER 和 COUNTRY_CODE 的两个不同列上看到两个 MUL 键。
有必要认为 MUL 键在 GENDER 列不能具有 NULL 值但 COUNTRY_CODE 可以的两个列上都可以正常工作。这就是为什么我们说 MUL 既不是 PRI 也不是 UNI 键的原因。
结论
在上面的讨论中,我们得出结论,键是应用于列的属性,以在表中唯一地标识它们。
不同的键用于不同的要求。PRI 适用于你不想在列中重复值并且不允许 NULL 值的情况。
UNI 键关注列内的唯一性,但允许 NULL 值。MUL 既不是 PRI 也不是 UNI,并且可以接受 NULL 和 NOT NULL 值。
只能有一个 PRI 键,但你可以有多个 UNI 和 MUL 键,具体取决于项目要求。
