一、基本概念

1、什么是 DB ?什么是 DBMS ?他们之间的联系和区别是什么?
1.1、Data:数据,是数据库中存储的基本对象,是描述事物的符号记录。
1.2、DB:数据库,是长期储存在计算机内、有组织的、可共享的大量数据的集合。
1.3、DBMS:数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,用于科学地组织、存储和管理数据、高效地获取和维护数据。
1.4、DBS:数据库系统,指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成。
1.5、实体和属性:客观存在并可相互区别的事物称为实体。实体所具有的某一特性称为属性。
1.6、E-R图:即实体-关系图,用于描述现实世界的事物及其相互关系,是数据库概念模型设计的主要工具。
1.7、关系模式:从用户观点看,关系模式是由一组关系组成,每个关系的数据结构是一张规范化的二维表。
数据库是通过DBMS创建和操纵的容器。数据库可以是保存在硬设备上的文件,也可以不是。用户并不直接访问数据库,而是使用DBMS,DBMS为人们提供方便、高效的环境来存储和检索数据的方法。

二、数据库分类

1.关系型数据库
关系数据库是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示,它是数据存储的传统标准,标准数据查询语言sql就是一种关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。

  • oracle
  • mysql/madiadb 开源
  • posgresSQL 开源
  • hana - 国产
  • sqlserver 微软
  • openguass - 华为 国产
  • gaussdb 100,200,300 企业级,金融级应用 - 华为 国产
  • DB2 - IBM
  • oceanbase - 阿里,世界上最强大的数据库 国产
  • 梦达 国产
  • gloldenSQL …. mysql衍生品
  • Tsql 腾讯 国产 - mysql开源改的

    信创

国产数据库 -

国产操作系统

  • 深度 linux deepin
  • 银行麒麟 linux
  • 统信 UOS

2.非关系型数据库 (NOSQL,Not Only SQL)
非关系型数据库主要是基于“非关系模型”的数据库(由于关系型太大,所以一般用“非关系型”来表示其他类型的数据库)。非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。优点是格式灵活,可存储文档、图片等形式的数据,且速度快、扩展性高、成本低。

  • mongodb
  • redis
  • memcache
  • hbase

他们特点是 key->value

  • 时序数据库
    influxdb
  • 图数据库
    存储社会关系,有向无环图

三、数据库事务的四大特性

1. 原子性:事务包含的所有操作要么全部执行成功,要么事务包含的 所有操作回滚。
2. 一致性:一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态。也就是说一个书屋之前和执行之后都必须处于一致性的状态。假设 用户A和B钱加起来一共1000,那么不管转账几次操作几次他们两个的钱加起来还是1000块。这就是事务的一致性。
3. 隔离性:隔离性是指当多个用户同时访问一张表,数据库中每个用户开启的事务之间相互隔离互不干扰。
4.持久性:持久性是指事务的操作,一旦提交,对于数据库中的数据的改变是永久性的,即使数据库发生故障也不能丢失已提交事务所完成的改变。

四、数据库三大范式

1、第一范式(1NF)
所谓第一范式(1NF)是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。
在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。
特点:属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)
2、第二范式(2NF)
在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)。
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。例如在员工表中的身份证号码即可实现每个一员工的区分,该身份证号码即为候选键,任何一个候选键都可以被选作主键。在找不到候选键时,可额外增加属性以实现区分,如果在员工关系中,没有对其身份证号进行存储,而姓名可能会在数据库运行的某个时间重复,无法区分出实体时,设计辟如ID等不重复的编号以实现区分,被添加的编号或ID选作主键。(该主键的添加是在ER设计时添加,不是建库时随意添加)。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。
特点:满足第一范式;
第二范式需要确保数据表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言),每张表只描述一件事情;
消除部分依赖,要求一张表中的每一列都完全依赖于主键(针对于组合主键),也就是不会出现某一列只和部分主键相关。
3、第三范式(3NF)
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)。
第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。
特点:前提:满足第一范式和第二范式;
第三范式需要确保数据表中的每一列数据表和主键直接相关,而不能间接相关;
消除传递依赖,要求一张表中的每一列都和主键是直接依赖的,不是间接依赖。

五、数据库模型

数据库模型是用来抽象、表示和处理现实世界中的数据和信息的工具,是对现实世界的模拟,是数据库系统的核心和基础;其组成元素有数据结构、数据操作和完整性约束。
数据库模型是一个描述数据、数据联系、数据语义以及一致性约束的概念工具的集合,提供了一种描述物理层、逻辑层和视图层数据库设计的方式。

1、数据库模型:数据库模型的表现形式分为三种,分别是概念模型、逻辑模型和物理模型。
概念模型:也称信息模型,是按用户的观点来对数据和信息建模,主要用于数据库设计。
逻辑模型:是按计算机系统的观点对数据建模,用于DBMS实现。
物理模型:是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。
2、数据库架构(数据库抽象)
模型的结构部分规定了数据如何被描述(例如树、表等),它描述了在数据库中结构化和操纵数据的方法。数据库的抽象层次有三层,从下至上分别是物理层、逻辑层和视图层。
物理层:记录被描述为存储块,编译器为程序员屏蔽了此状态。
逻辑层:用定义类型、定义记录类型的相互关系进行描述每个记录。
视图层:屏蔽了数据类型细节的一组应用程序,提供了防止用户访问数据库的某些部分的安全性机制。
这种架构保证了物理模式隐藏在逻辑模式下,且通常可以在应用程序丝毫不受影响的情况下被更改。

六、四大数据库语言

SQL语言共分为四大类:数据查询语言DQL,数据定义语言DDL,数据操纵语言DML,数据控制语言DCL。
1、DQL(Data Query Language):数据库查询语言—–数据表记录的查询。
例如:select
2.DDL(Data Definition Language):数据库定义语言—–定义关系模式、删除关系、修改关系模式。
如:create,drop,alter,truncate
3.DML(Data Manipulation Language):数据库操纵语言—–在数据库表中更新,增加和删除记录
如:update,insert,delete
4.DCL(Data Control Language):数据库控制语言—–用来授权或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果。
如:grant,revoke,commit,rollback work

七、E-R图

E-R图:也称实体-关系图,是用来显示了实体集之间关系的。它提供了表示实体类型、属性和联系的方法;用来描述现实世界的概念模型。
在E-R图中,实体集是一组相似的实体(数据模型中的数据对象),这些实体可以具有属性。在数据库系统中,实体是数据库中的表或表中的属性,因此通过显示表及其属性之间的关系,ER图显示了数据库的完整逻辑结构。
1、实体(entity):
实体代表数据模型中数据对象或组件,例:人、学生、音乐都可以作为一个数据对象;在ER图中用矩形来表示。
在数据模型中存在一种特殊的实体:弱实体,它无法通过其自身属性唯一标识并依赖于与其他实体的关系。在ER图中,弱实体用双矩形来表示。
注:每个实体都有自己的实体成员或者说实体对象,但这些成员或对象是不需要出现在ER图中的。
2、属性(attribute):
属性代表实体所具有的属性,例:一个人具有的姓名、年龄、地址等属性;在ER图中用椭圆形来表示,有四种类型的属性:
1)、关键属性:可以唯一地标识实体集中的实体
2)、复合属性:属于其他属性组合的属性
3)、多值属性:可以包含多个值的属性称为多值属性,用双椭圆表示。
4)、派生属性:值是动态的,并且是从另一个属性派生来的,用虚线椭圆表示。
3、关系(relationship):
关系是用来表现实体之间的联系,在ER图中用菱形来表示,有四种类型的关系:
1)、一对一
2)、一对多
3)、多对一
4)、多对多

八、数据库事务

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
事务是必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时 由于交叉执行而导致数据的不一致。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

九、数据库锁

一、全局锁:顾名思义,全局锁执行后,整个库都锁定。有读锁和写锁,加锁和解锁方式如下:
加锁:flush tables WITH READ LOCK;解锁:UNLOCK TABLES;
使用场景:做全库的逻辑备份;
二、表级锁:有读锁和写锁,加锁和解锁方式如下:
加锁:LOCK TABLES role READ;解锁:UNLOCK TABLES;
使用场景—1、读密集型。2、写作不频繁的场景。3、数据量不大的简单应用。4、全表更新或者删除;
触发表锁的命令:1、ALTER TABLE。2、DROP TABLE 或者 TRUNCATE TABLE。3、LOCK TABLES。 4、全表扫描或者大范围扫描。5、加全局锁。
风险:1、性能下降。2、多表操作,如果没有按照一定顺序操作表,可能会导致死锁;
三、行级锁:粒度上区分:共享锁和排他锁。
主要由INNODB存储引擎提供,包含共享锁(读锁,也是S锁)和排他锁(写锁,也是X锁)。实际使用中,还有一种间隙锁,会锁定行锁前后的间隙,防止数据插入。
使用场景:1、高并发读写操作。2、单行操作。3、短期锁。4、实现并发控制。5、复杂的事务处理;
触发表锁的命令:
1、select … for update:添加一个排他锁;
2、select … LOCK IN SHARE MODE:添加一个共享锁;
3、INSERT、UPDATE、DELETE:添加排他锁;
风险:1、死锁。2、锁升级:事务锁定行过多,可能导致上升到表锁。3、锁等待。4、资源消耗。5、难调试和排查。6、事务隔离级别;
模式上区分:乐观锁和悲观锁
乐观锁:认为冲突概率低,操作数据时,不会锁定数据,只有在提交修改时,才检查。如果数据已被修改,则回滚,否则提交。
标志SQL:1、select id,version from .xxx …;2、update xxx set … where … and version = 旧version;
乐观锁使用场景:1、低冲突环境。2、读多写少场景。3、短事务操作。4、分布式系统。5、互联网应用。
风险:1、冲突检测:只有提交时才检测,有冲突会导致所有都回滚。2、依赖于版本管理。
悲观锁:一种并发控制方法。认为冲突概率高,每次读写前都加锁;
使用方式:参考前面提到的共享锁(S锁)和排他锁(X锁);
使用场景:1、写操作比较多。2、并发冲突高。3、业务需要强一致性的场景。
缺点:1、性能开销。2、并发降低。3、死锁。4、锁超时。

十、字段的数据类型

  1. 字符数据类型

  2. 精确数值数据类型

  3. 近似数值数据类型

  4. 二进制数据类型

  5. 日期和时间数据类型

作者:liuyang  创建时间:2023-09-14 14:56
最后编辑:严锋  更新时间:2024-07-01 09:29