mysql表的关系

作者: 运维阿文 | 来源:发表于2017-09-26 16:42 被阅读55次

    数据库表的关系

    • 一对多关系
      一对多与多对一是一个概念,指的是一个实体的某个数据与另外一个实体的多个数据有关联关系。
      举例,学校中一个学、院可以有很多的学生,而一个学生只属于某一个学院(通常情况下),学院与学生之间的关系就是一对多的关系,通过外键关联来实现这种关系。
    #创建学院表:
    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`)
        -> );
    

    相关文章

      网友评论

        本文标题:mysql表的关系

        本文链接:https://www.haomeiwen.com/subject/udyjextx.html