mysql外键(Foreign Key)介绍和创建外键的方法


MySQL中的外键(Foreign Key)是数据库表中的一个字段,它指向另一个表的主键(Primary Key)。外键用于建立两个表之间的关联,从而保持数据的引用完整性。外键约束可以确保在一个表中引用的数据在另一个表中确实存在,这有助于防止数据不一致和孤立记录的出现。

### 创建外键的方法

在MySQL中,你可以在创建表时直接定义外键,也可以在表创建后通过ALTER TABLE命令添加外键。以下是一个基本的步骤说明和示例:

#### 1. 创建带有主键的表(父表)

首先,你需要有一个表,该表包含你想要在其他表中引用的主键。


CREATE TABLE parent_table (
    id INT AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    PRIMARY KEY (id)
);

#### 2. 创建包含外键的表(子表)

然后,你可以创建一个表,该表包含一个或多个外键,这些外键引用父表的主键。


CREATE TABLE child_table (
    id INT AUTO_INCREMENT,
    parent_id INT,
    description VARCHAR(255),
    PRIMARY KEY (id),
    FOREIGN KEY (parent_id) REFERENCES parent_table(id)
        ON DELETE CASCADE -- 可选,指定删除父表记录时,子表的相关记录也删除
        ON UPDATE CASCADE -- 可选,指定更新父表主键时,子表的外键也相应更新
);

在这个例子中,`child_table`的`parent_id`字段是一个外键,它引用了`parent_table`的`id`字段。同时,我们还展示了如何在创建外键时指定`ON DELETE`和`ON UPDATE`的行为,虽然这些选项是可选的。

#### 3. 使用ALTER TABLE添加外键

如果你已经创建了表,并希望之后添加外键,你可以使用`ALTER TABLE`命令。


ALTER TABLE child_table
ADD CONSTRAINT fk_parent_id
FOREIGN KEY (parent_id) REFERENCES parent_table(id)
    ON DELETE CASCADE
    ON UPDATE CASCADE;

在这个例子中,`fk_parent_id`是外键约束的名称,它是可选的,但在有多个外键时,为它们指定名称是一个好习惯。

### 注意

- 确保在创建外键之前,父表和子表已经存在,并且父表的主键字段和子表的外键字段具有兼容的数据类型。

- 外键约束可能会略微降低数据库操作的性能,因为数据库需要执行额外的检查来维护引用完整性。然而,这种性能开销通常是可以接受的,因为它带来了数据完整性的巨大好处。

- 在某些情况下,如分布式数据库或需要高度可用性的场景中,可能需要考虑无外键设计的替代方案。