MySQL复合主键(Composite Primary Key)是指由两个或多个字段组成的主键,用于唯一标识表中的每一行记录。复合主键中的每个字段都不能为NULL,并且组合起来在整个表中必须是唯一的。
复合主键可以是单个表的主键,也可以是外键的一部分。
假设有一个订单表 orders
,包含以下字段:
order_id
(订单ID)customer_id
(客户ID)order_date
(订单日期)如果 order_id
和 customer_id
的组合可以唯一标识一条订单记录,那么可以将这两个字段设置为复合主键。
CREATE TABLE orders (
order_id INT,
customer_id INT,
order_date DATE,
PRIMARY KEY (order_id, customer_id)
);
查询示例:
-- 查询特定客户的所有订单
SELECT * FROM orders WHERE customer_id = 123;
-- 查询特定日期和客户的订单
SELECT * FROM orders WHERE order_date = '2023-10-01' AND customer_id = 123;
原因:复合主键查询效率低可能是由于索引设计不合理或查询条件不够优化。
解决方法:
-- 创建复合主键索引
ALTER TABLE orders ADD INDEX idx_order_customer (order_id, customer_id);
原因:复合主键更新涉及到多个字段,可能会导致数据一致性问题。
解决方法:
START TRANSACTION;
UPDATE orders SET order_date = '2023-10-02' WHERE order_id = 1 AND customer_id = 123;
COMMIT;
希望这些信息对你有所帮助!如果有更多问题,欢迎继续提问。
领取专属 10元无门槛券
手把手带您无忧上云