【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支持)


相关推荐
中草药z14 分钟前
【Spring】深入解析 Spring 原理:Bean 的多方面剖析(源码阅读)
java·数据库·spring boot·spring·bean·源码阅读
地球资源数据云15 分钟前
全国30米分辨率逐年植被覆盖度(FVC)数据集
大数据·运维·服务器·数据库·均值算法
Ahern_1 小时前
Oracle 普通表至分区表的分区交换
大数据·数据库·sql·oracle
夜半被帅醒1 小时前
MySQL 数据库优化详解【Java数据库调优】
java·数据库·mysql
不爱学习的啊Biao1 小时前
【13】MySQL如何选择合适的索引?
android·数据库·mysql
破 风2 小时前
SpringBoot 集成 MongoDB
数据库·mongodb
Rverdoser2 小时前
MySQL-MVCC(多版本并发控制)
数据库·mysql
醒了就刷牙2 小时前
黑马Java面试教程_P9_MySQL
java·mysql·面试
m0_748233642 小时前
SQL数组常用函数记录(Map篇)
java·数据库·sql
dowhileprogramming2 小时前
Python 中的迭代器
linux·数据库·python