• 表与表之间建立关系


    将所有的数据都放在一张表内产生弊端:

      1 表的组织结构不清晰

      2 浪费存储空间

      3 可扩展性极差(修改某一个部门的信息的时候~)

     类似于所有代码都写在一个py文件,如何优化?

      解耦拆分

    如何查找表与表之间的关系

    以员工和部门表为例。查找表关系需要做到换位思考(站在两边去找表关系)

      1 先站在员工表:

        找员工表的多条数据能否对应部门表的一条数据

        翻译:多个员工能否属于一个部门

        可以 之后不能直接下结论,还需要站在部门表的角度再确认关系

      2 再站在部门表:

        找部门表的多条数据能够对应员工表的一条数据 (人为限制一个部门只能有一个相同员工)

        翻译:多个部门能否有同一个员工

        不能

    只有站在两边表的角度都分析过了,才能够下结论:员工表 单向 多对一部门表

    多对一

    外键(foreign key)
    
    1 必须要先建立被关联表
    create table dep(id int primary key auto_increment, dep_name char(16) , dep_desc char(16));

    create table emp (id int primary key auto_increment ,name char(
    16), gender enum('male','female',

    'others') not null default 'male' ,dep_id int , foregin key(dep_id) references dep(id)); #default 后面的默认值空格直接书写即可
    2 插入数据
        新增数据的时候,要先增被关联表中的数据
    insert into dep(dep_name,dep_desc) values
    ('外交部','形象代言人'),
    ('教学部','教书育人'),
    ('技术部','技术能力有限部门');
    
    insert into emp(name,gender,dep_id) values
    ('jason','male',1),
    ('egon','male',2),
    ('kevin','male',2),
    ('tank','male',2),
    ('jerry','female',3);
    
    3 修改emp表中的dep_id字段
    
    update emp set dep_id=100 where id=1;#报错  
    update dep set id=100 where id=1;#报错
    
    
    delete from dep where id=2;  #报错
    
    
    delete from emp where id>1 and id<5;
     
    delete from dep where id=2;
    
    

    给外键字段新增功能 同步更新 同步删除 (级联删除 级联更新)

    create table dep( id int primayr key auto_increment , 
                            dep_name char(16),
                            dep_desc  char(64));
    
    create table emp(id int primary key auto_increment,
                            name char(16),
                            gender enum('male,'female','others') not null default  'male',
                            dep_id int,
                            foreign key(dep_id) references dep(id) 
                            on update cascade #同步更新
                            on delete cascade #同步删除
    );
    
    insert into emp (name ,gender ,dep_id) values 
    ('jason','male',1),
    ('egon','male',2),
    ('kevin','male',2),
    ('tank','male',2),
    ('jerry','female',3);
    
    
    uptate dep set  id =100 where id=2;  #通过被关联对象来更新关联对象
    delete from dep where id=100;  #通过被关联对象来删除关联对象

    多对多

    图书与作者
    #create table book(id int primary key auto_increment, 
                               title char(16),
                               price int,
                               author_id int,
                               foreign key(author_id) references author (id));
    #create table author (id int primary key auto_increment, name char(16), gender char(16), book_id int, foreign key(book_id ) references book(id)); create table book(id int primary key auto_increment, title char(16), price int); create table author (id int primary key auto_increment, name char(16), gender char(16)); create table book2author (id int primary key auto_increment, book_id int, author_id int, foreign key(book_id) references book(id) on update cascade #同时更新 on delete cascade, #同时删除 foreign key(author_id) references author(id) on update cascade #同步更新 on delete cascade #同步删除 ); insert into book(title ,price) values ('小王子','69.96'),('围城','99.99'),('python全站开发','21000'); insert into author (name ,gender) values ('jason','male'), ('egon','female'), ('kevin','male'); insert into book2author (book_id ,author_id) values (1,1), (1,2), (1,3), (2,1), (2,3), (3,1), (3,2);

    一对一

    用户信息  客户学生
    user name password   msg gender phone addr hobby....
    
    create table customer(id int primary key auto_increment,
            name char(20) not null,
            qq char(11) not null,
            phone char(16) not null);
    
    create table sudent(id int primary key auto_increment,
         class_name char(20) not null,
         customer_id int unique ,    #该字段一定要是唯一的
        foreign key(customer_id) references customer(id) #外键的字段一定要保证unique
        on update cascade
        on delete cascade);
     
    #三种外键关系都是用foreign key,区别在于如何使用以及其他条件限制即可做出三种关系

    书籍和作者

    一本书可以不可以被多个作者写   可以  

    一个作者可不可以写多本书    可以

    多对对关系

    书籍和出版社(出版社出了书其他出版社就不出版)

    一本书出版社可以不可以被多个出版社出版  不可以

    一个出版社可不可以出版多本书       可以

    一对多关系

    作者与作者简介

    两个不可以就是

    一对一

    mysql中不识别大小写的

    语法:
        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 旧字段名 新字段名 旧数据类型 [完整性约束条件]; alter table 表名 change 旧字段名 新字段名 新数据类型 [完整性约束条件];

    复制表

    查询语句执行的结果也是一张表,可以看成虚拟表
    
    复制表结构 +记录 (key不会复制:主键,外键和索引)
    
        create table new_server select * from server;
    
    
    复制表结构 (key不会复制:主键,外键和索引)
     select * from server where 1=2; #条件为假,查不到任何记录 

    create table new1_server select * from server where 1=2;
     
    create table t4 like employees; #复制结构 含有主键
            新表名    旧表名
  • 相关阅读:
    工厂模式之数据工厂
    面向过程的命令模式
    DLL共享主窗口的ADOCONNECTION
    插件框架
    人生哲理
    字符串函数大全
    汉化DBNavigator
    类继承复用之适配器模式
    Bootstraptagsinput标系统使用心得
    bootstrapdatepicker使用
  • 原文地址:https://www.cnblogs.com/lakei/p/10863398.html
Copyright © 2020-2023  润新知