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)删除表时,先删除课程表,再删除其他表。