zoukankan      html  css  js  c++  java
  • day43_MySql

    • 三大范式
    • 事务
    • 数据库之间的关系
    • 多表查询
    外键约束

    ​ 语法:在新表中:constraints 外键约束名称 foreign key(外键字段名称) references 主表表名(主键字段名) -------------从表添加外键约束关联中包含主表

    ​ 在已有表中添加外键约束:alter table 从表表名 add constraints 外键约束名称 foreign key(外键字段名称) references 主表表名(主键字段名)

    ​ 删除外键:alter table 从表表名 drop foreign key 外键名称

    ​ 级联操作

    ​ 注意:在从表中,修改主表会修改关联不存在的数据是不合法的

    ​ 在主表中,删除从表中已经存在的主表信息,是不合法的,直接删除主表(从表中有记录数据关联)会删除失败

    ​ 概念:在修改或删除主表的主键时,同时会更新或删除从表中的数据,称为级联操作

    ​ 更新级联:on update cascade 级联更新只是创建表的时候创建级联关系,当更新主表中主键,从表中的外键字段会自动更新,

    ​ 删除级联:on delete cascade 级联删除,当删除主表中的主键时,从表中含有该字段的记录值会一并删除

    约束总结
    约束名 关键字 描述
    主键 primary key 唯一不为空
    默认 default 插入数据,若没有赋值,自动赋指定默认值
    非空 not null 该字段不能为null
    唯一 unique 该字段在整个表中只能出现一次
    外键 foreign key 从表中添加外键,关联主表中的主键
    表与表之间关系

    可以分成三类:

    • ​ 一对一:一般情况下,一对一关系基本不用,当发现两张表是一对一关系时,进行合表
    • ​ 一对多:在表关系中出现最多的情况
    • ​ 多对多:从两个方向观察都是1-n的关系
    表之间关系 关系维护与创建
    一对一 合表、互为外键约束、表之间关系很少
    一对多 在从表(多的一方)一方创建外键,关联主表主键字段,先创建主表再创建从表
    多对多 创建中间表,中间表分别添加外键约束,关联各自对应的主键

    数据库的设计范式

    ​ 什么是范式 ?

    ​ 在设计数据库的时候,需要遵从的规范要求,根据这些规范要求设计出合理的数据库。这些规范被称为范式。这些范式针对的是关系型数据库。

    ​ 目前、关系型数据库的设计范式共有6个 从1-5(第5范式又称完美范式) 、巴斯科德范式(BCNF)

    ​ 各种范式呈递次规范,遵从级别越高的范式数据库的冗余越低

    第一范式:1NF

    ​ 数据库中的每一列是不可分割的原子数据项

    第二范式:2NF

    ​ 在第一范式的基础上,非码属性必须完全依赖于码(在第一范式的基础上,消除非主属性对码的部分函数依赖)

    ​ 概念:

    • ​ 1.函数依赖: A--->B 如果通过A属性(属性组)的值、能够确定唯一的B属性值,称B(函数)依赖于A
    • ​ 2.完全函数依赖:A--->B 如果A是一个属性组,则B属性值的确定需要依赖于A属性组中所有的属性值
    • ​ 3.部分函数依赖:A--->B 如果A是一个属性组,则B属性值的确定只需要依赖于A属性组中的某一个或某一些属性值即可
    • ​ 4.传递函数依赖:A--->B、B--->C 如果通过A属性(属性组)的值,可以唯一确定B属性的值,再通过B属性的值可以唯一确定C属性的值,称C传递函数依赖于A
    • ​ 5.码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
      • ​ 主属性:码属性组中的所有属性
      • ​ 非主属性:除主属性外的其他属性
    第三范式:3NF

    ​ 在第二范式的基础上,任何非主属性不依赖于其他的非主属性(在第二范式的基础上,消除传递函数依赖)

    三大范式总结
    范式 特征
    1NF 表中每一列具有原子性(不可分割)
    2NF 消除部分函数依赖,一张表只做一件事
    3NF 消除传递函数依赖,表中每一列都直接依赖于码(主键),不需要通过其他字段(列)间接依赖主键

    多表连接查询

    分类:内连接(显式内连接、隐式内连接)、外连接(左外连接、右外连接)

    笛卡尔积现象:

    ​ 左表的每条记录和右表的每条记录全关联组合,这种效果称为笛卡尔积现象

    ​ 消除笛卡尔积现象

    ​ 添加条件过滤,使用where条件语句,达到过滤掉无效的数据

    内连接:inner join

    ​ 隐式内连接:省略掉内连接关键字 inner join

    ​ select 字段列表 from 表名1,表名2,... where 条件语句;

    ​ 显式内连接:使用内连接关键字 inner join ... on语句(inner可以省略)

    ​ select 字段列表 from 表名1 [ inner] join 表名2 on条件语句;

    ​ 总结:

    ​ 1.查询哪些表

    ​ 2.确定表关联的条件

    ​ 3.使用连接的方式

    ​ 4.确定查询的字段信息,尽量少用 *

    外连接

    ​ 左外连接:left [ outer] join ...on 条件语句(outer可省略)

    ​ select 字段列表 from 左表(主表)left [outer] join 右表(辅表/从表) on 条件语句

    ​ 注意事项:用左表中的记录数据去匹配右表中的记录数据,如果符合条件,则显示,不显示的数据一律显示为null,保证左表中的数据全部显示

    ​ 右外连接:right [ outer] join ...on 条件语句(outer可省略)

    ​ select 字段列表 from 右表(主表)right[outer] join 左表(辅表/从表) on 条件语句

    ​ 注意事项:用右表中的记录数据去匹配左表中的记录数据,如果符合条件,则显示,不显示的数据一律显示为null,保证右表中的数据全部显示

    子查询

    ​ 一个查询的结果是另一个查询的条件,形成查询嵌套,里面的查询称为子查询,一定要出现小括号。

    ​ 子查询的三种情况:

    • ​ 子查询的结果可以是单行单列,只有一个字段,该字段只有一个值

    • ​ 也可以是多行单列,只有一个字段,这个字段有多个值

    • ​ 还可以是多行多列,有多个字段,多个字段分别有多个值

      第一种情况:单行单列

      select
      	d_name
      from 
      	department
      where
      	d_id=(
       select ...   -- 子查询
       );
       -- 特征:我们可以在where后面使用比较运算符  < > >= <= != = 
      

      第二种情况:多行单列

      ​ select 查询字段列表 from 表名 where 字段 in(子查询);

      特征:结果是一个集合或一个数组,夫查询使用in运算符

      select
      	d_name
      from
      	department
      where
      	d_id
      in(
          select 
              d_did
          from
              employee
          where  
          age<(
      		select ...   
       	)
       );
      

      第三种情况:多行多列,一般情况下我们可以作为一张虚拟表,进行关联二次查询,一般需要给这个虚拟表起一个别名来实现

      ​ 语法:select 查询字段列表 from 表名,(子查询) as 新表名 where 条件语句;

      ​ 特征:多行多列不能再使用in运算符或者比较运算符,而是需要进行多表关联,给查询出来的多行多列起别名

      
      

    子查询总结:

    ​ 单行单列:只有一个值,在where后面可以使用比较运算符,作为条件

    ​ 多行单列:是一个集合值或者数组值,在where后面使用的是in运算符,作为条件

    ​ 多行多列:大多数多列结果值是放在from后面的,作为多表关联。可以进行二次条件过滤

    事务

    ​ 什么是事务:一个业务操作中,这个操作要么完全执行成功,要么被撤销,这个业务是一个整体操作,在这个整体中所有的sql语句要么全部执行成功,要么全部被回滚(业务执行失败)

    手动操作事务:

    ​ 三个动作:

    • ​ 开启事务 :start transaction;
    • ​ 提交事务:commit;
    • ​ 回滚事务:rollback;
    -- 开启事务
    start transaction; -- 手动开启事务
    -- 事务sql...
    commit;-- 事务操作无异常,手动提交事务,持久化更改数据库
    rollback;-- 当事务操作出现异常,我们应当让事务回滚
    

    ​ 事务的四大特性:

    ​ 原子性:作为一个整体,不可分割

    ​ 一致性:事务在执行前和执行后数据库中的数据状态是一致的

    ​ 隔离性:事务与事务之间互不影响,在多个事务并发执行的时候应该处于隔离状态

    ​ 持久性:一旦事务执行成功,对数据库的影响是持久化的

  • 相关阅读:
    Lambda表达式、依赖倒置
    ASP.NET vNext 概述
    Uname
    RHEL4 i386下安装rdesktop【原创】
    Taxonomy of class loader problems encountered when using Jakarta Commons Logging(转)
    How to decompile class file in Java and Eclipse
    先有的资源,能看的速度看,不能看的,抽时间看。说不定那天就真的打不开了(转)
    Google App Engine 学习和实践
    【VBA研究】VBA通过HTTP协议实现邮件轨迹跟踪查询
    js正則表達式语法
  • 原文地址:https://www.cnblogs.com/mitoris/p/14238149.html
Copyright © 2011-2022 走看看