mysql学习(5):多表之间的关系

mysql相互关联的表之间存在一对一,一对多(多对一),多对多的关系。

1,一对一的关系

这种关系即多个表具有相同的主键,实际中用的并不多,因为完全可以将这种关系的合并为同一张表。

2,一对多(多对一)的关系

其中表1的主键是表2的外键(即表1的某字段作为主键,表2的相同字段字段绑定到表1的主键字段上),举个简单的例子:

有学生表和成绩表如下:

CREATE TABLE stu(
	stuId INT,
	name VARCHAR(10) NOT NULL,
	PRIMARY KEY(stuId)
);
CREATE TABLE score(
	stuId INT,
	score INT,
	FOREIGN KEY (stuId) REFERENCES stu(stuId)
);

stu表中以stuId为主键。score表中同样有stuId字段,将两个stuId字段相关联。


FOREIGN KEY (stuId) REFERENCES stu(stuId)  //这句话表示将当前表的stuId字段关联到stu表的stuId字段,作为stu表的外键

于是,两张表就产生了关系:

mysql学习(5):多表之间的关系_第1张图片

(1)在创建数据时,要先在stu表中指定stuId,才能在score表中添加对应stuId的成绩。反之,想要在score表中创建stuId(而stu表中没有该stuId)的话,就会报错。

(2)在删除表时,要先删除score表,再删stu表。反之会报错。

3,多对多的关系

这种关系在实际中也很常见,比如:一个老师教很多学生的课,一个学生选了很多老师的课。那么,老师和学生之间就是多对多的关系。

多对多的关系要借助于第3张表。举个简单的例子:

(1)首先创建老师表,设置id为主键

CREATE TABLE teacher(
	teacherId INT,
	NAME VARCHAR(10) NOT NULL,
	PRIMARY KEY(teacherId)
);
(2)然后创建学生表,同样设置id为主键

CREATE TABLE stu(
	stuId INT,
	NAME VARCHAR(10) NOT NULL,
	PRIMARY KEY(stuId)
);
(3)最后创建一张表,将前两张表关系起来,如创建一个课程表:

CREATE TABLE score(
	stuId INT,
	teacherId INT,
	FOREIGN KEY (stuId) REFERENCES stu(stuId),
	FOREIGN KEY (teacherId) REFERENCES teacher(teacherId)
);
将课程表的字段分别设置为教师表和学生表的外键,关系如下:

mysql学习(5):多表之间的关系_第2张图片

这样就可以形成多对多的关系了,使用方法同一对多。

(1)首先保证教师表和学生表中有数据,再创建课程表中的数据。

(2)删除表时,先删除课程表,再删除其他表。

你可能感兴趣的:(mysql)