gpt4 book ai didi

mysql - sql中的主键

转载 作者:行者123 更新时间:2023-11-29 08:12:07 25 4
gpt4 key购买 nike

我在理解其工作原理时遇到了一些问题。所以我有 2 个表 Students 和 Enrolled,如下所示:

CREATE TABLE Students 
(sid CHAR(20),
name CHAR(50),
email CHAR(30),
age INTEGER,
gr INTEGER)

CREATE TABLE Enrolled
(sid CHAR(20),
cid CHAR(20),
grade CHAR(2),
PRIMARY KEY (sid,cid))

所以我不明白这个特定行PRIMARY KEY (sid,cid)有人可以向我解释它是如何工作的吗?我必须指定我有另一个表 Courses,其中 cid.

相当于这样说:

CREATE TABLE Enrolled
(sid CHAR(20) foreign key references Students(sid),
cid CHAR(20) foreign key references Courses(cid)
)

最佳答案

主键用于标识表。定义为 PRIMARY KEY 的字段或列将在该表中的每一行上包含不同的值,并且必须有一个值(因此,PRIMARY KEY 相当于UNIQUENOT NULL)。

PRIMARY KEY 可以是单个字段,也可以是多个字段,但它始终满足“每一行都有不同的PRIMARY KEY”。

如果您将 2 列的组合声明为 PRIMARY KEY,您将能够拥有以下示例:

CREATE TABLE Enrolled 
(sid CHAR(20),
cid CHAR(20),
grade CHAR(2),
PRIMARY KEY (sid,cid)) --PRIMARY KEY with combination of 2 columns
<小时/>
sid   |   cid   |   grade
1 1 XX
1 2 XX
2 1 XX
2 2 XX
2 3 XX

在此示例中,您可以看到 sid 列或 cid 列分别具有重复值,但没有 (sid , cid) 重复了。

就像PRIMARY KEY用于标识表中的一行一样,当我们想要关联两个表时,我们可以在一个表中定义一个FOREIGN KEY来链接它一个与另一个表。

您的情况是,ENROLLED 表由复合PRIMARY KEY 标识,以表示多对多关系。可以这么说:

  • 学生可以选修多门类(class)。
  • 一门类(class)可以招收多名学生。

enter image description here

注意*:最佳实践是将主键定义为数值,例如integerbigint等,因为它是更好地提高索引性能(所有PRIMARY KEYS本质上都定义了INDEX,并且它们使用“数字”值比使用“字符串”值更快)。

关于mysql - sql中的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21362219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com