迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

MySQL 组合键简介

作者:迹忆客 最近更新:2024/03/26 浏览次数:

今天的教程是对 MySQL 组合键的介绍。本课还讨论了使用 CREATEALTER 语句创建复合主键和外键。


MySQL 组合键简介

组合键是候选键的一种类型,它是表中多个列的组合,让我们可以唯一地标识表的每一行。有两种类型的组合键。

  1. 复合主键
  2. 复合外键

MySQL 复合主键

复合主键是表中多个列的组合,用作主键,让我们唯一地标识表的每一行。同一表中复合主键的各个列可以是或不能是外键,它们是父表中的主键。

让我们看看下面的实体关系图 (ERD),其中我们使用列 IDCUSTOMER_IDPRODUCT_ID 在表 tb_order 中创建复合主键,其中 CUSTOMER_IDPRODUCT_ID 是外键在列级别,但在其父表中的主键。

有些人可能会对 tb_order 表中键的颜色感到困惑,因为黄色用于主键,红色表示外键。要确保我们有一个复合主键,请单击 tb_order 表中的单词 PRIMARY

它将突出显示制作复合主键所涉及的所有列(请参见以下屏幕截图作为演示)。

MySQL 复合外键

包含多个列的外键称为复合外键。外键中的所有字段(也称为属性或列)必须指向确切的表。

我们不能创建一个复合外键,其中一列引用表 A,第二列引用表 B。请参阅以下演示,其中复合外键的两列 (REFERENCE_NUMBER & REFERENCE_TYPE) 引用列 (ACCOUNT_NUMBER & ACCOUNT_TYPE) 的 accounts 表。

在 MySQL 中,只有当我们组合它们时,才能保证列的唯一性。否则,无法在个人层面上保持唯一性。

主键、超键或候选键也可以称为组合键,如果它们是通过使用多个属性(列)构成主键/外键而形成的。

每当表需要唯一标识具有多列的每一行时,我们都可以使用组合键以达到最佳研究目的。但是,我们将用于形成组合键的列可以具有各种数据类型。

因此,用于制作 MySQL 组合键的列具有相同的数据类型不是强制性的。


在 MySQL 中创建组合键

在 MySQL 中,我们可以通过以下两种方式创建复合主键和复合外键。

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

使用 CREATE 语句创建复合主键

我们将在使用 MySQL 复合主键中提供的相同数据库创建的表中创建一个复合主键。

代码:

CREATE TABLE `db_ms20`.`tb_order` (
    ID INT NOT NULL,
    CUSTOMER_ID INT NOT NULL,
    PRODUCT_ID INT NOT NULL,
    CONSTRAINT FK_CUSTOMER_ID FOREIGN KEY (CUSTOMER_ID)
    REFERENCES tb_customer(ID),
    CONSTRAINT FK_PRODUCT_ID FOREIGN KEY (PRODUCT_ID)
    REFERENCES tb_product(ID),

    PRIMARY KEY (ID, CUSTOMER_ID, PRODUCT_ID)
);

使用 CREATE 语句创建复合外键

接下来,我们使用相同的数据库来创建上面在 MySQL 复合外键 中介绍的复合外键。

代码:

CREATE TABLE `ms20`.`sub_accounts` (
   SUB_ACCOUNT INTEGER PRIMARY KEY,
   REFERENCE_NUMBER INTEGER NOT NULL,
   REFERENCE_TYPE INTEGER NOT NULL,
   SUB_ACC_DESCRIPTION CHAR(20),

   FOREIGN KEY (REFERENCE_NUMBER, REFERENCE_TYPE)
   REFERENCES accounts
   (ACCOUNT_NUMBER, ACCOUNT_TYPE)
);

使用 ALTER 语句创建复合主键

假设我们已经创建了名为 tb_order 的表。

代码:

CREATE TABLE `db_ms20`.`tb_order` (
    ID INT NOT NULL,
    CUSTOMER_ID INT NOT NULL,
    PRODUCT_ID INT NOT NULL,
    CONSTRAINT FK_CUSTOMER_ID FOREIGN KEY (CUSTOMER_ID)
    REFERENCES tb_customer(ID),
    CONSTRAINT FK_PRODUCT_ID FOREIGN KEY (PRODUCT_ID)
    REFERENCES tb_product(ID)
);

输出:

tb_order 表中没有任何主键。因此,我们可以在表创建后使用 ALTER 语句创建复合主键,因为 ALTER 语句用于修改现有表。

请记住,如果我们将 ID 作为主键,我们将无法创建复合主键,因为一张表不能有两个主键。

ALTER 声明:

ALTER TABLE `db_ms20`.`tb_order` ADD PRIMARY KEY(ID, CUSTOMER_ID, PRODUCT_ID);

输出:

我们已经成功地创建了一个复合主键。

使用 ALTER 语句创建复合外键

假设我们创建了一个名为 sub_accounts 的表。

代码:

CREATE TABLE `ms20`.`sub_accounts` (
   SUB_ACCOUNT INTEGER PRIMARY KEY,
   REFERENCE_NUMBER INTEGER NOT NULL,
   REFERENCE_TYPE INTEGER NOT NULL,
   SUB_ACC_DESCRIPTION CHAR(20)
);

输出:

我们在上面给出的输出中没有复合外键。让我们使用 ALTER 语句创建它,如下所示:

ALTER TABLE `ms20`.`sub_accounts` ADD FOREIGN KEY
(REFERENCE_NUMBER, REFERENCE_TYPE)
REFERENCES accounts
(ACCOUNT_NUMBER, ACCOUNT_TYPE);

输出:

将此输出与前一个输出进行比较,观察我们成功创建了复合外键。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 MySQL 中声明和使用变量

发布时间:2024/03/26 浏览次数:102 分类:MySQL

当你需要在 MySQL 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。

在 MySQL 中实现刷新权限

发布时间:2024/03/26 浏览次数:179 分类:MySQL

本教程介绍了 MySQL 中的刷新权限命令,用于刷新授权表并影响允许的更改。

在 MySQL 中设置时区

发布时间:2024/03/26 浏览次数:86 分类:MySQL

在本教程中,我们将学习如何在 MySQL 服务器中更改时区。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便