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

来源:互联网 发布:opticalflares mac 编辑:程序博客网 时间:2024/05/17 01:24

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表的外键

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


(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));
将课程表的字段分别设置为教师表和学生表的外键,关系如下:


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

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

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

0 0
原创粉丝点击