【MySQL】数据库开篇

SueWakeup

个人主页:SueWakeup

系列专栏:学习技术栈

个性签名:保留赤子之心也许是种幸运吧


本文封面由 凯楠📸友情提供

目录

本系列传送门

[1. 什么是数据库?](#1. 什么是数据库?)

[2. 为什么使用数据库](#2. 为什么使用数据库)

[3. 数据库的分类](#3. 数据库的分类)

[4. NoSQL 与关系型数据库的比较](#4. NoSQL 与关系型数据库的比较)

[5. 主流的 NoSQL产品](#5. 主流的 NoSQL产品)

[5.1 键值对(K-V)存储](#5.1 键值对(K-V)存储)

[5.2 列族存储](#5.2 列族存储)

[5.3 文档型存储](#5.3 文档型存储)

[5.4 图形数据库](#5.4 图形数据库)

[6. 数据库结构](#6. 数据库结构)

[7. SQL 语句分类](#7. SQL 语句分类)

[8. SQL语句的执行流程](#8. SQL语句的执行流程)

[9. MyISAM 和 InnoDB 的区别](#9. MyISAM 和 InnoDB 的区别)

[10. 数据库设计三大范式](#10. 数据库设计三大范式)

[11. MySQL的表约束](#11. MySQL的表约束)

非空约束

唯一性约束

主键约束

外键约束

检查约束

注:手机端浏览本文章可能会出现 "目录"无法有效展示的情况,请谅解,点击侧栏目录进行跳转


本系列传送门

1. 数据库排名

2.【MySQL】数据库开篇

3.【MySQL】索引篇

4.【MySQL】事务篇

5.【MySQL】锁篇


1. 什么是数据库?

数据库指长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据"仓库"。


2. 为什么使用数据库

  • **结构化:**数据在数据库中的存储依靠二维表结构逻辑存储数据,可以参考数据原有的依赖关系和结构关系去存储数据
  • **共享性:**多个用户可以共同分享计算机数据库中的数据资源,从而实现数据的高效共享性
  • **独立性:**存储在数据库的数据和应用程序之间相互独立、互不影响。
  • **安全性:**数据库在安全性的控制有很多措施,比如访问数据库时对用户的口令,用户的权限进行限制,以及对数据的存储进行限制

3. 数据库的分类

| 数据库分类 | 数据模型 | 举例 |
| 关系型(RDBMS) | 表格 | Oracle、MySQL、SQL Server等 |
| 非关系型(NoSQL) | 键值对(K-V)、文档(Document)、列族(Column Family)、图形 | MongoDB、Redis、Elasticsearch(引擎)、Cassandra等 |
| 对象型 | 以对象作为基本单位 支持面向对象的数据建模和操作 | db4o、Versant等 |
| XML | XML文档 | eXist、BaseX等 |
| 图形 | 图形结构数据 适用于网络关系、社交网络等场景 | Neo4j、FlockDB等 |
| 内存 | 存储在内存中 | SAP HANA、MemSQL等 |

时间序列 存储时间序列 InfluxDB、Prometheus等

4. NoSQL 与关系型数据库的比较

| | NoSQL | 关系型数据库 |
| 优点 | 1. 简单易部署,低成本 2. 查询速度快(数据存储于缓存中) 3. 存储数据多样 4. 扩展性好 | 1. 技术又成熟又早,提供丰富的技术支持和生态系统 2. 标准化查询语句,对数据的操作和管理更方便灵活 3. 支持事务管理,确保数据的一致性、完整性和持久性 4. 存储基础数据,对数据的管理直观简单 |

缺点 1. 相较于关系型数据库发展时间短,维护工具和资料有限 2. 不遵循 SQL 标准,提升了学习和使用成本 3. 不提供关系型数据库对事务的处理 1. 相较于 NoSQL 成本高 2. 存储在磁盘中,速度不及 NoSQL 3. 仅能存储基础数据 4. 类似 join 的多表查询机制限制了扩展性

5. 主流的 NoSQL产品

5.1 键值对(K-V)存储

  • 相关产品:Redis、Voldemort、Berkeley DB
  • 典型应用:内容缓存,主要用于处理大量数据的高访问负载。
  • 数据模型:一系列键值对
  • 优势:快速查询
  • 劣势:存储的数据缺少结构化

5.2 列族存储

  • 相关产品:Cassandra,HBase,Riak
  • 典型应用:分布式的文件系统
  • 数据模型:以列族式存储,将同一列数据存在一起
  • 优势:查找速度快,可扩展性强,更容易进行分布式扩展
  • 劣势:功能相对局限

5.3 文档型存储

  • 相关产品:MongoDB、Elasticsearch、CouchDB
  • 典型应用:Web应用(与 K-V 类似,V是结构化的)
  • 数据模型:一系列键值对
  • 优势:数据结构要求不严格
  • 劣势:缺乏统一的查询语法

5.4 图形数据库

  • 相关产品:Neo4j、InfoGrid、Infinite Graph
  • 典型应用:社交网络数据模型:图结构
  • 优势:利用图结构相关算法
  • 劣势:需要对整个图做计算才能得出结构,不容易做分布式的集群方案

6. 数据库结构

  • **数据库(Database):**以文件的形式存放在磁盘上,即对应于一个或多个物理文件
  • **数据表(Table):**由一组数据记录组成,数据库中的数据以表为单位进行组织
  • **字段(Field):**也称域。表中的每一类称为一个字段。每个字段都有相应的描述信息。
  • **记录(Record):**表中的每一行称为一个记录,由若干字段组成。
  • **索引(Index):**一种特殊类型的表,其中含有关键字段的值和指向表实际记录位置的指针,可以提高访问数据库的效率。
  • **SQL语句:**结构化查询语句命令,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。

7. SQL 语句分类

| 名词 | 解释 | 命令 |
| DDL (数据定义语言) | 定义和管理数据对象, 如数据库,数据表等 | CREATE、DROP、ALTER |
| DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | INSERT、UPDATE、DELETE |
| DQL (数据查询语言) | 用于查询数据库数据 | SELECT |

DCL (数据控制语言) 用来管理数据库的语言,包括管理权限及数据更改 GRANT、COMMIT、ROLLBACK

8. SQL语句的执行流程

  1. **词法分析:**将SQL语句按照语法规则分割成一个个单词(tokens)。例如,SELECT、FROM、WHERE、AND、OR等都是一个单词。
  2. **语法分析:**对单词进行语法解析,判断SQL语句是否符合语法规则。如果不符合,则会抛出语法错误。
  3. **语义分析:**对SQL语句进行语义分析,如表名、列名、数据类型等,确保它们都是正确的。如果有错误,会抛出语义错误。
  4. **查询优化:**对SQL语句进行优化,如选择最优的执行计划、使用索引等来提高查询效率。
  5. **执行SQL:**根据优化后的执行计划,执行SQL语句。执行过程中,会进行锁定、缓存、排序、分组等操作。
  6. **返回结构:**执行完成后,将结果返回给客户端。如果是查询语句,则会返回查询结果;如果是更新语句,则会返回受影响的行数。

9. MyISAM 和 InnoDB 的区别

  • MySQL 5.5 版本之前,MyISAM 引擎是 MySQL 的默认存储引擎,但是,MyISAM 不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复
  • MySQL 5.5 版本之后,MySQL 引入了 InnoDB(事务型数据库引擎),MySQL 5.5 版本后默认的存储引擎为 InnoDB;

| | MyISAM | InnoDB |
| 外键 | 不允许创建外键 | 支持外键 |
| 事务 | 不支持事务 | 事务型数据库引擎,可以使用 Commit 和 Rollback 语句 |
| 并发 | 只支持表级锁(table-level locking) | 支持行级锁(row-level locking)和表级锁,默认为行级锁; |
| 备份(缓存) | 只缓存索引,不缓存真实数据 | 支持在线热备份(缓存索引和真实数据) |

崩溃恢复 MyISAM 崩溃后发生损坏的概率比 InnoDB 高很多,而且恢复的速度也更慢。

10. 数据库设计三大范式

数据库设计范式是数据库在设计过程中,需要遵守的设计准则,避免数据冗余;

特殊情况不一定要三个范式都满足,数据库设计看重需求与性能,需求>性能>表结构

  • 第一范式(1NF): 每个字段都是最小字段,具有原子性,不可再分; 确保每列保持原子性
  • 第二范式(2NF): 每张表必须存在主键,并且其它字段也必须与主键直接依赖,不能仅仅与主键的某一部分依赖(联合主键) 确保表中的每列都和主键相关
  • 第三范式(3NF): 每个字段不能与主键间接依赖,每张表只保存一种数据,表和表之间使用外键关系关联; 确保每列都和主键列直接相关,而不是间接相关

11. MySQL的表约束

约束实际上就是表中数据的限制条件,目的是为了保证表中的记录完整和有效

约束种类:

非空约束

用not null约束的字段不能为null值,必须给定具体的数据

添加:

sql 复制代码
alter table 表名 modify test_student char(10) not null;

删除:

sql 复制代码
alter table 表名 modify 列名 类型

唯一性约束

unique约束的字段,具有唯一性,不可重复,但可以为null

添加:

sql 复制代码
alter table 表名 add unique(表字段名,字段,字段,字段);

删除:

sql 复制代码
alter table 表名 drop index 唯一约束名;

主键约束

表中的一个或多个字段,它的值用于唯一的表示表中的某一条记录

添加:

sql 复制代码
alter table 表名 add primary key(表的字段名,字段,字段);

删除:

sql 复制代码
alter table 表名 drop primary key;

外键约束

某个字段添加外键约束之后,该字段称为外键字段,外键字段中每个数据都是外键值

添加:

sql 复制代码
alter 表名 add constraint N1 foreign key(表字段名)references 父表(父表字段名);

删除:

sql 复制代码
alter table 表名 drop foreign key 外键名;

检查约束

(目前MySQL不支持,Oracle支持)


相关推荐
骆晨学长12 分钟前
基于springboot的智慧社区微信小程序
java·数据库·spring boot·后端·微信小程序·小程序
@月落17 分钟前
alibaba获得店铺的所有商品 API接口
java·大数据·数据库·人工智能·学习
楠枬28 分钟前
MySQL数据的增删改查(一)
数据库·mysql
goTsHgo32 分钟前
从底层原理上解释 clickhouse 保证完全的幂等性
数据库·clickhouse
阿华的代码王国2 小时前
MySQL ------- 索引(B树B+树)
数据库·mysql
Hello.Reader2 小时前
StarRocks实时分析数据库的基础与应用
大数据·数据库
执键行天涯2 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
liupenglove3 小时前
golang操作mysql利器-gorm
mysql·golang
yanglamei19623 小时前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
叫我:松哥3 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap