📜  mysql 多个主键 - SQL (1)

📅  最后修改于: 2023-12-03 15:03:06.421000             🧑  作者: Mango

MySQL 多个主键 - SQL

在 MySQL 数据库中,每个表都必须有一个主键。主键是用于唯一标识表中每个行的列或列集合。在一些情况下,你可能需要在一个表中有多个主键。本文将介绍在 MySQL 中如何使用多个主键。

什么是多个主键?

在 MySQL 中,一个表有多个主键意味着这些主键列共同标识唯一的行。这种情况下,这些列将被称为联合主键。因此,如果你有一个表,其中有两列分别为 column_acolumn_b,你可以将这两列定义为联合主键。

下面是一个示例表结构,其中 column_acolumn_b 联合组成了主键。

CREATE TABLE `example_table` (
  `column_a` INT NOT NULL,
  `column_b` INT NOT NULL,
  `column_c` TEXT NULL,
  PRIMARY KEY (`column_a`, `column_b`)
);
为什么需要多个主键?

通常情况下,使用单个主键是最常见的情况。不过,有时候单个主键并不能满足你的需求。以下是一些需要使用多个主键的情况:

  • 复合主键:复合主键是需要使用多个列来唯一标识一行的情况。比如,一个学生表可以使用学生 ID 和课程 ID 作为复合主键来识别一名学生选的一门课程。
  • 分区:如果你需要使用分区来优化表的性能,分区所基于的列需要成为主键。这通常涉及到使用多个列作为主键来支持分区。
  • 外键:在关系模型的设计中,可能需要多个列来形成关系,需要定义多个列为主键。
如何定义多个主键?

要定义多个主键,你需要在 CREATE TABLE 语句中在 PRIMARY KEY 关键字后列出所有需要作为主键的列。以下是示例 CREATE TABLE 语句:

CREATE TABLE `example_table` (
  `column_a` INT NOT NULL,
  `column_b` INT NOT NULL,
  `column_c` TEXT NULL,
  PRIMARY KEY (`column_a`, `column_b`)
);

你也可以使用 ALTER TABLE 语句来为已经存在的表新增主键。以下是示例语句:

ALTER TABLE `example_table` ADD PRIMARY KEY (`column_a`, `column_b`);
如何使用多个主键?

当你使用一个表时,可以使用多个主键来过滤、查询、更新或删除行。以下是一些示例:

过滤行
SELECT * FROM `example_table` WHERE `column_a` = 1 AND `column_b` = 2;
插入新行
INSERT INTO `example_table` (`column_a`, `column_b`, `column_c`) VALUES (1, 2, 'Test');
更新行
UPDATE `example_table` SET `column_c` = 'New value' WHERE `column_a` = 1 AND `column_b` = 2;
删除行
DELETE FROM `example_table` WHERE `column_a` = 1 AND `column_b` = 2;
总结

在 MySQL 中,定义多个主键可以帮助你唯一地标识表中的每行数据。定义多个主键有许多用途,包括组合主键、外键和分区。在使用多个主键时,你可以像对待单个主键一样进行操作。