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


相关推荐
清水白石00835 分钟前
从一个“支付状态不一致“的bug,看大型分布式系统的“隐藏杀机“
java·数据库·bug
Python私教5 小时前
model中能定义字段声明不存储到数据库吗
数据库·oracle
mqiqe8 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
工业甲酰苯胺8 小时前
MySQL 主从复制之多线程复制
android·mysql·adb
BestandW1shEs8 小时前
谈谈Mysql的常见基础问题
数据库·mysql
重生之Java开发工程师8 小时前
MySQL中的CAST类型转换函数
数据库·sql·mysql
教练、我想打篮球8 小时前
66 mysql 的 表自增长锁
数据库·mysql
Ljw...8 小时前
表的操作(MySQL)
数据库·mysql·表的操作
哥谭居民00018 小时前
MySQL的权限管理机制--授权表
数据库