复合键是表中每行的唯一标识符,由表中两个或多个列组合而成。
示例
CREATE TABLE CustomerOrderShippings (
customer_id INT,
order_id INT,
shipping_id INT,
PRIMARY KEY (customer_id, order_id, shipping_id)
);
在此,customer_id、order_id 和 shipping_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_id 和 order_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_id、order_id 和 shipping_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**。
这些组合形成了唯一标识表中每行的复合键。