【MySQL】--- 数据库基础

Welcome to 9ilk's Code World

(๑•́ ₃ •̀๑) 个人主页: 9ilk

(๑•́ ₃ •̀๑) 文章专栏: MySQL


本篇博客我们来建立一下数据库的相关概念,主要理解什么是数据库以及mysql和mysqld,MySQL架构等问题。


🏠 登录选项认识

sql 复制代码
mysql -h  127.0.0.1 -P 3306 -u root -p

注:1. 如果没有写 -h 127.0.0.1 默认是连接本地。

2.如果没有写 -P 3306 默认是连接3306端口号。

我们登录时当然也可以简写成:

sql 复制代码
mysql -u  root -p

总结:

1 . -h 指明登陆部署了mysql服务的主机,-P指明我们要访问的端口号,-u指明登录用户,-p指明需要输入的密码。

2. 密码输入的时候是不回显的。

🏠 什么是数据库

(1) MySQL本质是一种网络服务。

  1. mysql是数据库服务的客户端。

2.mysqld是数据库服务的服务器端(可执行程序带d后缀的代表是守护进程)

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

验证mysqld是服务端:

bash 复制代码
netstat -lntp
//netstat -lntp 命令会列出所有处于监听状态的 TCP 端口,并且显示这些端口对应的进程信息,同时以数字形式显示地址和端口号,不进行域名解析。

我们知道端口号是用来表示一台计算机中特定进程所提供的服务。上图查询结果显示mysqld绑定了3306这个端口号,证明它是服务端。

(2)MySQL服务

Q1 : 为什么我们MySQL需要启动服务后才能用mysql连接?

因为MySQL是一种网络服务,我们可以查看它对应的端口号。

Q2 : MySQL服务是什么?

MySQL服务是一套提供数据存取服务的网络程序。

(3) 区分相关概念

  • 1. 口语中数据库:在磁盘或内存中存储额特定结构与组织的数据,即在磁盘上存储的一套数据库方案(文件)。(数据库最终要么存储在磁盘要么存储在内存,我们当前只考虑磁盘,而存储在磁盘中的一组数据库文件就可以称为数据库)
  • 2. 数据库服务:mysqld。
  • 3. 数据库客户端:mysql。

(4) 为什么不直接用数据库存储数据而要用数据库?

  1. 一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据内容管理能力,这是站在用户角度上的。

比如:程序员对一个有上百万行内容的文件进行有效信息的提取,此时他需要打开文件,手动统计,这明显是效率低下的,文件只给我们提供基本的读写功能,但是没有提供文件内容(数据)管理功能。

文件存储还有以下缺点:

1.文件的安全性问题

2.文件不利于数据查询和管理

3.文件不利于存储海量数据

4.文件在程序中控制不方便

  1. 数据库本质是对数据内容存储的一套解决方案,用户给数据库提供相关字段或者要求,数据库就能根据需求进行分析,直接返回结果。这样就很好地将数据管理起来了,方便数据管理。

(5) 总结什么是数据库

1. 宏观上:数据库整体是一套对外的数据存储解决方案。由数据库客户端(mysql),数据库服务端(mysqld)以及数据库文件构成。

2.局部上:数据库是磁盘上某种提供数据存储能力的文件,它不是我们平常所说的普通文件,它有自己的内部格式,支持mysqld对其进行增删查改。

🏠 见一见数据库

样例:mysql建立一个数据库 建立一张表结构 插入一些数据 对比mysql在linux中对应是如何表现的。(简单看看)

(1) 查看数据库

sql 复制代码
show databases;

(2) 建立数据库

sql 复制代码
create database 数据库名; //注意以分号为结尾

创建数据库后数据库相关目录变化:

我们发现创建完helloworld数据库之后,在mysql目录下新建了helloworld目录。

结论 : 建立数据库,本质就是linux下的一个目录。

(3) 建立一张表

建立一张表之前得先选择哪个数据库,也就是相当于选择那个目录。

sql 复制代码
use 数据库名称;

建立表操作:

sql 复制代码
create table 表名称 (
  id int,
  name varchar(32),
  gender varchar(2)
);
//int varchar是类型

现象:

结论 : 在数据库内创建表,本质是在Linux下新建对应文件即可。

(4) 表中插入数据

sql 复制代码
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');

(5) 表中查询数据

sql 复制代码
select * from student;

Q:前面的建立数据库,建立表,查询等操作是谁帮我们做的?

mysqld服务帮我们做的。程序员通过mysql客户端,然后mysqld帮我们对数据文件实现对应要求。

结论 :数据库本质也是文件,只不过这些文件并不由我们程序员直接操作,而是数据库服务帮我们操作。

注:数据库是一种行列式结构,有自己的逻辑存储结构。

🏠 主流数据库

  • SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。

  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。

  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。

  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。

  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中**。**

🏠 服务器数据库表之间的关系

  1. 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序(mysqld) ,这个管理程序可以管理多个数据库(目录),一般开发人员会针对每一个应用创建一个数据库。

  2. 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据

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

🏠 MySQL架构

MySQL 是一个可移植的数据库 ,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

  1. 最上面MySQL客户端,它可以是我们在Linux上命令行界面,也可以是C/C++连接,图形化界面等。

  2. 中间整体的MySQL SERVER主要由三部分组成:

  • 第一层连接池: 用于管理客户端连接,主要用来保**存链接,鉴别用户权限以及其他安全问题,**有助于减少连接开销,提高性能。
  • 第二层: 接收客户端发送的 SQL 语句,并对其进行解析,检查语法错误 ;同时会对解析后的SQL语句进行优化然后按照SQL协议传递给下一层。
  • 第三层存储引擎: 存储引擎负责数据的存储、索引、事务处理等。它的作用类似驱动程序,从上层接受 转化处理后的SQL语句后,它会进行解释,真正帮我们访问表结构,数据库等

Q:为什么第三层存在好几个存储引擎?

数据库是一套数据存取的解决方案,但是我们不可能只存单一类型的数据,我们存的数据是有种类差别的 (文档型,二进制,..),此时针对不同种类数据我们可能需要采取不同存储方案,此时效率就会有差别,因此MySQL给我们提供各种存储引擎提高效率满足上层需求。

注:MySQL是支持热插拔的,类似插件。我们需要用哪一个就把哪一个存储引擎加载到MySQL里。

总结:MySQL依旧是一个文件系统,只不过它是处于操作系统提供的文件系统之上的一套存储解决方案。

🏠 SQL语句分类

  • DDL【data definition language】 数据定义语言,用来维护存储数据的结构代表指令: create, drop, alter。
  • DML【data manipulation language】 数据操纵语言,用来对数据进行操作代表指令: insert,delete,update。
  • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务代表指令: grant,revoke,commit。

类比数据结构链表,DDL类似定义一个链表,DML类似实现链表的头删,逆置等操作。

🏠 查看MySQL存储引擎

(1) 什么是存储引擎?

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

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

(2)查看存储引擎

sql 复制代码
show engines;
sql 复制代码
 show engines \G

(3) 存储引擎对比

其中常用的存储引擎是InnoDB和MyISAM。


总结一下:

  1. 什么是数据库?

数据库整体是一种对外的数据存取解决方案,本质上是一种基于CS模式的网络服务。宏观上,我们把数据库理解为客户端,服务端,数据库文件这一套解决方案;局部上,我们把数据库理解为磁盘上具有特定化结构的数据库文件,支持服务端对其进行增删查改,有自己的格式。

2.如何理解mysql和mysqld,以及如何理解建立数据库和建立表?

(1) mysql是数据库的客户端,用户在客户端向服务端提出要求;mysqld是数据库服务端,根据要求对数据库文件进行操作。

(2)建立数据库本质是Linux上新建目录,而建立表本质是Linux上在对应目录新建文件。

3.MySQL整体架构?

客户端 - MySQL SERVER(连接池,中间解析层,存储引擎) - 依赖的文件系统。

相关推荐
吴冰_hogan3 分钟前
MySQL事务隔离
数据库·mysql
练小杰7 分钟前
我在广州学 Mysql 系列之 数据“表”的基本操作
android·数据库·学习·mysql·adb
gsforget32110 分钟前
ORACLE RAC ADG备库报错ORA-04021: timeout occurred while waiting to lock object
数据库·oracle·oracle adg
Yvemil715 分钟前
数据库镜像(Database Mirroring):高可用性与灾难恢复技术
数据库·oracle
赵师的工作日39 分钟前
MongoDB-单键索引与复合索引
数据库·mongodb
初晴~2 小时前
【Redis】高并发场景下秒杀业务的实现思路(单机模式)
java·数据库·redis·后端·spring·缓存·中间件
KevinAha2 小时前
MySQL迁移SQLite
数据库·mysql·sqlite
简 洁 冬冬2 小时前
限制redis内存
数据库·redis·缓存
猫猫不是喵喵.2 小时前
【Redis】一人一单秒杀活动
数据库·redis·缓存