MySQL基础

目录

一、数据库概念

二、主流数据库

三、基本使用

3.1 连接服务器

3.2 服务器管理

3.3 使用案例

四、MySQL架构

五、SQL分类

六、存储引擎

6.1 查看存储引擎

6.2 存储引擎对比


一、数据库概念

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

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

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

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

客户端 && 服务器

数据库管理系统分为服务器和客户端,以MySQL为例,使用MySQL时会先通过 mysql命令 连接MySQL服务器

mysql命令就是MySQL客户端,而MySQL服务器可以通过 ps命令 进行查看

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

MySQL基础_第1张图片

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开发的嵌入式数据库,本身只是一个类库,可以直接嵌入到应用项目中

三、基本使用

3.1 连接服务器

MySQL基础_第2张图片

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

连接到MySQL服务器后,就可输入各种SQL语句让服务器执行,当要退出mysql时输入 quit 、exit或 \q 即可

MySQL基础_第3张图片

3.2 服务器管理

停止服务器

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

MySQL基础_第4张图片

启动服务器

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

MySQL基础_第5张图片

重启服务器

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

MySQL基础_第6张图片

3.3 使用案例

数据存储路径

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

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

MySQL基础_第7张图片

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

MySQL基础_第8张图片

创建数据库

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

MySQL基础_第9张图片

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

MySQL基础_第10张图片

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

创建数据库时,本质就是在MySQL的数据存储路径下新建了一个目录,而当这个数据库删除后,这个目录也就不存在了

此时在MySQL的数据存储路径下的helloworld目录也就不存在了

MySQL基础_第11张图片

使用数据库

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

MySQL基础_第12张图片

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

创建数据库表

可以通过create语句创建一个简单的student表

MySQL基础_第13张图片

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

MySQL基础_第14张图片

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

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

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

表中插入数据

通过desc语句可以查看对应的表结构

MySQL基础_第15张图片

通过insert语句可以向表中插入数据

MySQL基础_第16张图片

查询表中的数据

通过select语句可以查看表中的数据

MySQL基础_第17张图片

数据的逻辑存储

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

MySQL基础_第18张图片

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

四、MySQL架构

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

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

MySQL基础_第19张图片

MySQL架构

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

MySQL基础_第20张图片

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

MySQL客户端

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

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

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

MySQL基础_第21张图片

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中的存储引擎是插件式的存储引擎,可以支持多种存储引擎

6.1 查看存储引擎

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

MySQL基础_第22张图片

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

6.2 存储引擎对比

MySQL基础_第23张图片

注意:InnoDB存储引擎支持事务,而MyISAM存储引擎不支持

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