程序员社区

MySQL系列教程 --- 83、MySQL 中的 复合键(Composite Key)

MySQL 中的复合键是表中两列或两列以上的组合,它允许我们唯一地标识表的每一行。它是一种由多列组成的候选键。MySQL 仅在组合时才保证列的唯一性。如果他们单独服用,则无法保持唯一性。

任何键,如主键、超级键或候选键,当它们与多个属性组合时,都可以称为复合键。当表需要唯一地标识具有多个属性的每条记录时,组合键很有用。组合键中使用的列可以具有不同的数据类型。因此,在MySQL 中创建复合键的列不需要是相同的数据类型。

可以通过两种方式添加复合键:

  1. 使用 CREATE 语句
  2. 使用 ALTER 语句

让我们详细看看这两种方式。

使用 CREATE 语句的复合键

在这里,我们将了解复合键在 MySQL 中的工作原理。让我们首先创建一个表"Product",使用以下语句:

CREATE TABLE Product (  
    Prod_ID int NOT NULL,   
    Name varchar(45),   
    Manufacturer varchar(45),  
    PRIMARY KEY(Name, Manufacturer)  
);  

在上面的语句中,我们使用列名NameManufacturer创建了一个复合主。

我们可以使用以下命令验证相同的内容:

DESCRIBE Product;  

执行成功后,我们可以看到 Key 列有两个PRI。这意味着我们已经成功地在 Name 和 Manufacturer 列上添加了复合主键。

file

接下来,我们需要将值插入到这个表中,如下所示:

INSERT INTO Product (Prod_ID, Name, Manufacturer)  
VALUES (101, 'Soap', 'Hamam'),  
(102, 'Shampoo', 'Teresme'),  
(103, 'Oil', 'Daber Almond');

接下来,执行以下命令以显示表数据:

SELECT * FROM Product;  

它将给出以下输出:

file

再次执行下面的插入语句以更清楚地理解复合键:

INSERT INTO Product (Prod_ID, Name, Manufacturer)  
VALUES (101, 'Soap', 'Hamam');  

INSERT INTO Product (Prod_ID, Name, Manufacturer)  
VALUES (101, 'Soap', 'LUX');  

在下面的输出中,我们可以看到,如果我们尝试添加相同产品名称和制造商的组合,那么它会抛出一个错误,指出: Duplicate entry for product.primary.

如果我们执行第二条insert语句,它就会成功添加到表中。这是因为我们可以在产品列中插入任意数量的肥皂,但制造商列应该不同。

file

因此,我们可以说复合键始终强制该表的列的唯一性,该表具有两个键。

使用 ALTER TABLE 语句的复合键

ALTER 语句始终用于对现有表进行修改。有时需要添加组合键来唯一标识具有多个属性的表中的每条记录。在这种情况下,我们使用ALTER TABLE 语句

让我们首先使用以下语句创建一个表“Student”:

CREATE TABLE Student(  
  stud_id int NOT NULL,  
  stud_code varchar(15),  
  stud_name varchar(35),  
  subject varchar(25),  
  marks int  
);  

现在,执行 ALTER TABLE 语句以添加复合主键,如下所示:

ALTER TABLE Student add primary key(stud_id, subject);  

我们可以使用以下命令验证是否添加到表中的复合主键:

DESCRIBE Student;  

在输出中,我们可以看到key列有PRI,这意味着我们已经成功地将复合主键添加到stud_idsubject列中。

file

赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 83、MySQL 中的 复合键(Composite Key)

一个分享Java & Python知识的社区