MySQL之表关系

MySQL表关系

一对多关系

一对多与多对一是一个概念,指的是一个实体的某个数据与另外一个实体的多个数据有关联关系。 举例,学校中一个学、院可以有很多的学生,而一个学生只属于某一个学院(通常情况下),学院与学生之间的关系就是一对多的关系,通过外键关联来实现这种关系。

#创建学院表:
mysql> CREATE TABLE `department`(
    -> `id` INT PRIMARY KEY AUTO_INCREMENT,
    -> `name` VARCHAR(10) NOT NULL,
    -> `code` INT NOT NULL
    -> );
#创建学生表
mysql> CREATE TABLE `student`(                                                                                             
    -> `id` INT PRIMARY KEY AUTO_INCREMENT,
    -> `name` VARCHAR(10) NOT NULL,
    -> `dep_id` INT,
    -> CONSTRAINT `stu_dep_for_key` FOREIGN KEY (`dep_id`) REFERENCES `department`(`id`) ON DELETE RESTRICT                     
    -> );

#插入数据
mysql> INSERT INTO `department`(`name`,`code`)
    -> VALUES('理学院',01),
    -> ('计算机学院',02)
    -> ;
mysql> SELECT * FROM `department`;

mysql> INSERT INTO `student`(`name`,`dep_id`)
    -> VALUES('budong',1),
    -> ('awen',1),
    -> ('dongdong',2);
mysql> SELECT * FROM `student`;

一对一关系

举例,学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放在学生表当中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就是一对一的关系,因为一个学生只有一条详细信息。用外键加主键的方式来实现这种关系。

mysql> DESCRIBE `student`;

#建立学生的详细信息表
mysql> CREATE TABLE `student_details`(
    -> `id` INT PRIMARY KEY AUTO_INCREMENT,
    -> `id_card` INT NOT NULL UNIQUE KEY,
    -> `telephone` INT,
    -> `stu_id` INT,
    -> CONSTRAINT `stu_deta_for_key` FOREIGN KEY (`stu_id`) REFERENCES `student`(`id`) ON DELETE CASCADE
    -> );

#插入数据
mysql> INSERT INTO `student_details`(`id_card`,`telephone`,`stu_id`)
    -> VALUES(4301,133,1),
    -> (4302,157,2);
#这里信息一一对应,所以一般会同步插入

多对多关系

一个实体的数据对应另外一个实体的多个数据,另外实体的数据也同样对应当前实体的多个数据。

举例,学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多对多关系。对于多对多关系,需要创建第三张关系表,关系表中通过外键加主键的形式实现这种关系。

#创建课程表
mysql> CREATE TABLE `course`(
    -> `id` INT PRIMARY KEY AUTO_INCREMENT,
    -> `name` VARCHAR(20) NOT NULL
    -> );

mysql> CREATE TABLE `select`(
    -> `stu_id` INT,
    -> `coures_id` INT,
    -> PRIMARY KEY(`stu_id`,`coures_id`),
    -> CONSTRAINT `select_stu_id_for_key` FOREIGN KEY (`stu_id`) REFERENCES `student`(`id`),
    -> CONSTRAINT `select_coures_id_for_key` FOREIGN KEY (`coures_id`) REFERENCES `course`(`id`)
    -> );

CREATE TABLE select(stu_id INT,course_id INT,PRIMARY KEY(stu_id,course_id),CONSTRAINT select_stu_id_for_key FOREIGN KEY (stu_id) REFERENCES students(id),CONSTRAINT select_course_id_for_key FOREIGN KEY (course_id) REFERENCES course(id));

create table select(stu_id int, course_id int,primary key(stu_id,course_id),constraint select_stu_id_for_key foreign key (stu_id) references students(id),constraint select_course_id_for_key foreign key (course_id) references course(id));

原文地址:https://www.cnblogs.com/biechishaobing/p/10853776.html