zoukankan      html  css  js  c++  java
  • mysql数据库_关系的创建

    一对多关系建立 

    以部门表与员工表为例

    create  table  dep(
        id int primary key auto_increment,    #创建主键非空且唯一
        dep_name varchar(128),
        dep_desc  varchar(128)
       );    
    
    create  table  emp(
        id int primary key auto_increment,
        emp_name varchar(128),
        emp_gender enum('mail', 'femail', 'others') default 'mail'  #使用枚举选择性别,默认为mail
        dep_id int,                             #创建关联字段
        foreign key (dep_id) references dep(id) #创建与dep表关联的外键dep_id
        on update cascade              #级联更新
        on delete cascade                 #级联删除          #创建与dep表关联的外键,级联更新,级联删除
       );

    插入部门数据

    insert into dep(dep_name, dep_desc) values('销售部', '买卖'),('技术部','搞技术'),('财务部','管钱')

    插入员工数据

    insert into emp(emp_name, emp_gender, dep_id) values('张三', 18, 1),('李四',19,2),('王五', 20, 3),('马六', 21, 1)

    注意:需要在创建关联表之前创建被关联表, 在多的一方去建立外键

    多对多关系建立

    在创建多对多关系的时候, 先把两个普通的表创建出来, 然后创建一个专门存放多对多关系的一个表(第三张表), 使用这张表去做关系绑定

    以图书表和作者表为例

    create  table  book(
        id int primary key auto_increment,
        title varchar(64),
        price int
        );
    
    
    create  table  authors(
        id int primary key auto_increment,
        name varchar(64),
        age int
        );
    
    
    create  table  book_authors(
        id int primary key auto_increment,
        book_id int,
        foreign key(book_id) references book(id)
        on update cascade
        on delete cascade,
        author_id int,
        foreign key(author_id) references authors(id)
        on update cascade
        on delete cascade
        );

    插入书籍数据

    insert into book(title, price) values('围城', 199),('', 187),('柒个我', 299)

    插入作者数据

    insert into authors(name, age) values('张三', 18),('李四', 19)

    插入第三张表数据

    insert into book_authors(book_id, author_id) values(1,1),(1,2),(2,1),(3,1),(3,2)

    一对一关系建立

    在创建一对一的关系时, 外键可以建立在任何一张表, 但是推荐建立在查询频率比较高的那一张表

    以用户表为例

    create  table  authordetail(
        id int primary key auto_increment,
        ipoh int,
        addr varchar(128)
        );
    
    
    create  table  author(
        id int primary key auto_increment,
        name varchar(16),
        age int,
        authordetail_id int unique,          # 一对一关系id不能重复
        foreign key(authordetail) references authordetail(id)
        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 旧字段名 新字段名 新数据类型 [完整性约束条件…];

    复制表

    create  table 新表名  select * from 表名(要复制的表)    # 只会复制表结构,key不会复制: 主键、外键和索引
  • 相关阅读:
    专访周金可:我们更倾向于Greenplum来解决数据倾斜的问题
    APK瘦身记,如何实现高达53%的压缩效果
    2017 先知创新大会:有 ZHI 而来
    【云栖实录】面对正在崛起的移动支付,如何做好数据运营
    【云栖直播】精彩推荐第2期:首届阿里巴巴研发效能嘉年华
    少个人保护?我来!——阿里云在ICANN第3届GDD峰会纪实
    使用99元一年的256MB高性能阿里云Redis加速Discuz论坛
    云数据库HBase助力物联网,免费申请中
    云数据库Redis版256M双机热备款
    干货满满的大数据技术沙龙来了, 24 日北京不见不散
  • 原文地址:https://www.cnblogs.com/chengzige/p/11385844.html
Copyright © 2011-2022 走看看