数据库 基础
2024-03-18 12:19:38 0 举报
AI智能生成
数据库(Database)是一种组织、存储和管理数据的仓库。
作者其他创作
大纲/内容
数据库基础
库概念
数据库
数据库(DataBase 简称 DB)就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。
数据库管理系统
数据库管理系统(Database Management System 简称 DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。
数据库系统
数据库系统(Data Base System,简称 DBS)通常由软件、数据库和数据管理员(DBA)组成。
数据库管理员
数据库管理员(Database Administrator, 简称 DBA)负责全面管理和控制数据库系统。
表概念
元组
元组(tuple)是关系数据库中的基本概念,
关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。
关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。
码
码就是能唯一标识实体的属性,对应表中的列。
候选码
若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识,则称该属性组为候选码。
主码
主码也叫主键。主码是从候选码中选出来的。 一个实体集中只能有一个主码,但可以有多个候选码。
主键用于唯一标识一个元组,不能有重复,不允许为空。一个表只能有一个主键。
外码
外码也叫外键。如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
外键用来和其他表建立联系用,外键是另一表的主键,外键是可以有重复的,可以是空值。一个表可以有多个外键。
主属性
候选码中出现过的属性称为主属性。
非主属性
不包含在任何一个候选码中的属性称为非主属性。
ER 图
ER 图 全称是 Entity Relationship Diagram(实体联系图),提供了表示实体类型、属性和联系的方法。
组成
实体:通常是现实世界的业务对象,当然使用一些逻辑对象也可以。
属性:即某个实体拥有的属性,属性用来描述组成实体的要素,对于产品设计来说可以理解为字段。
联系:即实体与实体之间的关系,在 ER 图中用菱形表示,这个关系不仅有业务关联关系,还能通过数字表示实体之间的数量对照关系。
实体关系
1 对 1(1 : 1)、1 对多(1 : N)、多对多(M : N)
数据库范式
1NF(第一范式)
属性不可再分。
1NF 是所有关系型数据库的最基本要求。
2NF(第二范式)
1NF 的基础之上,消除了非主属性对于码的部分函数依赖。
重要概念
函数依赖(functional dependency)
若在一张表中,在属性(或属性组)X 的值确定的情况下,必定能确定属性 Y 的值,那么就可以说 Y 函数依赖于 X,写作 X → Y。
部分函数依赖(partial functional dependency)
如果 X→Y,并且存在 X 的一个真子集 X0,使得 X0→Y,则称 Y 对 X 部分函数依赖。
完全函数依赖(Full functional dependency)
在一个关系中,若某个非主属性数据项依赖于全部关键字称之为完全函数依赖。
传递函数依赖
在关系模式 R(U)中,设 X,Y,Z 是 U 的不同的属性子集,如果 X 确定 Y、Y 确定 Z,且有 X 不包含 Y,Y 不确定 X,
(X∪Y)∩Z=空集合,则称 Z 传递函数依赖(transitive functional dependency) 于 X。
(X∪Y)∩Z=空集合,则称 Z 传递函数依赖(transitive functional dependency) 于 X。
传递函数依赖会导致数据冗余和异常。
3NF(第三范式)
3NF 在 2NF 的基础之上,消除了非主属性对于码的传递函数依赖 。
比如在关系 R(学号 , 姓名, 系名,系主任)中,学号 → 系名,系名 → 系主任,存在非主属性系主任对于学号的传递函数依赖,所以该表不符合 3NF 的要求。
满足后,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。
外键与级联
缺点
增加了复杂性: a. 每次做 DELETE 或者 UPDATE 都必须考虑外键约束;b. 外键的主从关系是定的,变化很麻烦。
增加了额外工作:数据库需要增加维护外键的工作。
对分库分表不友好:因为分库分表下外键是无法生效的。
优点
保证了数据库数据的一致性和完整性。
级联操作方便,减轻了程序代码量。
外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。
存储过程
可以把存储过程看成是一些 SQL 语句的集合,中间加了点逻辑控制语句。
存储过程在互联网公司应用不多,因为存储过程难以调试和扩展,而且没有移植性,还会消耗数据库资源。
DML 和 DDL
DML(Data Manipulation Language)数据库操作语言,是指对数据库中表记录的操作。
DDL (Data Definition Language)数据定义语言,是对数据库内部的对象进行创建、删除、修改的操作语言。
设计步骤
需求分析 : 分析用户的需求,包括数据、功能和性能需求。
概念结构设计 : 主要采用 E-R 模型进行设计,包括画 E-R 图。
逻辑结构设计 : 通过将 E-R 图转换成表,实现从 E-R 模型到关系模型的转换。
物理结构设计 : 主要是为所设计的数据库选择合适的存储结构和存取路径。
数据库实施 : 包括编程、测试和试运行。
数据库的运行和维护 : 系统的运行与数据库的日常维护。
NoSQL基础
NoSQL(Not Only SQL 的缩写)泛指非关系型的数据库,主要针对的是键值、文档以及图形类型数据存储。
特性
天生支持分布式,数据冗余和数据分片等,旨在提供可扩展的高可用高性能数据存储解决方案。
存储结构绝大部分(比如 HBase、Cassandra、RocksDB)都是基于 LSM 树。
MongoDB 默认使用 B+ 树作为其存储结构,还支持 LSM(Log Structured Merge) 树作为存储结构。
NoSQL 数据库通常不支持事务,但 MongoDB 支持事务。
代表
HBase、Cassandra、MongoDB、Redis
优势
灵活性: 提供灵活的架构,以实现更快速、更多的迭代开发。
可扩展性:通过使用分布式硬件集群来横向扩展,而不是通过添加昂贵和强大的服务器来纵向扩展。
高性能: 针对特定的数据模型和访问模式进行了优化。
强大的功能: 提供功能强大的 API 和数据类型,专门针对其各自的数据模型而构建。
分类
键值:键值数据库是一种较简单的数据库,其中每个项目都包含键和值。
Redis、DynanoDB
文档:文档数据库中的数据被存储在类似于 JSON 对象的文档中,非常清晰直观。
MongoDB
图形:图形数据库旨在轻松构建和运行与高度连接的数据集一起使用的应用程序。
Neo4j、Giraph
宽列:宽列存储数据库非常适合需要存储大量的数据。
Cassandra、HBase
字符集
定义
字符
各种文字和符号的统称,包括各个国家文字、标点符号、表情、数字等等。
字符集
一系列字符的集合。
字符编码
将字符对应二进制数据的过程。
字符解码
二进制数据解析成字符的过程。
ASCII
ASCII (American Standard Code for Information Interchange,美国信息交换标准代码) 是一套主要用于现代美国英语的字符集。
ASCII 字符集
共定义了 128 个字符,其中有 33 个控制字符(比如回车、删除)无法显示。
ASCII 扩展字符集
可以定义 256(2^8)个字符。
GB2312
一种对汉字比较友好的字符集,共收录 6700 多个汉字,基本涵盖了绝大部分常用汉字。
不支持绝大部分的生僻字和繁体字。
GBK
GB2312 字符集的扩展,兼容 GB2312 字符集,共收录了 20000 多个汉字。
GB18030
完全兼容 GB2312 和 GBK 字符集,纳入中国国内少数民族的文字,且收录了日韩汉字,最全面的汉字字符集,共收录汉字 70000 多个。
BIG5
针对的是繁体中文,收录了 13000 多个汉字。
Unicode
包含了世界上几乎所有已知的字符。不过,Unicode 字符集并没有规定如何存储这些字符(也就是如何使用二进制数据表示这些字符)。
UTF-8
UTF-8(8-bit Unicode Transformation Format),包含了世界上几乎所有已知的字符。类似的还有 UTF-16、 UTF-32。使用最广泛。
MySQL字符集
默认
在 MySQL5.7 中,默认字符集是 latin1 ;在 MySQL8.0 中,默认字符集是 utf8mb4。
字符集层次级别
server(MySQL 实例级别)
database(库级别)
table(表级别)
column(字段级别)
连接字符集
和 MySQL 服务器的通信相关的字符集。
JDBC
JDBC 驱动会影响连接字符集。
两套 UTF-8 编码实现
utf8
utf8编码只支持1-3个字节 。但 emoji 符号占 4 个字节,一些较复杂的文字、繁体字也是 4 个字节。
utf8mb4
UTF-8 的完整实现,正版!最多支持使用 4 个字节表示字符,因此,可以用来存储 emoji 符号。
SQL
概念
SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。
数据库(database)
保存有组织的数据的容器(通常是一个文件或一组文件)。
数据表(table)
某种特定类型数据的结构化清单。
模式(schema)
关于数据库和表的布局及特性的信息。模式定义了数据在表中如何存储。数据库和表都有模式。
列(column)
表中的一个字段。所有表都是由一个或多个列组成的。
行(row)
表中的一个记录。
主键(primary key)
一列(或一组列),其值能够唯一标识表中每一行。
语法结构
子句
语句和查询的组成成分。
表达式
可以产生任何标量值,或由列和行的数据库表。
谓词
给需要评估的 SQL 三值逻辑(3VL)(true/false/unknown)或布尔真值指定条件,并限制语句和查询的效果,或改变程序流程。
查询
基于特定条件检索数据。这是 SQL 的一个重要组成部分。
语句
可以持久地影响纲要和数据,也可以控制数据库事务、程序流程、连接、会话或诊断。
语法要点
SQL 语句不区分大小写,但是数据库表名、列名和值是否区分,依赖于具体的 DBMS 以及配置。
多条 SQL 语句必须以分号(;)分隔。
处理 SQL 语句时,所有空格都被忽略。
分类
数据定义语言(DDL)
数据定义语言(Data Definition Language,DDL)是 SQL 语言集中负责数据结构定义与数据库对象定义的语言。
DDL 的主要功能是定义数据库对象。
DDL 的核心指令是 CREATE、ALTER、DROP。
数据操纵语言(DML)
数据操纵语言(Data Manipulation Language, DML)是用于数据库操作,对数据库其中的对象和数据运行访问工作的编程语句。
DML 的主要功能是 访问数据,因此其语法都是以读写数据库为主。
DML 的核心指令是 INSERT、UPDATE、DELETE、SELECT。这四个指令合称 CRUD(Create, Read, Update, Delete),即增删改查。
事务控制语言(TCL)
事务控制语言 (Transaction Control Language, TCL) 用于管理数据库中的事务。用于管理由 DML 语句所做的更改。它还允许将语句分组为逻辑事务。
TCL 的核心指令是 COMMIT、ROLLBACK。
数据控制语言(DCL)
数据控制语言 (Data Control Language, DCL) 是一种可对数据访问权进行控制的指令,
它可以控制特定用户账户对数据表、查看表、预存程序、用户自定义函数等数据库对象的控制权。
它可以控制特定用户账户对数据表、查看表、预存程序、用户自定义函数等数据库对象的控制权。
DCL 的核心指令是 GRANT、REVOKE。
DCL 以控制用户的访问权限为主,因此其指令作法并不复杂,
可利用 DCL 控制的权限有:CONNECT、SELECT、INSERT、UPDATE、DELETE、EXECUTE、USAGE、REFERENCES。
可利用 DCL 控制的权限有:CONNECT、SELECT、INSERT、UPDATE、DELETE、EXECUTE、USAGE、REFERENCES。
增删改查
又称为 CRUD,数据库基本操作中的基本操作。
INSERT INTO、UPDATE、DELETE、TRUNCATE TABLE、SELECT、DISTINCT、LIMIT
排序
ORDER BY 用于对结果集按照一个列或者多个列进行排序。
ORDER BY、DESC、ASC
分组
GROUP BY、HAVING
子查询
嵌套在较大查询中的 SQL 查询,也称内部查询或内部选择,包含子查询的语句也称为外部查询或外部选择。
WHERE、IN、BETWEEN、AND、OR、NOT、LIKE
连接
JOIN 是“连接”的意思,顾名思义,SQL JOIN 子句用于将两个或者多个表联合起来进行查询。
INNER JOIN、LEFT/RIGHT/FULL JOIN、 LEFT/RIGHT/FULL OUTER JOIN、SELF JOIN、CROSS JOIN
组合
UNION 运算符将两个或更多查询的结果组合起来,并生成一个结果集。
UNION、UNION ALL
函数
不同数据库的函数往往各不相同,因此不可移植。
LOWER()、UPPER() 等等
数据定义
CREATE DATABASE、DROP DATABASE、USE
CREATE TABLE、DROP TABLE
ALTER TABLE ... ADD/DROP/MODIFY
视图(VIEW)
定义
视图是基于 SQL 语句的结果集的可视化的表。
视图是虚拟的表,本身不包含数据,也就不能对其进行索引操作。对视图的操作和对普通表的操作一样。
作用
简化复杂的 SQL 操作,比如复杂的联结。
只使用实际表的一部分数据。
通过只给用户访问视图的权限,保证数据的安全性。
更改数据格式和表示。
CREATE VIEW ... AS、DROP VIEW
索引(INDEX)
一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。
优点
使用索引可以大大加快 数据的检索速度(大大减少检索的数据量), 这也是创建索引的最主要的原因。
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
缺点
创建索引和维护索引需要耗费许多时间。当对表中的数据进行增删改的时候,如果数据有索引,那么索引也需要动态的修改,会降低 SQL 执行效率。
索引需要使用物理文件存储,也会耗费一定空间。
CREATE INDEX ... ON、ALTER TABLE ... ADD/DROP INDEX
约束
用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。
NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK、DEFAULT
事务处理
MySQL 默认是隐式提交(可设定),每执行一条语句就把这条语句当成一个事务然后进行提交。
权限控制
要授予用户帐户权限,可以用 GRANT 命令。有撤销用户的权限,可以用 REVOKE 命令。
存储过程(procedure)
可以看成是对一系列 SQL 操作的批处理。不推荐,没有可移植性。
游标(cursor)
一个存储在 DBMS 服务器上的数据库查询,它不是一条 SELECT 语句,而是被该语句检索出来的结果集。
触发器(trigger)
一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。
0 条评论
下一页