zoukankan      html  css  js  c++  java
  • 数据库基础知识复习(转)

    1.     数据视图与数据模型

    数据抽象共有三个层次:物理层、逻辑层和视图层。在逻辑层使用的数据模型包括两类:一类是概念数据模型,主要用于数据库设计,它能被一般的用户理解,与人的思维表达方式比较接近。这样的模型有实体-联系模型(ERM);另一类是逻辑数据模型,按计算机系统的观点对数据建模,使得数据更适合用计算机加以表示。这里模型主要用于DBMS的实现,比如关系模型、面向对象模型、层次模型和网状模型。设计师构建数据库模式的方法通常是首先使用E-R模型在高层对数据建模,然后再将其转变成关系模型。在物理层使用的数据模型称为物理数据模型。

    数据模型通常由数据结构、数据操作和完整性约束三部分组成。

    2.     数据库语言

    根据功能不同,可以将数据库系统提供的语言分成三种类型:1)数据定义语言(DDL),用于定义数据库模式;2)数据操纵语言(DML),用于对数据库进行查询和更新;3)数据控制语言(DCL),用于对数据进行权限管理。

    3.     数据库模式

    根据数据的不同抽象层次,数据库有三级模式:物理模式(内模式)在物理层描述数据库中全体存储结构和存取方法,而逻辑模式(概念模式)则在逻辑层描述数据库中全体数据的逻辑结构和特征。在视图层也可分为若干模式,称为子模式(外模式),它描述了数据库用户能够看见和使用的局部数据的逻辑结构和特征。通常一个数据库只有一个物理模式和一个逻辑模式,但是子模式有若干个。

    4.     E-R图

    E-R图由以下元素构成:1)矩形,代表实体型;2)椭圆,代表属性;3)菱形,代表联系;4)线段,将属性和实体性相连,或将实体型和联系相连。

    5.     关系模型

    关系模型由关系数据结构、关系操作集合和关系完整性约束三部分构成。在关系模型中,现实世界实体以及实体间的联系均用关系来表示。

    关系模型中常用的关系操作包括:选择、投影、连接、除、并、交、差等查询操作和增加、删除、修改两大部分。关系操作的特点是集合操作方式,即操作的对象和结果都是集合。关系操作可以使用两种方式定义:基于代数的定义称为关系代数;基于逻辑的定义称为关系演算。由于使用变量的不同,关系演算又分为元组关系演算和域关系演算。

    关系模型允许定义三类完整性约束:实体完整性、参照完整性和用户定义完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件。实体完整性规则是:关系的主码不能取空值。参照完整性规则是:外码必须是另一个表中主码的有效值,或者是“空值”。

    6.     连接运算

    连接运算是从两个关系的乘运算结果中选取属性间满足一定条件的元组,构成新的关系。连接运算有两种:等值连接和自然连接。自然连接要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。

    7.     SQL

    关系数据库系统支持三级模式结构,其模式(数据库)、外模式和内模式中的基本对象有表、视图和索引。因此SQL的数据定义功能包括模式定义、表定义、视图定义和索引定义。SQL通常不提供修改模式定义、修改视图定义和修改索引定义。用户如果想修改这些对象,只能先将它们删除,然后再重建。

    8.     基本表的操作

    1)       创建表

    create table 基本表名

    (列名类型,

    ……

    完整性约束,

    ……

    )

    完整性约束主要有三种子句:主键子句(primary key)、外键子句(foreignkey)和检查子句(check)。

    2)       修改表

    alter  table  <基本表名>  add  <列名>  <类型>

    alter  table  <基本表名>  drop  <列名>  <类型>  [cascade | restrict](cascade表示所有引用到该列的视图和约束也要一起自动删除;restrict表示在没有视图或约束引用该属性时,才能在本表中删除该列,否则拒绝删除。)

    alter  table  <基本表名>  modify  <列名>  <类型>

    3)       撤销表

    drop  table  <基本表名>  [cascade | restrict]

    9.     SQL查询

    where子句中可以使用下列运算符:

    l  算术运算符

    l  逻辑运算符

    l  字符串匹配运算符,包括like,not like

    l  集合成员资格运算符,包括in,not in

    l  谓词,包括exists,all,some,unique

    l  聚合函数,包括avg,min,max,sum和count

    l  还可以是另一个select语句

    select语句完整语法:

            select  目标表的列名或列表达式序列

            from 基本表名和(或)视图序列

            [where 行条件表达式]

            [group by  列名序列]

                   [having  组条件表达式]

            [order by 列名[asc | desc]]

    整个语句的执行过程如下:

    1)       读取from子句中基本表、视图的数据,执行笛卡尔积操作;

    2)       选取满足where子句中给出的条件表达式的元组;

    3)       按group子句中指定列的值分组,同时提取满足having子句中组条件表达式的那些组;

    4)       按select子句中给出的列名或列表达式求值输出;

    5)       order子句对输出的目标表进行排序,按附加说明asc升序排列,或按desc降序排列。

    10. 视图

    创建视图:

            create view <视图名> [<列名> <列名>…]

            as <子查询>

            [with check option]

    with checkoption表示对视图进行增删改是要保证操作的行满足视图定义中的谓词条件(即子查询中的条件表达式)。

    视图最终是定义在基本表之上的,对视图的一切操作最终也要转换为对基本表的操作。视图的好处:

    l  视图能够简化用户的操作

    l  视图是用户能以多种角度看待同一数据

    l  视图对重构数据库提供了一定程度的逻辑独立性

    l  视图能够对机密数据提供安全保护

    11. 事务

    事务是一系列的数据库操作,是数据库应用程序的基本单元,是反映现实世界需要以完整单位提交的一项工作。事务是用户定义的一个数据库操作序列。

    事务的四个特征:原子性、一致性、隔离性和持久性。

    事务处理包括数据库恢复和并发控制。数据库恢复有两个目的:保证事务的原子性和使数据库能恢复到正确状态。

    数据恢复的原理概括为冗余,建立冗余数据最常用的技术是数据转储和登录日志文件。数据转储是由DBA定期地将整个数据库复制到磁盘或另一个磁盘上保存起来的过程。

    12. 触发器

    一个触发器用来定义一个条件以及在该条件为真时需要执行的动作。通常,触发器的条件以断言的形式定义。动作以过程的形式定义。

    13. 索引

    请参考网页:MySQL索引背后的数据结构及算法原理
    ————————————————
    版权声明:本文为CSDN博主「yutianzuijin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/yutianzuijin/java/article/details/12243751

    文章目录
    1.事务四大特性
    2.数据库隔离级别
    3.MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景
    4.索引有B+索引和hash索引
    5.聚集索引和非聚集索引
    6.索引的优缺点,什么时候使用索引,什么时候不能使用索引
    7.InnoDB索引和MyISAM索引的区别
    8.索引的底层实现(B+树,为何不采用红黑树,B树)重点
    9.B+树的实现
    10.为什么使用B+Tree
    11.Sql的优化
    12.索引最左前缀问题
    13.索引分类,索引失效条件
    14.数据库的主从复制
    15.long_query怎么解决
    16.varchar和char的使用场景
    17.数据库连接池的作用
    19.分库分表,主从复制,读写分离
    20.数据库三范式
    21.关系型数据库和非关系型数据库区别
    22.数据库中join的left join , inner join, cross join
    23.有哪些锁,select时怎么加排它锁
    24.死锁怎么解决
    25.最左匹配原则

    1.事务四大特性

     原子性,要么执行,要么不执行
      
    隔离性,所有操作全部执行完以前其它会话不能看到过程
    
    一致性,事务前后,数据总额一致
    
    持久性,一旦事务提交,对数据的改变就是永久的

    2.数据库隔离级别

    多个事务读可能会道理以下问题
    脏读:事务B读取事务A还没有提交的数据
    不可重复读:,一行被检索两次,并且该行中的值在不同的读取之间不同时
    幻读:当在事务处理过程中执行两个相同的查询,并且第二个查询返回的行集合与第一个查询不同时
    这两个区别在于,不可重复读重点在一行,幻读的重点 ,返回 的集合不一样

    示例图,Id =1这一行


    幻读,返回的集合不一样

    隔离级别总结


    3.MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景
    引擎 特性
    MYISAM 不支持外键,表锁,插入数据时,锁定整个表,查表总行数时,不需要全表扫描
    INNODB 支持外键,行锁,查表总行数时,全表扫描
    4.索引有B+索引和hash索引
    索引 区别
    Hash hash索引,等值查询效率高,不能排序,不能进行范围查询
    B+ 数据有序,范围查询
    5.聚集索引和非聚集索引
    索引 区别
    聚集索引 数据按索引顺序存储,中子结点存储真实的物理数据
    非聚集索引 存储指向真正数据行的指针
    6.索引的优缺点,什么时候使用索引,什么时候不能使用索引

    索引最大的好处是提高查询速度,
    缺点是更新数据时效率低,因为要同时更新索引
    对数据进行频繁查询进建立索引,如果要频繁更改数据不建议使用索引。

    7.InnoDB索引和MyISAM索引的区别

    一是主索引的区别,InnoDB的数据文件本身就是索引文件。而MyISAM的索引和数据是分开的。
    二是辅助索引的区别:InnoDB的辅助索引data域存储相应记录主

    8.索引的底层实现(B+树,为何不采用红黑树,B树)重点
    树 区别
    红黑树 增加,删除,红黑树会进行频繁的调整,来保证红黑树的性质,浪费时间
    B树也就是B-树 B树,查询性能不稳定,查询结果高度不致,每个结点保存指向真实数据的指针,相比B+树每一层每屋存储的元素更多,显得更高一点。
    B+树 B+树相比较于另外两种树,显得更矮更宽,查询层次更浅
    9.B+树的实现

    一个m阶的B+树具有如下几个特征:
    1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
    2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
    3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素

    10.为什么使用B+Tree

    索引查找过程中就要产生磁盘I/O消耗,主要看IO次数,和磁盘存取原理有关。
    根据B-Tree的定义,可知检索一次最多需要访问h个节点。数据库系统的设计者巧妙利用了磁盘预读原理,
    将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入
    局部性原理与磁盘预读

    11.Sql的优化
    1.sql尽量使用索引,而且查询要走索引

    2.对sql语句优化

    子查询变成left join
    limit 分布优化,先利用ID定位,再分页
    or条件优化,多个or条件可以用union all对结果进行合并(union all结果可能重复)
    不必要的排序
    where代替having,having 检索完所有记录,才进行过滤
    避免嵌套查询
    对多个字段进行等值查询时,联合索引

    12.索引最左前缀问题
    如果对三个字段建立联合索引,如果第二个字段没有使用索引,第三个字段也使用不到索引了
    1
    13.索引分类,索引失效条件
    索引类型 概念
    普通索引 最基本的索引,没有任何限制
    唯一索引 与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
    主键索引 它是一种特殊的唯一索引,不允许有空值。
    全文索引 针对较大的数据,生成全文索引很耗时好空间。
    组合索引 为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则

    失效条件
    条件是or,如果还想让or条件生效,给or每个字段加个索引
    like查询,以%开发
    内部函数
    对索引列进行计算
    is null不会用,is not null 会用

    14.数据库的主从复制
    复制方式 操作
    异步复制 默认异步复制,容易造成主库数据和从库不一致,一个数据库为Master,一个数据库为slave,通过Binlog日志,slave两个线程,一个线程去读master binlog日志,写到自己的中继日志一个线程解析日志,执行sql,master启动一个线程,给slave传递binlog日志
    半同步复制 只有把master发送的binlog日志写到slave的中继日志,这时主库,才返回操作完成的反馈,性能有一定降低
    并行操作 slave 多个线程去请求binlog日志
    15.long_query怎么解决

    设置参数,开启慢日志功能,得到耗时超过一定时间的sql

    16.varchar和char的使用场景
    类型 使用场景
    varchar 字符长度经常变的
    char 用字符长度固定的
    17.数据库连接池的作用

    维护一定数量的连接,减少创建连接的时间
    更快的响应时间
    统一的管理

    19.分库分表,主从复制,读写分离

    读写分离,读从库,写主库
    spring配置两个数据库,通过AOP(面向切面编程),在写或读方法前面进行判断得到动态切换数据源。

    20.数据库三范式

    第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
    第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。
    第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系: 关键字段 → 非关键字段x → 非关键字段y

    上面的文字我们肯定是看不懂的,也不愿意看下去的。接下来我就总结一下:

    • 首先要明确的是:满足着第三范式,那么就一定满足第二范式、满足着第二范式就一定满足第一范式
    • 第一范式:字段是最小的的单元不可再分
      • 学生信息组成学生信息表,有年龄、性别、学号等信息组成。这些字段都不可再分,所以它是满足第一范式的
    • 第二范式:满足第一范式,表中的字段必须完全依赖于全部主键而非部分主键。
      • 其他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依赖于主键,也就成了唯一的
      • 学号为1024的同学,姓名为Java3y,年龄是22岁。姓名和年龄字段都依赖着学号主键。
    • 第三范式:满足第二范式,非主键外的所有字段必须互不依赖
      • 就是数据只在一个地方存储,不重复出现在多张表中,可以认为就是消除传递依赖
      • 比如,我们大学分了很多系(中文系、英语系、计算机系……),这个系别管理表信息有以下字段组成:系编号,系主任,系简介,系架构。那我们能不能在学生信息表添加系编号,系主任,系简介,系架构字段呢?不行的,因为这样就冗余了,非主键外的字段形成了依赖关系(依赖到学生信息表了)!正确的做法是:学生表就只能增加一个系编号字段。

    参考链接:


    21.关系型数据库和非关系型数据库区别
    关系型数据库

    优点
    
    1、容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;
    
    2、使用方便:通用的SQL语言使得操作关系型数据库非常方便;
    3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;
    4、支持SQL,可用于复杂的查询。
    5.支持事务
    
    缺点
    1、为了维护一致性所付出的巨大代价就是其读写性能比较差;
    2、固定的表结构;
    3、不支持高并发读写需求;
    4、不支持海量数据的高效率读写

    非关系型数据库

    1、使用键值对存储数据;
    2、分布式;
    优点
    无需经过sql层的解析,读写性能很高
    基于键值对,数据没有耦合性,容易扩展
    存储数据的格式:nosql的存储格式是key,value形式
    缺点
    不提供sql支持

    22.数据库中join的left join , inner join, cross join

    1.以A,B两张表为例
    A left join B
    选出A的所有记录,B表中没有的以null 代替
    right join 同理
    
    2.inner join
    A,B有交集的记录
    
    3.cross join (笛卡尔积)
    A中的每一条记录和B中的每一条记录生成一条记录
    例如A中有4条,B中有4条,cross join 就有16条记录

    23.有哪些锁,select时怎么加排它锁
    锁 概念
    乐观锁 自己实现,通过版本号
    悲观锁 共享锁,多个事务,只能读不能写,加 lock in share mode
    排它锁 一个事务,只能写,for update
    行锁 作用于数据行
    表锁 作于用表
    24.死锁怎么解决

    找到进程号,kill 进程

    25.最左匹配原则

    最左匹配原则是针对索引的
    举例来说:两个字段(name,age)建立联合索引,如果where age=12这样的话,是没有利用到索引的,
    这里我们可以简单的理解为先是对name字段的值排序,然后对age的数据排序,如果直接查age的话,这时就没有利用到索引了,
    查询条件where name=‘xxx’ and age=xx 这时的话,就利用到索引了,再来思考下where age=xx and name=’xxx‘ 这个sql会利用索引吗,
    按照正常的原则来讲是不会利用到的,但是优化器会进行优化,把位置交换下。这个sql也能利用到索引了


    ————————————————
    版权声明:本文为CSDN博主「wending-Y」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_22222499/article/details/79060495

  • 相关阅读:
    2.1 CDN Bypass
    4.1 SQL Injection
    ztosec/secscan-authcheck 安装部署教程
    浏览器的内部构造
    左右值的概念
    网络安全学习路线
    Python+Typora博客图片上传
    微信欢乐五子棋辅助
    [SUCTF 2019]EasySQL
    [护网杯 2018]easy_tornado (SSTI)
  • 原文地址:https://www.cnblogs.com/zl1991/p/13047943.html
Copyright © 2011-2022 走看看