MySQL 备用键 Alternate Key 是什么怎么用?

文章导读
上一个 测验 下一个 表中的Alternate Key本质上是该表主键的备选。换言之,它们是候选键,但目前未被选为主键(但有潜力成为主键)。因此,它们也可以用来唯一标识表中的一个元组(或记录)。
📋 目录
  1. 备用键的特点
  2. 表中的键类型
  3. 备选键需要遵循的规则
A A

MySQL - 备用键

目录
  • 备用键的特点
  • 表中的键类型
  • 备用键需遵循的规则


上一个
测验
下一个

表中的Alternate Key本质上是该表主键的备选。换言之,它们是候选键,但目前未被选为主键(但有潜力成为主键)。因此,它们也可以用来唯一标识表中的一个元组(或记录)。

如果表中只有一个候选键被视为该表的主键,则该表中没有备用键。

表中没有特定的查询或语法来设置备用键。它只是一个普通的列,是被选为主键的次要候选。

备用键的特点

尽管备用键不是主键,但它们自身具有一些重要的属性/特点。以下是其列表 −

  • 备用键不允许重复值。
  • 一个表可以有多个备用键。
  • 除非显式设置 NOT NULL 约束,否则备用键可以包含 NULL 值。
  • 所有备用键都可以是候选键,但并非所有候选键都可以是备用键。因为主键也是一个候选键,不能被视为备用键。

表中的键类型

以下是表中存在的键列表 −

  • Candidate key
  • Primary key
  • Alternate key
  • Foreign Key

Candidate Key

Candidate key 是 super keys 的子集,用于唯一标识表中的记录。它可以是单个字段或多个字段。表中的 primary keys、alternate keys、foreign keys 都是 candidate key 的类型。

Primary Key

Primary Key 是用于从表中检索记录的主要键。它是表中的单个列或字段,用于唯一标识数据库表中的每个记录。

在使用 CREATE TABLE 语句创建表时,可以使用 PRIMARY KEY 关键字设置它。语法如下 −

CREATE TABLE table_name(
   COLUMN_NAME1 datatype, 
   COLUMN_NAME2 datatype,
   ... 
   PRIMARY KEY(COLUMN_NAME)
);

Alternate Key

Alternate key 是一个 candidate key,它可以作为 primary key 但不是。像 primary key 一样,它也唯一标识表中字段的记录,以从指定表中检索行元组。表中可以有一个或多个字段作为 alternate keys。

数据库表中没有设置 alternate key 的语法。

Foreign Key

一个表的 Primary key 将是另一个表的 Foreign key。在向这些表插入值时,主键字段的值必须与外键字段的值匹配;否则,外键列将不接受 INSERT 查询并抛出错误。

在表中设置外键字段的语法是 −

CREATE TABLE table_name2(
   ... CONSTRAINT constraint_name 
   FOREIGN KEY (column_name2) 
   REFERENCES table_name1(column_name1)
);

Example

在以下示例中,我们在 MySQL 数据库中创建一个名为 CUSTOMERS 的示例表 −

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY(ID)
);

现在让我们使用 INSERT 语句向此表插入一些记录,如下所示 −

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00),
(2, 'Khilan', 25, 'Delhi', 1500.00),
(3, 'Kaushik', 23, 'Kota', 2000.00),
(4, 'Chaitali', 25, 'Mumbai', 6500.00),
(5, 'Hardik', 27, 'Bhopal', 8500.00),
(6, 'Komal', 22, 'Hyderabad', 4500.00),
(7, 'Muffy', 24, 'Indore', 10000.00);

Verification

为了验证添加到 CUSTOMERS 表的键,让我们使用以下查询显示表定义 −

Field Type Null Key Default Extra
ID int NO PRI NULL
NAME varchar(20) NO NULL
AGE int NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18, 2) YES NULL

目前,表中仅在 ID 列上设置了 PRIMARY KEY。NAME 列充当 Alternate Key,因为它只包含像 Primary Key 列一样的唯一记录。而 ID 和 NAME 都是 CUSTOMERS 表中的 Candidate Keys。

Example

为了说明 Foreign Key 的用法,我们需要两个表。以下是创建另一个表 ORDERS 的查询,其中将 foreign key 设置为 CUSTOMER_ID

CREATE TABLE ORDERS (
   OID INT NOT NULL,
   DATE VARCHAR (20) NOT NULL,
   CUSTOMER_ID INT NOT NULL,
   AMOUNT DECIMAL (18, 2),
   CONSTRAINT fk_customers FOREIGN KEY (CUSTOMER_ID)
   REFERENCES CUSTOMERS(ID)
);

使用 INSERT 语句,按如下方式向此表插入值 −

INSERT INTO ORDERS VALUES 
(102, '2009-10-08 00:00:00', 3, 3000.00),
(100, '2009-10-08 00:00:00', 3, 1500.00),
(101, '2009-11-20 00:00:00', 2, 1560.00),
(103, '2008-05-20 00:00:00', 4, 2060.00);

Verification

为了验证 ORDERS 表是否引用了 CUSTOMERS 表,我们在不删除 ORDERS 表的情况下删除 CUSTOMERS 表。

DROP TABLE CUSTOMERS;

显示以下错误 −

ERROR 3730 (HY000): Cannot drop table 'customers' referenced by a foreign key constraint 'fk_customers' on table 'orders'.

备选键需要遵循的规则

以下是将记录插入表时备选键应遵循的规则列表 −

  • 备选键值必须唯一。
  • 备选键不能为 NULL。