MySQL数据库基础

文章目录

  • MySQL数据库基础
    • 数据库的概念
    • 主流数据库
    • 基本使用
      • 连接服务器
      • 服务器管理
      • 数据库服务器,数据库,表关系
      • 使用案例
      • 数据逻辑存储
    • MySQL架构
    • SQL分类
    • 存储引擎
      • 存储引擎
      • 查看存储引擎
      • 存储引擎对比

MySQL数据库基础

数据库的概念

数据库是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

虽然单纯的使用文件也可以存储数据,但会存在如下缺点:

  • 安全性问题:数据误操作后无法进行回滚。
  • 不利于数据的查询和管理:没有将存储的数据以某种数据结构组织起来。
  • 控制不方便:数据的控制需要用户自己来完成。
  • 不利于存储海量数据:数据量越大用户操控数据的成本越高。

为了解决上述问题,于是专家们设计出了更利于管理数据的数据库。

客户端 VS 服务器

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

MySQL数据库基础_第1张图片

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

在这里插入图片描述

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

MySQL数据库基础_第2张图片

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

数据库的存储介质

数据库的存储介质有以下两种:

  • 磁盘,比如MySQL就是一种磁盘数据库。
  • 内存,比如redis就是一种内存数据库。

说明一下:

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

主流数据库

主流数据库

下面列举了几个主流的数据库:

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

基本使用

连接服务器

连接服务器

连接MySQL服务器的方式如下:

MySQL数据库基础_第3张图片

解释说明:

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

此外,如果要连接的是本地的MySQL服务器,那么连接时只需要指明用户名和用户密码即可。如下:

MySQL数据库基础_第4张图片

连接到MySQL服务器后,就可以输入各种SQL语句让服务器执行了,当要退出mysql时直接输入quitexit\q即可。如下:

MySQL数据库基础_第5张图片

服务器管理

停止服务器

通过systemctl stop mysqld命令或service mysqld stop命令可以停止MySQL服务器。比如:

MySQL数据库基础_第6张图片

启动服务器

通过systemctl start mysqld命令或service mysqld start命令可以启动MySQL服务器。比如:

MySQL数据库基础_第7张图片

重启服务器

通过systemctl restart mysqld命令或service mysqld restart命令可以重启MySQL服务器。比如:

MySQL数据库基础_第8张图片

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

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

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

MySQL数据库基础_第9张图片

说明一下:

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

使用案例

数据存储路径

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

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

MySQL数据库基础_第10张图片

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

MySQL数据库基础_第11张图片

创建数据库

连接MySQL服务器后,通过create语句创建一个名为helloworld的数据库。比如:

MySQL数据库基础_第12张图片

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

MySQL数据库基础_第13张图片

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

MySQL数据库基础_第14张图片

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

MySQL数据库基础_第15张图片

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

MySQL数据库基础_第16张图片

使用数据库

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

MySQL数据库基础_第17张图片

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

创建数据库表

这里我们通过create语句创建一个简单的student表。比如:

MySQL数据库基础_第18张图片

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

MySQL数据库基础_第19张图片

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

MySQL数据库基础_第20张图片

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

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

表中插入数据

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

MySQL数据库基础_第21张图片

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

MySQL数据库基础_第22张图片

查询表中的数据

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

MySQL数据库基础_第23张图片

数据逻辑存储

数据的逻辑存储

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

MySQL数据库基础_第24张图片

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

MySQL架构

MySQL架构

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

MySQL的架构设计如下:

MySQL数据库基础_第25张图片

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

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

MySQL客户端

MySQL服务器会收到MySQL客户端发来的SQL语句,并根据SQL语句执行对应的操作。

  • 这里的MySQL客户端不仅仅指的是连接MySQL时使用的mysql命令,MySQL客户端还包括语言接口客户端。
  • MySQL给各种语言提供的用于访问数据库的接口,用户通过调用这些接口也可以向MySQL服务器发送SQL语句。

mysql命令本质是一个可执行程序,通过file命令可以看到该可执行程序是采用动态链接的方式生成的,通过ldd命令可以看到该可执行程序依赖的C/C++库文件。如下:

MySQL数据库基础_第26张图片

也就是说,mysql命令本身就是C/C++编写的,因此在编写mysql程序时,一定需要调用MySQL提供给C/C++的语言接口客户端。当然,MySQL不仅仅提供了C/C++对应的语言接口,像Python、Java、PHP等都有对应的MySQL接口。

SQL分类

SQL(Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL语句可分为如下三类:

  • DDL(Data Definition Language)数据定义语言,用来维护存储数据的结构。比如create语句、drop语句、alter语句等。
  • DML(Data Manipulation Language)数据操作语言,用来对数据进行操作。比如insert语句、delete语句、update语句等。
  • DCL(Data Control Language)数据控制语言,主要负责权限管理和事务。比如grant语句、revoke语句、commit语句。

说明一下: DML中又单独分了一个DQL(Data Query Language)数据查询语言,比如select语句、from语句、where语句等。

存储引擎

存储引擎

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

查看存储引擎

通过show语句可以查看MySQL支持的存储引擎。比如:

MySQL数据库基础_第27张图片

其中MySQL底层默认使用的存储引擎是InnoDB,该存储引擎支持事务、行级锁、外键等。

存储引擎对比

各个存储引擎对比如下:

Feature MyISAM BDB Memory InnoDB Archive NDB
Storage Limits No No Yes 64TB No Yes
Transactions(commit,rollback,etc.)
Locking granularity Table Page Table Row Row Row
MVCC/Snapshot Read
Geospatial support
B-Tree indexes
Hash indexes
Full text search index
Clustered index
Data Caches
Index Caches
Compressed data
Encrypted data(via function)
Storage cost(space used) Low Low N/A High Very Low Low
Memory cost Low Low Medium High Low High
Bulk Insert Speed High High High Low Very High High
Cluster database support
Replication support
Foreign key support
Backup/Point-in-time recovery
Query cache support
Update Statistics for Data Dictionary
建议记忆:InnoDB存储引擎是支持事务的,而MyISAM存储引擎是不支持的。

你可能感兴趣的:(MySQL,数据库,mysql)