• MySQL数据库 外键 foreign key


    1.多表关联

    表之间的关系
        一对多/多对多/一对一
    什么时候要分表?
        数据重复/结构混乱/扩展维护性差

    2.外键 约束

    create table 表名(字段名 类型(长度),foreign key(外键的字段名称) refernces 对方表名(对方主键名));

    多对一 举例:部门和员工,部门可有多个员工,员工只能在一个部门

    多对多 举例 一个老师可以教多个学生 一个学生可以被多个老师教,但需要一个中间表,专门储存关联关系

    create table teacher(id int primary key auto_increment,name char(15));
    create table student(id int primary key auto_increment,name char(15));
    #中间表
    create table tsr(
    id int primary key auto_increment,
    t_id int,s_id int,
    foreign key(t_id) references teacher(id),
    foreign key(s_id) references student(id)
    );

    一对一 举例:1.假设学生是由客户转化的,一客户只能产生一个学生,一个学生只能对应一个客户,这样的关系是一对一。使用外键来关联,但是需要给外键加上唯一约束. 2.当一个表字段太多,而常用的字段不多时,可采取垂直分表的方式来提高效率 也有另外一种提升效率的方式,水平分表,表中记录数据太多,效率会降低,可以采取水平分表,字段完全相同。

    create table customer(c_id int primary key auto_increment,
    name char(20),phonenum char(11),addr char(20));
    create table student1(s_id int primary key auto_increment,
    name char(20),
    class char(11),
    number char(20),
    housenum char(20),c_id int UNIQUE,
    foreign key(c_id) references customer(c_id)
    );

    使用外键时 必须分清主从关系
    **外键的第一种约**:束先建主表  再建从表
    **外键的第二个约束**:先插入主表  再插入从表
    **外键的第三个约束**:删除记录时  先删除从表记录  再删主表记录
    **外键的第四个约束**:从表更新外键时  必须保证外键是存在的
    **外键的第五个约束**:更新主表的id时  必须先删除从表关联的数据  或者把关联数据 关联其他的主表id
    **外键的第六个约束**:删除主表时 要先删除从表
    有了这几个约束后,主表和从表中的数据必然是完整的

    3.级联 cascade

    很多情况下,我们就是要删除主表,然而这样需要至少两条sql语句,操作麻烦,这时可以使用级联

    create table 表名(字段名 类型(长度),foreign key(外键的字段名称) refernces 对方表名(对方主键名)on delete cascade); 
    create table 表名(字段名 类型(长度),foreign key(外键的字段名称) refernces 对方表名(对方主键名)on update cascade); 
    on delete cascade 当主表删除记录时 从表相关联的记录同步删除
    on update cascade 当主表id更新时 从表相关联的记录同步更新

    注意这是单向的 主表变化时 级联操作从表 从表的变化不会级联到主表

  • 相关阅读:
    题目
    先贤祠3
    先贤祠2
    先贤祠1
    论文他引次数及ESI高被引论文查询方法
    [唐诗]古风(其三十一)-李白
    [唐诗]古风(其二十四)-李白
    [唐诗]古风(其十九)-李白
    [唐诗]古风(其十五)-李白
    [唐诗]古风(其三)-李白
  • 原文地址:https://www.cnblogs.com/unbrokenlin/p/9995412.html
Copyright © 2020-2023  润新知