MySQL - 复合键

MySQL - 复合键 首页 / MySQL入门教程 / MySQL - 复合键

MySQL中的复合键是表中两列或多于两列的组合,使无涯教程能够唯一地标识表的每一行。它是一种候选关键字,由多列组成。 MySQL仅在将列组合时才保证该列的唯一性。

任何键(例如主键,超级键或候选键)与多个属性组合时,可以称为复合键。当表需要唯一标识具有多个属性的每条记录时,组合键很有用。复合键中使用的列可以具有不同的数据类型。因此,在 MySQL 中创建复合键的列不需要具有相同的数据类型。

可以通过两种方式添加组合键:

链接:https://www.learnfk.comhttps://www.learnfk.com/mysql/mysql-composite-key.html

来源:LearnFk无涯教程网

  1. 使用CREATE语句
  2. 使用ALTER语句

让详细了解两种方式。

使用CREATE语句的组合键

在这里,将了解复合键如何在MySQL中工作。让首先使用以下语句创建表"Product" :

CREATE TABLE Product (
	Prod_ID int NOT NULL, 
	Name varchar(45), 
	Manufacturer varchar(45),
	PRIMARY KEY(Name, Manufacturer)
);

在上面的语句中,无涯教程创建了一个复合主数据库,其列名称为 Name Manufacturer

可以使用以下命令验证相同的内容:

DESCRIBE Product;

成功执行后,可以看到Key列具有两个 PRI 。这意味着无涯教程已经在"Name"和"Manufacturer"列上成功添加了组合主键。

MySQL Composite Key

接下来,需要将值插入下表,如下所示:

INSERT INTO Product (Prod_ID, Name, Manufacturer)
VALUES (101, 'Soap', 'Hamam'),
(102, 'Shampoo', 'Teresme'),
(103, 'Oil', 'Daber Almond');

接下来,执行以下命令以显示表数据:

SELECT * FROM Product;

它将给出以下输出:

MySQL Composite Key

再次执行以下插入语句以更清楚地了解组合键:

INSERT INTO Product (Prod_ID, Name, Manufacturer)
VALUES (101, 'Soap', 'Hamam');

INSERT INTO Product (Prod_ID, Name, Manufacturer)
VALUES (101, 'Soap', 'LUX');

在下面的输出中,可以看到,如果尝试添加具有相同产品名称和制造商的组合,则将抛出错误: product.primary 的重复条目(Duplicate entry)

如果执行第二个insert语句,它将成功添加到表中。

MySQL Composite Key

因此,可以说复合键始终强制该表的列具有两个键,因此它们具有唯一性。

使用ALTER TABLE语句的组合键

ALTER语句始终用于对现有表进行修改。有时需要添加组合键来唯一标识具有多个属性的表的每个记录。在这种情况下,使用 ALTER TABLE语句

让无涯教程首先使用以下语句创建表" Student":

无涯教程网

CREATE TABLE Student(
  stud_id int NOT NULL,
  stud_code varchar(15),
  stud_name varchar(35),
  subject varchar(25),
  marks int
);

现在,执行ALTER TABLE语句以添加复合主键,如下所示:

ALTER TABLE Student add primary key(stud_id, subject);

可以使用以下命令来验证是否将复合主键添加到表中:

DESCRIBE Student;

在输出中,可以看到key列具有PRI,这意味着无涯教程已成功将复合主键添加到 stud_id subject 列中。

MySQL Composite Key

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

程序员的数学基础课 -〔黄申〕

Linux实战技能100讲 -〔尹会生〕

Spring Boot与Kubernetes云原生微服务实践 -〔杨波〕

人人都能学会的编程入门课 -〔胡光〕

Django快速开发实战 -〔吕召刚〕

自动化测试高手课 -〔柳胜〕

结构写作力 -〔李忠秋〕

云时代的JVM原理与实战 -〔康杨〕

Rust 语言从入门到实战 -〔唐刚〕

好记忆不如烂笔头。留下您的足迹吧 :)