Module 02 · Using Relational Databases
Primary Keys and Foreign Keys主键与外键
欢迎学习本节课程。通过本视频,您将能够描述主键与外键的定义,并概述创建它们的具体步骤。
一、主键 (Primary Key)
主键用于唯一地标识表中的每一行记录。
1. 核心特征与选择
- 自然唯一属性:在某些表中,选择主键非常简单,因为实体本身具有天然的唯一属性。
- 示例:书籍的
book_id或员工的employee_id。
- 示例:书籍的
- 人工添加属性:如果表中不存在现有的唯一属性,可以添加一个新列作为主键。
- 复合主键 (Composite Primary Key):如果需要两个属性的组合才能唯一标识每一行,可以跨两列创建主键。
- 示例:如果员工仅在其工作场所内拥有唯一标识,则可以使用
site_id和employee_id的组合。
- 示例:如果员工仅在其工作场所内拥有唯一标识,则可以使用
- 唯一性限制:每张表只能有一个主键。
2. 创建方法
您可以采用以下两种方式之一创建主键:
| 方法 | SQL 语法 | 操作说明 |
|---|---|---|
| 建表时创建 | CREATE TABLE ... PRIMARY KEY (column) |
在 CREATE TABLE 语句中使用 PRIMARY KEY 子句,括号内注明列名。 |
| 在现有表创建 | ALTER TABLE ... ADD PRIMARY KEY (column) |
使用 ALTER TABLE 语句的 ADD PRIMARY KEY子句。 |
⚠️ 注意:当使用多个列作为复合主键时,请务必用逗号分隔列名。
二、外键 (Foreign Key)
您可以使用主键和外键来定义表之间的关系。
1. 定义与示例
外键是表中的一个列,它包含的信息与另一个表中的主键完全一致。
- 示例:图书馆的
copy(副本)表列出了所有拥有的书籍。copy表中的某本书的book_id必须在book(图书)表中作为一个有效的书籍存在。- 当图书馆拥有某本畅销书的多个副本时,该书籍的
book_id会在copy表中出现多次。
- 参照完整性:您可以指定在向
copy表添加行时,所使用的book_id必须已经存在于book表中。
2. 创建方法
在创建表时,可以使用以下子句:
CONSTRAINT [约束名] FOREIGN KEY (列名) REFERENCES [父表名] (主键列名)
3. 定义操作规则 (Rule Clause)
您可以定义当父表(拥有主键的表)中的行被更新或删除时,子表(拥有外键的表)应采取的行动:
- 更新或删除 (Update/Delete):
- NO ACTION (不采取行动):如果子表中有相关记录,父表的更新或删除操作可能会失败。
- 仅针对删除 (Delete):
- CASCADE (级联):自动删除依赖表中相关的子行。
- SET NULL (设为空值):将子表中外键列的值设置为
NULL。
总结
- 主键 (Primary Key):用于强制表中行的唯一性。
- 外键 (Foreign Key):包含与另一表主键相同信息的列。
- 关系建立:通过主键和外键的配合,可以在不同表之间建立起逻辑联系。