gpt4 book ai didi

mysql - SQL auto_increment 非 int-only 值

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

我正在研究 auto_increment,我想自动生成唯一的 id 主键。问题是我只知道如何使用数字 ID 来做到这一点。据我所知,主键必须是唯一的。所以我不能对多个表使用数字自动增量,因为 id 不会是唯一的。我现在是这样做的:

CREATE TABLE students (
id int(3) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name char(20),
lastname char(20)
);

据我所知,除非我指定不同的起始编号,否则这将生成如下 id:1、2、3、4。是否可以自动递增“stud_1”或“stud_01”之类的内容,然后继续增加数字?目前我还没有遇到过这样的例子。

最佳答案

我在上面的评论中写了很多,但让我在答案中将其应用到实际应用中。我们将从您的表格开始,然后再添加两个表格:

表格:

CREATE TABLE students (
id int(3) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name char(20),
lastname char(20)
) ENGINE = INNODB;

CREATE TABLE subjects (
id int(3) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name char(20)
) ENGINE = INNODB;

CREATE TABLE student_subject (
student_id int(3) NOT NULL,
subject_id int(3) NOT NULL,
PRIMARY KEY(student_id, subject_id)
FOREIGN KEY(student_id) references students(id),
FOREIGN KEY(subject_id) references subjects(id)
) ENGINE = INNODB;

通过设置这样的表,可以在同一数据库中拥有多个数字auto_increment主键列。在本例中,有两个 students.idsubjects.id。第三个表 student_subject 展示了如何将它们链接在一起,其中 student_idsubject_id 都是该表的主键,但每个表都是其各自的外键实体表也是如此。

通过这样的设置,查询变得简单:

示例查询:

/* Get All students */
SELECT
students.id,
students.name,
students.lastname
FROM students;

/* Get All Subjects */
SELECT
subjects.id,
subjects.name
FROM subjects;

/* Get all subjects for a particular student */
SELECT
subjects.name
FROM subjects
INNER JOIN student_subject ON subjects.id = student_subject.subject_id
INNER JOIN students ON student_subject.student_id = students.id
WHERE students.id = 1;

编辑:

下面是一些示例数据,演示了上述结构说明的三表多对多概念:

/* Students Table */
+----+----------------+----------------+
| id | name | lastname |
+----+----------------+----------------+
| 1 | John | Doe |
|----|----------------|----------------|
| 2 | Joe | Bob |
+----+----------------+----------------+

/* Subjects Table */
+----+----------------+
| id | name |
+----+----------------+
| 1 | Calculus |
|----|----------------|
| 2 | Physics |
|----|----------------|
| 3 | Geography |
+----+----------------+

/* Student Subject Table */
+------------+------------+
| student_id | subject_id |
+------------+------------+
| 1 | 1 |
|------------|------------|
| 1 | 2 |
|------------|------------|
| 2 | 2 |
|------------|------------|
| 2 | 3 |
+------------+------------+

通过这个表结构,每个学生可以有多个科目,每个科目可以属于多个学生。例如,John Doe(学生 1)注册了微积分(科目 1)和物理(科目 2)。 Joe Bob(学生 2)就读于地理(科目 3),并与 John Doe 一起学习物理(科目 2)。

在此示例中,每个学生都注册了两个科目,并且两个学生都注册了一个科目。对于您从 w3schools.com 链接到的示例,这种多对多关系是不可能的。

关于mysql - SQL auto_increment 非 int-only 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41173105/

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