MySQL 复合键

MySQL 复合键

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列上添加了复合主键。

MySQL 复合键

接下来,我们需要将值按如下给出的方式插入到这个表中:

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

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

SELECT * FROM Product;

它将会给出以下输出结果:

MySQL 复合键

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

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

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

MySQL 复合键

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

使用ALTER TABLE语句的复合键

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

让我们首先使用以下语句创建一个名为“学生”的表:

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;

在输出结果中,我们可以看到关键列为PRI,这意味着我们已成功将复合主键添加到 stud_idsubject 列中。

MySQL 复合键

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程