MySQL-外键对应关系

前言:

当我们用mysql数据库建表时,如果所有信息都记录在一张表中会出现哪些问题?

  1.表的结构不清晰,

  2.浪费硬盘空间

  3.表的扩展性极差(无法忽略的缺点)

所以

  出现表的拆分,这样就涉及到表与表之间的关联性

 

一、表与表之间建关系

  如何让两种表有代码层面上真正的关联,就必须使用外键了

    外键就是让表与表有硬性层面上的关系。

  对应方式:

    一对多

    多对多  (三张表)

    一对一

  外键约束(foreign key(关联id) reference  关联表名(id)

    1.在创建表的时候,必须先创建被关联表

    2.插入数据的时候,也必须先插入被关联表的数据

 

二、同步更新、删除

  on update cascade(添加外键约束后,一起为一行)

  on delete cascade

 

三、关系举例

  判断表关系的最简单的语句

    图书与出版社

      一本书是否可有多个出版社——否

      一个出版社是否可出版多本书——是

        即一对多的关系

    图书与作者表

      一本书是否可有多个作者——是

      一个作者是否可出多本书——是

        即多对多的关系

    作者与作者详情

      一个作者是否可有多个详情——否

      一个作者详情是否可有多个作者——否

        即一对一关系或没有任何关系

 

四、修改完整语句  

  1. 修改表名
    ALTER TABLE 表名
      RENAME 新表名;
  2. 增加字段
    ALTER TABLE 表名
      ADD 字段名 数据类型 [完整性约束条件…],
      ADD 字段名 数据类型 [完整性约束条件…];
    ALTER TABLE 表名
      ADD 字段名 数据类型 [完整性约束条件…] FIRST; # 直接移到最前面
    ALTER TABLE 表名
      ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; # 寻找插哪个字段的后面
  3. 删除字段
    ALTER TABLE 表名
      DROP 字段名;
  4. 修改字段 # modify只能改字段数据类型完整约束,不能改字段名,但是change可以!
    ALTER TABLE 表名
      MODIFY 字段名 数据类型 [完整性约束条件…];
    ALTER TABLE 表名
      CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

        # 查询语句执行的结果也是一张表,可以看成虚拟表

    # 复制表结构+记录 (key不会复制: 主键、外键和索引)
    create table new_service select * from service;

    # 只复制表结构
    select * from service where 1=2;        //条件为假,查不到任何记录

    create table new1_service select * from service where 1=2;  

    create table t4 like employees;    
复制表

 

posted @ 2019-08-20 16:01  小王八+1  阅读(386)  评论(0编辑  收藏  举报