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本质是一套网络服务,使用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 连接服务器

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

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

3.2 服务器管理

停止服务器

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

启动服务器

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

重启服务器

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

3.3 使用案例

数据存储路径

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

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

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

创建数据库

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

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

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

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

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

使用数据库

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

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

创建数据库表

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

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

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

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

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

表中插入数据

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

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

查询表中的数据

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

数据的逻辑存储

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

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

四、MySQL架构

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

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

MySQL架构

MySQL是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如Unix/Linux、Windows、Mac和Solaris。各种系统在底层实现方面各有不同,但是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命令本身是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底层默认使用的存储引擎是InnoDB,该存储引擎支持事务、行级锁、外键等

6.2 存储引擎对比

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

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GG_Bond20

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值