在 SQL 中,FOREIGN KEY 约束用于定义表与表之间的关系,确保一个表中的外键与另一个表中的主键相匹配。这样的关系通常用于建立表之间的连接。以下是使用 FOREIGN KEY 约束的一些示例:

在创建表时使用 FOREIGN KEY:
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    product_id INT,
    customer_id INT,
    FOREIGN KEY (product_id) REFERENCES products(product_id),
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

在这个例子中,orders 表包含两个外键:product_id 参考自 products 表的 product_id 主键,customer_id 参考自 customers 表的 customer_id 主键。这表示 orders 表中的每个订单必须与 products 表中的产品和 customers 表中的客户相关联。

在修改表时添加 FOREIGN KEY 约束:
-- 在已有的表中添加 FOREIGN KEY 约束
ALTER TABLE orders
ADD CONSTRAINT fk_product FOREIGN KEY (product_id) REFERENCES products(product_id);

这里使用 ALTER TABLE 语句为已有的表 orders 添加 FOREIGN KEY 约束。

外键约束的删除和更新操作:

当使用 FOREIGN KEY 约束时,还可以定义删除和更新关联行的操作。这些操作在父表(被引用表)的主键发生变化时,如何处理子表(包含外键的表)中的对应行。
-- 示例:在创建表时定义外键约束及相关操作
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    product_id INT,
    customer_id INT,
    FOREIGN KEY (product_id) REFERENCES products(product_id)
        ON DELETE CASCADE
        ON UPDATE NO ACTION,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
        ON DELETE SET NULL
        ON UPDATE CASCADE
);

在这个例子中:
  •  ON DELETE CASCADE 意味着如果 products 表中的某个产品被删除,与之相关的所有订单也将被删除。

  •  ON DELETE SET NULL 表示如果 customers 表中的某个客户被删除,与之相关的订单中的 customer_id 将被设置为 NULL。

  •  ON UPDATE CASCADE 表示如果父表中的主键值发生变化,子表中的外键值也会相应地发生变化。


FOREIGN KEY 约束帮助确保数据的完整性,并促使表之间的关系得到维护。


转载请注明出处:http://www.zyzy.cn/article/detail/3346/SQL