mysql 关系_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));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值