zoukankan      html  css  js  c++  java
  • 数据库学习

      今天学习了多表关联、修改表、复制表和蠕虫复制

      一、多表关联:

        如何找出两张表之间的关系

        1、先站在左表的角度去找

        是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id)

        2、再站在右表的角度去找

        是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段 foreign key 左表一个字段(通常是id)

        3、总结:

        多对一:

        如果只有步骤1成立,则是左表多对一右表

        如果只有步骤2成立,则是右表多对一左表

        多对多:

        如果步骤1和2同时成立,则证明这两张表是一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系

        一对一:

        如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可

        建立表之间的关系

        #一对多或称为多对一

        三张表:出版社,作者信息,书

        一对多(或多对一):一个出版社可以出版多本书

        关联方式:foreign key

        

    create table press(
    id int primary key auto_increment,
    name varchar(20)
    );
    
    create table book(
    id int primary key auto_increment,
    name varchar(20),
    press_id int not null,
    foreign key(press_id) references press(id)
    on delete cascade
    on update cascade
    );
    
    insert into press(name)  values
    ('北京工业地雷出版社'),
    ('人民音乐不好听出版社'),
    ('知识产权没有用出版社');
    
    insert into book(name,press_id) values
    ('九阳神功',1),
    ('九阴真经',2),
    ('九阴白骨爪',2),
    ('独孤九剑',3),
    ('降龙十巴掌'),
    ('葵花宝典',3);

      多对多

      三张表:出版社,作者信息,书

      多对多:一个作者可以写多本书,一本书也可以用多个作者,双向的一对多,即多对多

      关联方式:foreign key +一张新的表

    create table auther(
    id int primary key auto_increment,
    name varchar(20)
    );
    
    create table book(
    id int primary key auto_increment,
    name varchar(20)
    );
    
    #这张表就存放作者表与书表的关系,即查询二者的关系查这表就可以了
    create table author2book(
    id int not null unique auto_increment,
    author_id int not null,
    book_id int not null,
    constraint fk_author foreign key(author_id) references author(id) 
    on delete cascade
    on update cascade,
    constraint fk_book foreign key(book_id) references book(id)
    on delete cascade
    on update cascade,
    primary key(author_id,book_id)
    );
    #插入四个作者,id依次排开
    insert into author(name) values('egon'),('alex'),
    ('yuanhao'),('wpq');
    
    #插入六本书,id依次排开
    insert into book(name) values('九阳神功'),
    ('九阴真经'),
    ('九阴白骨爪'),
    ('独孤九剑'),
    ('降龙十巴掌'),
    ('葵花宝典');
    
    insert into author2book(author_id,book_id) values(1,1),
    (1,2),
    (1,3),
    (1,4),
    (1,5),
    (1,6),
    (2,1),
    (2,6),
    (3,4),
    (3,5),
    (3,6),
    (4,1);

      一对一:

      两张表:学生表和客户表

      一对一:一个学生是一个客户,一个客户有可能变成一个学校,即一对一的关系

      关联方式:foreign key +unique

    #一定是student来foreign key表customer,这样就保证了:
    #1 学生一定是一个客户,
    #2 客户不一定是学生,但有可能成为一个学生
    
    create table customer(
    id int primary key auto_increment,
    name varchar(20) not null,
    qq varchar(10) not null,
    phone char(16) not null
    );
    create table student(
    id int primary key auto_increment,
    class_name varchar(20) not null,
    customer_id int unique, #该字段一定要是唯一的
    foreign key(customer_id) references customer(id)#外键的字段一定要保证unique
    on delete cascade
    on update cascade
    );
    #增加客户
    insert into customer(name,qq,phone) values
    ('李飞机','1224542',1234567891),
    ('王大炮','1224542',1234567891),
    ('守榴弹','1224542',1234567891),
    ('吴坦克','1224542',1234567891),
    ('战地雷','1224542',1234567891);
    
    #增加学生
    insert into student(class_name,customer_id) values
    ('脱产3期',3),
    ('周末19期',4),
    ('周末19期',5);

      二、修改表、复制表和蠕虫复制:

        1.修改表

          add 添加字段

          modify 修改字段类型

          change 修改字段名称 或 类型

          drop 删除字段

          rename 改表名

        2.复制表

          create table 新的表名 select *from 源表名;

            数据 结构  约束不能复制

          当条件不成立时 只复制表结构

          create table 新的表名 select * from 源表名 where 1 = 2;

          create table stu_copy2 select * from student1 where 1 = 2;

        3.蠕虫复制

         即自我复制

         insert into 表名称 select *from 表名;

         如果有主键 避开主键字段

         insert into 表名称(其他字段) select 其他字段 from 表名;

         

  • 相关阅读:
    Shell编程进阶 2.2 shell数组
    Shell编程进阶 2.1 shell函数
    win7将 esc与 capslock 互换
    Vimium 快捷键记录
    mysql-server 的一些记录
    2003服务器断开rdp后会自动注销。
    CentOS云服务器数据盘分区和格式化
    autoproxy 规则
    理解MySQL——索引与优化
    Spinnaker简介
  • 原文地址:https://www.cnblogs.com/xiaocaiyang/p/9997405.html
Copyright © 2011-2022 走看看