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. 存储引擎对比

相关推荐
岁岁种桃花儿18 小时前
MySQL从入门到精通系列:InnoDB记录存储结构
数据库·mysql
jiunian_cn20 小时前
【Redis】hash数据类型相关指令
数据库·redis·哈希算法
冉冰学姐20 小时前
SSM在线影评网站平台82ap4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm框架·在线影评平台·影片分类
Exquisite.21 小时前
企业高性能web服务器(4)
运维·服务器·前端·网络·mysql
知识分享小能手21 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
踩坑小念1 天前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶1 天前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok1 天前
MySQL的常用数据类型
数据库·mysql
曹牧1 天前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty1 天前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存