MySQL数据库基础

文章目录

  • 一、什么是数据库
  • [二、 主流数据库](#二、 主流数据库)
  • [三、 基本使用](#三、 基本使用)
    • [1. 连接服务器](#1. 连接服务器)
    • [2. 服务器管理](#2. 服务器管理)
    • [3. 服务器,数据库,表关系](#3. 服务器,数据库,表关系)
    • [4. 使用案例](#4. 使用案例)
    • [5. 数据逻辑存储](#5. 数据逻辑存储)
  • [四、 MySQL架构](#四、 MySQL架构)
  • [五、 SQL分类](#五、 SQL分类)
  • [六、 存储引擎](#六、 存储引擎)
    • [1. 存储引擎](#1. 存储引擎)
    • [2. 查看存储引擎](#2. 查看存储引擎)
    • [3. 存储引擎对比](#3. 存储引擎对比)

一、什么是数据库

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

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

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

数据库存储介质:

  • 磁盘
  • 内存

补充知识

  • 数据库按存储介质可以分为磁盘数据库和内存数据库,其中内存数据库又称为主存数据库(Main Memory Database)。
  • 磁盘数据库的数据主要存储在磁盘上,因此磁盘数据库在数据的持久化保存上有明显优势。但磁盘数据库为了提高数据的存储效率,也有自己对应的缓存机制,因此在某一个时刻之内,不一定所有数据都会被刷新到磁盘上。
  • 内存数据库的数据主要存储在内存中,与磁盘数据库相比,内存数据库可以大大提高读取速度,减少数据库的访问时间。但内存数据库并非完全不使用磁盘,数据库的启动信息、初始数据等还是需要存储在磁盘上的,只是数据主要在内存中进行存储和运算。
  • 由于内存数据库的数据存储在内存中,数据库主机掉电后数据就会丢失,因此在数据库服务关闭前通常需要把内存中的数据转储到磁盘上,甚至在内存数据库运行期间,一些数据也会持久化到磁盘存储。

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

MySQL服务器本质是一个网络服务器,**mysql充当客户端,mysqld充当服务端。**我们使用mysql命令连接mysqld服务器时,本质就是mysql客户端在向mysqld服务器发起连接请求,连接建立成功后mysql客户端就会将用户输入的SQL语句发送给mysqld服务器,之后mysqld服务器就会根据SQL语句对数据进行对应的操作。

数据库是分为数据库服务器和数据库客户端的,以MySQL数据库为例,我们使用MySQL数据库时会先通过mysql命令连接MySQL服务器。如下:

这里我们使用的mysql命令就是MySQL的客户端,而MySQL服务器可以通过ps命令进行查看。如下:

cpp 复制代码
ps -axj | head -1 && ps -axj | grep mysqld | grep -v grep

这里查看到的mysqld就是MySQL的服务器,我们使用mysql命令实际就是在连接mysqld服务。通过netstat命令可以看到,MySQL服务器底层采用的是TCP6协议,目前服务器处于监听状态。如下:

二、 主流数据库

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

三、 基本使用

1. 连接服务器

cpp 复制代码
mysql -h127.0.0.1 -P3306 -uroot -p

输入上述语句之后按回车,之后在输入秘密就可以连接本地的MySQL服务器

解释:

  • -h: 表示你要连接的MySQL服务器所在的主机,127.0.0.1表示本主机。
  • -P: 表示你要连接的MySQL服务器所对应的端口号,一般默认是3306。
  • -u: 表示用哪一个用户连接MySQL服务器,root表示超级用户。
  • -p: 表示该用户对应的密码,密码可以直接跟在-p后面,也可以回车后输入。

如果要退出的话直接输入quit然后点击回车就退出了。

2. 服务器管理

Windows中

  • 执行win+r 输入services.msc 打开服务管理器
  • 通过下图左侧停止,暂停,重启动按钮进行服务管理

    Linux中:

停止服务器:

cpp 复制代码
systemctl stop mysqld

启动服务器:

cpp 复制代码
systemctl start mysqld

重启服务器:

cpp 复制代码
systemctl restart mysqld

3. 服务器,数据库,表关系

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

说明:

  • 图中的Client对应的就是mysql命令,MySQL对应的就是mysqld服务。
  • DB(database)表示的是mysqld管理的多个数据库,而每一个DB下会包含多张表。

4. 使用案例

通过MySQL创建的数据库和各种表结构,最终会以文件的形式存储下来,通过查看MySQL的配置文件中的datadir可以得知数据文件的存储路径。

比如我的MySQL配置文件的绝对路径为/etc/my.cnf,配置文件中datadir对应的值为/var/lib/mysql。如下:

将来MySQL创建的数据库文件都会存储在该目录下,可以看到该目录下有很多MySQL相关的数据文件。如下:

  • 创建数据库
cpp 复制代码
create database helloworld;

这时/var/lib/mysql目录下,就会多出一个名为helloworld的目录。如下:

目前helloworld目录下只有一个名为的db.opt的文件,该文件中指明了当前数据库的默认字符编码和字符校验规则。如下:

因此我们创建数据库时,本质就是在MySQL的数据存储路径下新建了一个目录,而当我们将这个数据库删除后,这个目录其实也就不存在了。比如:

cpp 复制代码
drop database helloworld;

此时在MySQL的数据存储路径下的helloworld目录也就不存在了,因此删除数据库本质就是删除数据存储路径下对应的目录。

  • 使用数据库

使用数据库之前,可以先通过show语句查看当前都有哪些数据库,然后再通过use语句使用指定的数据库。比如:

cpp 复制代码
show databases;
cpp 复制代码
use helloworld;

使用数据库可以理解成,就是使用cd命令进入到该数据库对应的目录当中。

  • 创建数据库表
cpp 复制代码
create table student(
id int,
name varchar(32),
gender varchar(2)
);

通过show语句可以查看创建的student表结构。比如:

cpp 复制代码
show create table student \G; 

由于student表采用的存储引擎是InnoDB,因此在MySQL的数据存储路径下的helloworld目录下,就会多出两个文件,分别是student.frm和student.ibd。如下:

其中student.frm是表结构文件,student.ibd是表数据和索引的文件。

如果说创建数据库的本质是在数据存储路径下新建一个目录的话,那么创建表本质实际就是在特定的数据库目录下新建若干个文件(InnoDB存储引擎对应的是两个,MyISAM存储引擎对应的是三个),因此在创建表之前一定要先选择一个数据库。

  • 表中插入数据

通过desc语句可以查看对应的表结构。比如:

cpp 复制代码
desc student;

通过insert语句可以向表中插入数据。比如:

cpp 复制代码
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');
  • 查询表中的数据

通过select语句可以查看表中的数据。比如:

cpp 复制代码
select * from student;

5. 数据逻辑存储

表中的数据是以二维表格的形式进行呈现的,包括行和列。如下:

其中每一行我们称之为是一条记录,而每一列都代表一个属性(属性列)。

四、 MySQL架构

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

MySQL架构主要可分为如下四层:

  • 连接层:主要完成一些类似连接处理,授权认证及相关的安全方案。
  • 服务层:在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断、SQL接口、SQL解析、SQL分析优化、缓存查询的处理以及部分内置函数执行等。各个存储引擎提供的功能都集中在这一层,如存储过程、触发器、试图等。
  • 引擎层:由多种可拔插的存储引擎共同组成,真正负责MySQL中数据的存储和提取,每个存储引擎都有自己的优点和缺陷,服务层是通过存储引擎API来与它们交互的。
  • 存储层:将数据存储在裸设备的文件系统之上,完成存储引擎的交互。

五、 SQL分类

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

六、 存储引擎

1. 存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。

2. 查看存储引擎

cpp 复制代码
show engines;

3. 存储引擎对比

相关推荐
鸿·蒙5 分钟前
【PTA】【数据库】【SQL命令】编程题2
数据库·sql·pta
J.P.August20 分钟前
Oracle RAC 环境下数据文件误建在本地目录的处理过程
数据库·oracle
ThisIsClark20 分钟前
【后端面试总结】MySQL面试总结
mysql·面试·职场和发展
对酒当歌丶人生几何25 分钟前
Mybatis控制台打印SQL执行信息(执行方法、执行SQL、执行时间)
java·数据库·sql·mybatis
ThisIsClark29 分钟前
【后端面试总结】MySQL索引
mysql·面试·职场和发展
LightOfNight1 小时前
Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
服务器·数据库·redis·分布式·后端·缓存·中间件
代码中の快捷键2 小时前
MySQL数据库存储引擎的数据结构
数据结构·数据库·mysql
Adolf_19932 小时前
Django 路由层
数据库
好记忆不如烂笔头abc2 小时前
logminer挖掘日志归档查找问题
数据库·sql·mysql
java_heartLake10 小时前
PostgreSQL数据库参数调优实践
数据库·postgresql·调优