【MySQL 保姆级教学】数据库基础(重点)(2)

目录

  • [1. 什么是数据库](#1. 什么是数据库)
    • [1.1 数据库的定义](#1.1 数据库的定义)
    • [1.2 mysql 和 mysqld](#1.2 mysql 和 mysqld)
    • [1.3 文件和数据库](#1.3 文件和数据库)
  • [2. 数据库的分类](#2. 数据库的分类)
  • [3. 连接数据库](#3. 连接数据库)
    • [3.1 数据库的安装](#3.1 数据库的安装)
    • [3.2 连接服务器(数据库)](#3.2 连接服务器(数据库))
    • [3.3 服务器 数据库 表 三者的关系](#3.3 服务器 数据库 表 三者的关系)
  • [4. 数据库-表 和目录-文件 的关系](#4. 数据库-表 和目录-文件 的关系)
  • [5. MySQL 框架](#5. MySQL 框架)
  • [6. SQL 分类](#6. SQL 分类)
  • [7. 储存引擎](#7. 储存引擎)

1. 什么是数据库

1.1 数据库的定义

数据库(Database)是一种按照数据结构来组织、存储和管理数据的仓库。通过数据库管理系统(Database Management System, DBMS),用户可以方便地对数据进行创建、查询、更新和删除等操作。数据库的主要目的是有效地存储和管理数据,以便于多个用户或应用程序能够高效、安全地访问和共享数据。

简单的说就是一套给我们提供数据存储的服务的网络程序。

口头上的数据库一般指:在磁盘或者内存中存储特定结构的数据 --- 在磁盘上存储的一套数据方案

数据库的主要特征

  1. 数据结构化:
    数据库中的数据是以特定的结构组织的,例如表格形式(关系型数据库)、文档形式(NoSQL 数据库)等。这种结构化的方式使得数据更容易管理和查询。
  2. 数据独立性:
    数据独立性是指数据的物理存储与逻辑结构之间的分离。这意味着用户可以不必关心数据是如何存储的,只需关注如何使用数据。数据独立性分为物理数据独立性和逻辑数据独立性。
  3. 数据共享:
    多个用户或应用程序可以同时访问同一个数据库中的数据,从而实现数据的共享和协作。
  4. 数据控制:
    数据库管理系统提供了多种机制来控制数据的访问和操作,包括用户权限管理、事务管理、备份和恢复等,确保数据的安全性和一致性。
  5. 数据冗余减少:
    通过数据的集中管理和规范化设计,数据库可以减少数据冗余,提高数据的一致性和完整性。
  6. 数据持久性:
    数据库中的数据是持久化的,即使系统关闭或重启,数据也不会丢失。

1.2 mysql 和 mysqld

  • 客户端 (mysql)

    定义:mysql 是一个命令行工具,用于连接到 MySQL 服务器并执行 SQL 命令。它是用户与 MySQL 服务器进行交互的主要方式。

    用途:用户通过 mysql 客户端发送 SQL 查询、查看查询结果、管理数据库等。

    使用场景:当你需要手动执行 SQL 语句、查看数据库状态、创建和删除数据库、表等操作时,通常会使用 mysql 客户端。

  • 服务器端 (mysqld)

    定义:mysqld 是 MySQL 的数据库服务器进程。它是后台运行的守护进程,负责处理来自客户端的所有请求。

    用途:mysqld 负责管理数据文件、处理查询、执行事务、维护数据的一致性和完整性等。

    使用场景:通常情况下,mysqld 会在系统启动时自动运行,并在后台持续运行,等待客户端的连接请求。

那MySQL数据库是 mysql 还是 mysqld 呢?

我们使用的抖音也有客户端和服务端,好比回答 抖音是客户端还是服务端呢?抖音的客户端和服务端一起工作保证正常使用抖音。

mysql本质:基于C(mysql) S(mysqld)模式的一种网络服务。

既然是一种网络服务,那么会绑定端口号(启动服务器需要使用端口号)

查询端口号:netstat -lntp

1.3 文件和数据库

存储数据用文件就可以了,为什么还要弄个数据库?

文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

一般的文件确实提供了数据的存储功能,但文件没有提供非常好的数据管理能力(用户角度)

什么是数据管理能力?

比如,给你一个文件,里面包含一万条手机号码,请你找出180开头的所有手机号。普通的文件能快出的找出吗?程序员自己找吗?

数据库作用?

对数据内容存储的一套解决方案,给数据库服务端要求(找出所有180开有的手机号),数据库服务端直接给出结果,不用程序员自己去找。

为了解决上述问题,专家们设计出更加利于管理数据的东西------数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。

2. 数据库的分类

主流数据库:

  • SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电
    商,SNS,论坛。对简单的SQL处理效果好。
  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研
    究使用,可以免费使用,修改和分发。
  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库
    中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的
    低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

数据库的类型

  • 关系型数据库(Relational Database):
    关系型数据库是最常见的数据库类型,数据以表格的形式存储,每个表由行和列组成。常用的 SQL 语言用于查询和管理数据。典型的例子包括 MySQL、Oracle、Microsoft SQL Server 和 PostgreSQL。
  • 非关系型数据库(NoSQL Database):
    非关系型数据库用于处理大规模、非结构化或半结构化数据。它们通常具有灵活的 schema 设计和水平扩展能力。常见的 NoSQL 数据库包括 MongoDB、Cassandra、Redis 和 DynamoDB。
  • 对象关系型数据库(Object-Relational Database):
    对象关系型数据库结合了关系型数据库和面向对象数据库的特点,支持对象的封装、继承和多态等特性。例如,PostgreSQL 就支持对象关系型特性。
  • 层次型数据库(Hierarchical Database):
  • 层次型数据库以树状结构组织数据,每个记录有一个父记录和多个子记录。典型的例子包括 IBM 的 IMS 系统。
  • 网络型数据库(Network Database):
    网络型数据库允许每个记录有多个父记录和多个子记录,形成更为复杂的网状结构。典型的例子包括 IDMS(Integrated Data Management System)。

数据库管理系统(DBMS)

数据库管理系统(Database Management System, DBMS)是用于创建、管理、维护和操作数据库的软件。DBMS 提供了用户与数据库交互的接口,支持数据的定义、查询、更新和管理。常见的 DBMS 包括:

  • 关系型数据库管理系统(RDBMS):如 MySQL、Oracle、SQL Server、PostgreSQL。
  • 非关系型数据库管理系统(NoSQL DBMS):如 MongoDB、Cassandra、Redis。
  • 对象关系型数据库管理系统(ORDBMS):如 PostgreSQL。
  • 层次型数据库管理系统:如 IBM IMS。
  • 网络型数据库管理系统:如 IDMS。

数据库的应用

数据库广泛应用于各种领域,包括但不限于:

  • 企业信息系统:管理客户关系、供应链、库存等。
  • 电子商务:处理订单、支付、物流等。
  • 金融系统:管理账户、交易、风险管理等。
  • 医疗保健:存储患者记录、医疗影像等。
  • 社交媒体:管理用户信息、动态、消息等。
  • 物联网:收集和分析传感器数据。

3. 连接数据库

3.1 数据库的安装

保姆级安装教程

3.2 连接服务器(数据库)

  1. 命令:mysql -h 8.148.27.113 -P 3306 -u root -p

    说明:

    -h:登录mysql的主机的地址

    -P:mysql在该主机的端口号

    -u:登录mysql的用户名称

    -p:密码(我的mysql没有设置密码,不需要输入)

  2. 如果没有写 -h 127.0.0.1 默认是连接本地,如果没有写 -P 3306 默认是连接3306端口号,

    在本地主机中有配置文件,可以直接去掉-h和-P

    命令:mysql -u root -P

  3. 在mysql服务中退出mysql

    命令:quit

3.3 服务器 数据库 表 三者的关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多
    个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

数据库服务器、数据库和表的关系如下:

表是数据逻辑存储结构:行列式结构(二维)

4. 数据库-表 和目录-文件 的关系

使用mysql建立一个数据库,在数据库中建立一张表结构,插入一些数据 ------ 对比一下mysql在linux中是如何表现的

  1. 先查询数据库存储在哪个目录

    命令:vim /etc/my.cnf

    我的数据的数据库存储在/var/lib/mysql 目录中

  2. 进入到该目录

    命令:cd /var/lib/mysql

    查看数据库文件,命令:ls

    标记的就是当前的数据库

  3. 进入mysql客户端,在mysql中查询数据库

    命令:show databases;

  4. 观察

    同学们可以观察到 Linux 中标记的目录就是当前 mysql 的数据库的名称

  5. 此时我在创建一个study_1 数据库,然后再进入到 /var/lib/mysql 目录并打开,可以看看发生了什么


    所以,我们在mysql中新建的数据库其实就是在linux中新建一个目录。

  6. 我们打开这个数据库的目录

  7. 在mysql的study_1数据库中创建一个表后再次打开数据库目录

    在mysql的study_1数据库中创建一个表test(不用管命令是什么意思,我们证明的是数据库中的数据是文件)

    (1)创建一个表格

    (2)再打开目录后发现有新文件产生

  8. 我们还可以查看文件的大小

    命令:ls -l study_1

    记住此时文件的大小(标记处是文件的大小)

  9. 在表中插入数据

  10. 再次查看文件的大小

    命令:ls -l study_1

我们发现,文件的大小没有改变;但并不是没有数据,而是mysql内部的优化造成的。其实,已经把数据存入文件中了。

总结:

  1. 建立数据库,本质是在linux中创建一个目录

  2. 在数据库中创建表,本质是在linux中创建对应的文件。

这个工作时谁做的呢?

答:mysqld 做的。/var/lib/mysql 中的文件不需要我们来操作,mysqld 自己去操作。

5. MySQL 框架

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、

Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体

系结构的一致性。

  1. Client Connectors: 连接器层提供了多种语言的接口,例如 JDBC、ODBC、.NET、PHP、Python、Perl 和 C API,用于连接到 MySQL 服务器。应用程序可以通过这些接口发送查询请求,并接收响应结果。

  2. MySQL Server: MySQL 服务器是整个系统的中心,负责处理来自客户端的各种请求。它由多个模块组成,如下所示:

    • Services & utilities: 提供备份恢复、安全、复制和分区等功能的服务和实用工具。
    • SQL Interface: 解析和执行 SQL 查询的接口。
    • Connection Pool: 连接池管理、认证和安全性相关的功能。
    • Parser: 分词器、语法分析器和语义分析器,用于解析 SQL 查询。
    • Optimizer: 查询优化器,用于确定最佳查询执行计划。
    • Caches: 包括全局缓存和引擎特定缓存,提高性能。
  3. Pluggable Storage Engines: MySQL 支持可插拔式存储引擎,每个引擎都有自己的特性。MyISAM 是一个非事务性引擎,适用于读取密集型应用;InnoDB 则是一个事务性引擎,支持 ACID 事务和外键约束;Federated 引擎将多个 MySQL 实例链接在一起;Archive 引擎适合存储大量数据而不需要频繁更新的应用;Merge 引擎用于合并多个 MyISAM 表;Memory 引擎将数据存储在内存中,速度非常快;Cluster 引擎用于分布式环境;Example 引擎是一个示例引擎,用于演示目的。

    • File System: MySQL 使用底层文件系统(如 NTFS、ext4、SAN 或 NAS)来存储数据和日志文件。
    • Logs and Files: MySQL 产生的各种日志文件,包括二进制日志(记录所有更改)、错误日志、慢查询日志、一般查询日志、重做日志、回滚日志以及数据和索引文件。

总这张图清晰地展示了 MySQL 服务器如何处理客户端请求,以及不同组件之间的交互关系。客户端通过连接器发送 SQL 请求给 MySQL 服务器,服务器解析请求、优化查询、访问存储引擎并最终将结果返回给客户端。同时,MySQL 也利用缓存、索引和日志机制来提升性能和可靠性。

6. SQL 分类

  1. DDL【data definition language】 数据定义语言,用来维护存储数据的结构

    代表指令: create, drop, alter

  2. DML【data manipulation language】 数据操纵语言,用来对数据进行操作

    代表指令: insert,delete,update

  3. DML中又单独分了一个DQL,数据查询语言,代表指令: select

  4. DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务

    代表指令: grant,revoke,commit

7. 储存引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术

的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎。

查看存储引擎:
show engines

在Linux中,设置默认存储引擎

命令:vim /etc/my.cnf

我设置的默认存储引擎。

相关推荐
Elastic 中国社区官方博客33 分钟前
使用 Elasticsearch 导航检索增强生成图表
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小金的学习笔记37 分钟前
RedisTemplate和Redisson的使用和区别
数据库·redis·缓存
新知图书1 小时前
MySQL用户授权、收回权限与查看权限
数据库·mysql·安全
文城5211 小时前
Mysql存储过程(学习自用)
数据库·学习·mysql
沉默的煎蛋1 小时前
MyBatis 注解开发详解
java·数据库·mysql·算法·mybatis
呼啦啦啦啦啦啦啦啦1 小时前
【Redis】事务
数据库·redis·缓存
HaoHao_0101 小时前
AWS Serverless Application Repository
服务器·数据库·云计算·aws·云服务器
C语言扫地僧1 小时前
MySQL 事务及MVCC机制详解
数据库·mysql
小镇cxy1 小时前
MySQL事物,MVCC机制
数据库·mysql
书生-w2 小时前
Redis Windows 解压版安装
数据库·windows·redis