Scott

MySQL 外键 4 months ago

sql
1929个字符
共有40人围观

什么是 MySQL 外键?

  • 定义: 外键(Foreign Key)是用于建立两个表之间连接的一种约束,它指向另一个表的主键。
  • 作用:
    • 维护数据完整性: 外键确保一个表中的数据引用了另一个表中存在的数据,防止出现“孤儿数据”。
    • 实现表与表之间的关联: 外键定义了表与表之间的关系,方便进行关联查询。

外键的特点

  • 外键列: 包含外键的列被称为外键列。
  • 参考表: 外键所指向的表被称为参考表。
  • 主键: 外键必须引用参考表中的主键。
  • 级联操作: 可以设置外键的级联操作,当参考表中的数据发生变化时,自动更新或删除相关联的子表数据。

如何创建外键?

1. 在创建表时定义外键

CREATE TABLE customers (
    customer_id INT AUTO_INCREMENT PRIMARY KEY,
    customer_name VARCHAR(255) NOT NULL,
    customer_email VARCHAR(255) UNIQUE,
    customer_city VARCHAR(255),
    customer_country VARCHAR(255)
);

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE
);
  • FOREIGN KEY (customer_id) 指定 orders 表中的 customer_id 列作为外键
  • REFERENCES customers(customer_id) 指定外键引用 customers 表的 customer_id 列(该列必须是主键)。
  • ON DELETE CASCADE: 表示当删除 customers 表中的客户数据时,自动删除 orders 表中相关联的订单数据。

2. 在已存在的表上添加外键

ALTER TABLE orders
ADD FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
  • 使用 ALTER TABLE 语句在已存在的表上添加外键。

3. 级联操作

可以在创建外键时指定级联操作,以定义当参考表中的数据发生变化时,如何处理子表中的相关数据。

  • ON DELETE CASCADE 当删除参考表中的数据时,自动删除子表中相关联的数据。
  • ON UPDATE CASCADE 当更新参考表中的数据时,自动更新子表中相关联的数据。
  • ON DELETE SET NULL 当删除参考表中的数据时,将子表中相关联数据的外键列设置为 NULL
  • ON UPDATE SET NULL 当更新参考表中的数据时,将子表中相关联数据的外键列设置为 NULL
  • ON DELETE NO ACTIONON UPDATE NO ACTION 当删除或更新参考表中的数据时,阻止操作,并引发错误。

示例:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE
);

外键的注意事项

  • 外键列的数据类型必须与参考表主键列的数据类型相同。
  • 外键列可以为空,表示不引用任何数据。
  • 一个表可以有多个外键,引用不同的参考表。
  • 外键约束会影响数据库的性能,特别是在大型表上。

总结

外键是 MySQL 中用于维护数据完整性和实现表之间关联的重要工具。通过合理使用外键,可以确保数据库中数据的一致性和准确性。