我正在研究auto_increment,我想自动生成唯一的id主键。问题是我只知道如何使用数字ID。据我所知,主键必须是唯一的。所以我不能为多个表使用数字auto_increment,因为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”之类的东西然后继续增加数量?到目前为止,我还没有遇到过这样的例子。
答案 0 :(得分:1)
我在上面的评论中写了很多,但是让我把它应用到答案中的实际应用中。我们将从您的表开始,然后再添加两个:
<强>表格强>
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.id
和subjects.id
。第三个表student_subject
显示了如何将这些链接在一起,其中student_id
和subject_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)和物理学(学科2)和John Doe。
在这个例子中,每个学生都注册了两个科目,两个学生都注册了一个科目。通过您从 w3schools.com 链接的示例,这种多对多关系是不可能的。
答案 1 :(得分:0)
主键值只需要在表格中唯一,因此您无法为每个表格使用简单的自动增量数字ID。
就问题而言 - 我不相信有直接的方法可以自动增加&#34;您描述的方式中的字符串值。如果你真的想要,可以用触发器和序列(或常规自动增量列)设置一些东西。