MySQL 中的多个主键

在本教程中,我们的目标是探索 MySQL 中表的多个主键的概念。很多时候,企业和组织必须将某些列分配为主键。

这个 primary 键有多种用途和理由来困扰它的设置。它本质上用于确保分配为主键的每个列条目都是唯一的。

如果已将多列指定为键,则这些值的组合应该是唯一的。请注意,primary 键不能在其列中拥有 Null 值。

如果我们在此列中推送或插入 Null 值,我们肯定会收到错误。有时,组织有必要摆脱这个键来插入多个相似的值或 null 值。

该表可以有多个键。这些附加键称为复合主键

准确地说,多个主键没有分配给列,但是可以在声明 primary 键时描述多个列。让我们了解此键的工作原理,并将多列分配给 primary 键。

在 MySQL 中使用 student_details_table 创建表

在开始之前,我们创建一个虚拟数据集来使用。在这里,我们创建了一个表 student_details_table 以及几行。

-- create the table student_details_table
CREATETABLEstudent_details_table(stu_idint,stu_firstNamevarchar(255),stu_lastNamevarchar(255)DEFAULTNULL,primarykey(stu_id,stu_firstName));-- insert rows to the table student_details_table
INSERTINTOstudent_details_table(stu_id,stu_firstName,stu_lastName)VALUES(1,"Preet","Sanghavi"),(2,"Rich","John"),(3,"Veron","Brow"),(4,"Geo","Jos"),(5,"Hash","Shah"),(6,"Sachin","Parker"),(7,"David","Miller");

如我们所见,我们已经将 stu_idstu_firstName 设置为我们的表 student_details 的主键。这将确保此列中的值不能重复或 NULL

上面的查询创建了一个包含名字和姓氏的行的表。要查看数据中的条目,我们使用以下代码。

SELECT*FROMstudent_details;

上面提到的查询将给出以下输出。

stu_id	stu_firstName	stu_lastName
1	      Preet	        Sanghavi
2	      Rich	        John
3	      Veron	        Brow
4	      Geo	        Jos
5	      Hash	        Shah
6	      Sachin	    Parker
7	      David	        Miller

使用 DESCRIBE 语句显示 MySQL 中表的结构

现在让我们使用 DESCRIBE 语句,看看我们是否有多个列与主键关联。

DESCRIBEname_of_the_table;

在我们的例子中,我们需要编写以下查询来了解表 student_details_table 的详细信息。

DESCRIBEstudent_details_table;

该语句将帮助我们获取表的复杂详细信息,例如与每列关联的数据类型、不同列及其名称、与每列关联的键以及与表相关的任何额外信息。

FieldTypeNullKeyDefaultExtrastu_idintNOPRIstu_firstNamevarchar(255)NOPRIstu_lastNamevarchar(255)YES

上表显示字段 stu_idstu_firstName 被视为主键。

可能需要这样做,因为很多时候,企业需要维护记录,以便不存在某些列的重复组合。

例如,假设一家以产品为基础的公司每天需要限制客户订单和与客户相关的产品数量。

在这种情况下,他们可能需要设置两个主键作为客户 ID 和产品 ID,以匹配数据并执行任何必要的操作,而无需任何重复的组合。

因此,借助上面的查询,我们可以高效地为 MySQL 中的一个表设置多个主键。