10_连表操作

Posted 北门吹雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10_连表操作相关的知识,希望对你有一定的参考价值。

表与表之间关系?

       1对1

       多对多

什么是1对多?

  在多的一方创建一个外键字段,把这个外键字段设置成外键,对应 少的一方主键

    -- 约束插入外键字段时候,数据必须关联表中已经存在的数据

       外键类型和关联字段类型相同

    插入时候,先插入关联表数据,在插入原表数据

如何通过命令创建1对多关系?

       -- 在创建表时候创建外键

              constraint 外键名 foreing key (外键字段) references 关联表名(关联字段)

       -- 在表外外键操作

        -- alter table 表名 drop foreign key 外键名  -- 删除外键

        -- alter table 表名 add constraint 外键名字 foreign key (外键字段) reference 关联表名(字段)

       外键名命名规则 :fk_表名第一个字母_关联表第一个字母

如何通过命令创建多对多关系?

  -- 创建第三张表保存中间关,保存两个多的一方id,

    在第三张表中创建两个外键分别对应两张表的id,

    可以一个id,也可以两个外键联合起来做id

  -- 第三张表如何命令?

         表1名_to_表2名

       -- 字段名怎么创建?

              表1名_id      表2名_id

       为何两个外键可以联合做主键?

              因为每个外键都是组合起来都是唯一的

       如何使两张表建立关系?

              通过insert在第三张表中插入数据,前提是关联的两张表中有这个id

如何通过连表查询?

              -- 1对多查询

      select 表名.字段,关联表.字段 from 表名 left join 关联表名 on 表名.外键字段 = 关联表名.id where 条件

              -- A left join B on 关系     

      -- 以A为主,可以把A中所有数据查出,只显示A对应的B数据,可以进行多次连接,那么说明主表有多个外键

              -- right join                          以B为主,可以把B中所有数据查出,只显示B对应的A数据

              -- inner join                         把没有对应关系的忽略掉

       -- 多对多查询?

              -- select 字段,+ form 第三张表名

      lelft join 第一张表名 on 第三张表名. 第一张表名_id = 第一张表名.id

      lelft join 第二张表名 on 第三张表名. 第二张表名_id = 第二张表名.id    

    where 条件

           -- 本质上是双向的1对多,通过外键表连接关联表

如何进行关系分析?

  -- 求两者之间的关系,要用两个方向去看,

    先把前者看成1,对应后者有多少,再把后者看成1,

    对应前者有多少,多对多其实本质上是双向的一对多

 

以上是关于10_连表操作的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)

ORM之连表操作

连表操作

MySQL-7-连表操作

DJango周总结二:模型层,单表,多表操作,连表操作,数据库操作,事务

Django-Model操作数据库(增删改查连表结构)