SQL 复合键

复合键是表中每行的唯一标识符,由表中两个或多个列组合而成。

示例

CREATE TABLE CustomerOrderShippings (
    customer_id INT,
    order_id INT,
    shipping_id INT,
    PRIMARY KEY (customer_id, order_id, shipping_id)
);

在此,customer_idorder_idshipping_id 共同构成了 CustomerOrderShippings 表的复合主键。


在关系中使用复合键

复合键通常用于在数据库中创建表之间的关系。例如,

CREATE TABLE OrderShippings (
    order_id INT,
    shipping_id INT,
    PRIMARY KEY (order_id, shipping_id)
);

在此示例中,复合键由 `order_id` 和 `shipping_id` 列组成,唯一标识订单与其发货详情之间的每个关系。

注意:当单个列不包含足够的唯一数据作为主键时,复合键尤其有用。


带有外键的复合键

复合键还可以与外键结合使用,以强制执行数据库中的引用完整性。

我们来看一个例子。

CREATE TABLE OrderDetails (
    customer_id INT,
    order_id INT,
    item_name VARCHAR(100),
    PRIMARY KEY (customer_id, order_id),
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id),
    FOREIGN KEY (order_id) REFERENCES Orders(order_id)
);

OrderDetails 表中,customer_idorder_id 的组合起着两个作用

  • 复合主键:它们共同唯一标识 OrderDetails 表中的每条记录,确保没有两条记录是相同的。
  • 复合外键:customer_id 链接到 Customers 表,order_id 链接到 Orders 表。

此设置将订单详情链接到特定的客户和特定的订单。


使用复合键插入记录

向具有复合键的表(参见SQL INSERT INTO)中插入记录与向任何其他表中插入记录类似。例如,

-- create table with composite keys
CREATE TABLE CustomerOrderShippings (
    customer_id INT,
    order_id INT,
    shipping_id INT,
    PRIMARY KEY (customer_id, order_id, shipping_id)
);

-- insert into the table
INSERT INTO CustomerOrderShippings (customer_id, order_id, shipping_id) VALUES
(1, 4, 5),
(4, 2, 2);

此处,SQL 命令将两条记录插入到 CustomerOrderShippings 表中。每条记录都是 customer_idorder_idshipping_id 的组合

  • `(1, 4, 5)` - 表示一条记录,其中 customer_id 为 **1**,order_id 为 **4**,shipping_id 为 **5**。
  • `(4, 2, 2)` - 表示另一条记录,其中 customer_id 为 **4**,order_id 为 **2**,shipping_id 为 **2**。

这些组合形成了唯一标识表中每行的复合键。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战