mysql数据库,外键约束和表关系

Posted 巴蜀秀才

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库,外键约束和表关系相关的知识,希望对你有一定的参考价值。

E-R 图 (实体关系模型)

 

E-R图也称实体-联系图(Entity Relationship Diagram),
  提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

  它是描述现实世界关系概念模型的有效方法。

  是表示概念关系模型的一种方式。

 

  用“矩形框”表示实体型,矩形框内写明实体名称;

  用“椭圆图框”表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;

  用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时

    在”实心线段“旁标上联系的类型(1:1,1:n或m:n)。  

 

 

外键约束

  外键约束 foreign key,保持数据一致性,完整性实现一对一或一对多关系。(因为一个表只存一类信息。用外键来做参照,

保证数据的一致性,可以减少数据冗余)

  外键约束的要求:

    数据表的存储引擎只能为InnoDB;

    外键列和参照列数据类型一致;

    外键必须关联到键上面去,一般情况是关联到,另一张表的主键.

 

建立外键约束:

  建一个表a

  

  再建一个表b,并给它外键约束:

  

  建立外键约束的语句:constraint `外键名` foreign key(ab_id) references `a`(a_id);

            foreign key(ab_id) references `a`(a_id);   默认给予外键名,不会重复。

 

删除外键: alter table `b` drop foreign key dc_id;

  

增加外键:   

  

  注意这里没有指定外键名,我们可以查看它的名字:

   

 

 一对多关系

  举例:学校中一个学院可以有很多的学生,而一个学生只属于某一个学院(通常情况下),学院与学生之间的关系就是一对

多的关系,通过外键关联来实现这种关系。

  建立一个学院表和一个学生表,学生表有一个非空字段ss_id,将它关联到学院的编号(school_id),即学生必须属于某一个学

院。

  

  

  给school表插入数据:

  

  给student表插入数据:

  

  如果插入数据时,ss_id 的值在school表的school_id值中没有则会报错;

 

一对一关系

  举例,学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放在学生表当

中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就是一对一的关系,因为一个学生只

有一条详细信息。用外键加主键的方式来实现这种关系。

  

 

多对多关系:

  举例,学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多

对多关系。对于多对多关系,需要创建第三张关系表,关系表中通过外键加主键的形式实现这种关系。

   先建立课程表:

  

  再建立中间表student_course:

  

  s_id对应于学生表的学生学号;c_id 对应于课程表的课程编号。

 

查询中一些较为常见的函数

#求最大年龄     mysql> SELECT MAX(`age`) FROM `student_details`;

  

#求最小年龄:

  

#其他一些操作:

  

 

mysql数据库查询

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于mysql数据库,外键约束和表关系的主要内容,如果未能解决你的问题,请参考以下文章

mysql进阶

MySQL — 关联

MySQL进阶-(约束多表设计视图备份与还原)

Linux--表的高级操作/外键约束 MySQL数据库管理

Django中ORM外键和表的关系(Django编程-4)

MySQL数据库篇之完整性约束和表关系