目录
一、数据库的基本概念
1. 什么是数据库
2. 主流的数据库
二、基本使用
1. 连接服务器
2. 服务器管理
3. 服务器、数据库、表关系
4. 使用案例
5. 数据库的存储逻辑
三、MySQL架构
四、SQL分类
五、存储引擎
1. 存储引擎
2. 查看存储引擎
3. 存储引擎对比
六、修改MySQL密码
一、数据库的基本概念
1. 什么是数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用-------- 百度百科。
存储数据用文件就可以了,为什么还要弄个数据库?
- 文件的安全性问题:数据误操作后无法进行回滚。
- 文件不利于数据查询和管理:没有将存储的数据以某种数据结构组织起来。
- 文件不利于存储海量数据:数据量越大用户操控数据的成本越高。
- 文件在程序中控制不方便:数据的控制需要用户自己来完成。
MySQL客户端 vs MySQL服务器
首先,当你在特定的目录下安装好MySQL之后,会有mysql和mysqld,他们分别是客户端和服务器,从上图可以看出服务的体积是要大一些的。
2. 主流的数据库
- SQL Sever: 微软的产品,.***程序员的最爱,中大型项目。
- Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
- MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
- PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
- SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
- H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
二、基本使用
接下来的MySQL的基本使用,只需要知道如何在命令行登录MySQL服务器即可,一些SQL语句在本篇博客中不会深入讲解,混个脸熟即可。
1. 连接服务器
在命令行中连接MySQL服务器如下:
- -h: 表示你要连接的MySQL服务器所在的主机,127.0.0.1表示本地主机。
- -P: (大写的P)表示你要连接的MySQL服务器所对应的端口号,一般默认是3306。
- -u: 表示用哪一个用户连接MySQL服务器,root表示超级用户。
- -p: 表示该用户对应的密码,密码可以直接跟在-p后面,也可以回车后输入。
一般如果你是在学习阶段,用的是本地主机进行连接的话,也可以像下面这种方式进行登录:
当你正确输入密码并回车之后,就会出现如下的提示,表明你已经连接到MySQL啦
此时你就可以输入各种SQL语句让服务器执行了,当要退出mysql时直接输入 quit 或exit 或 \q
2. 服务器管理
停止MySQL服务:执行systemctl stop mysqld 命令 或 service mysqld stop 命令。
启动MySQL服务:执行systemctl start mysqld 命令 或 service mysqld start 命令。
重启MySQL服务:执行systemctl restart mysqld 命令 或 service mysqld restart 命令。
3. 服务器、数据库、表关系
- 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
数据库服务器、数据库和表的关系如下:
- 图中的Client对应的就是mysql命令,MySQL对应的就是mysqld服务。
- DB(database)表示的是mysqld管理的多个数据库,而每一个DB下会包含多张表。
4. 使用案例
数据存储路径
通过MySQL创建的数据库和各种表结构,最终会以文件的形式存储下来,通过查看MySQL的配置文件中的datadir可以得知数据文件的存储路径。
比如我的MySQL配置文件的路径为/usr/local/myaql/data/data,也就是你在后续创建的数据库以及各种表都是在这个路径下,当然你可以进行修改。
我们可以看看这个目录下都有哪些东西 ,可以看到该目录下有很多MySQL相关的数据文件。
创建数据库:create database hello;
可以看到,在MySQL中执行SQL语句,创建了一个数据库,其实就相当于创建了一个目录,在这个目录下,只有一个名为的db.opt的文件,该文件中指明了当前数据库的默认字符编码和字符校验规则。(需要注意的是,你在查看MySQL所创建的数据库是,最好是切换到超级用户)
删除数据库:drop database hello;
删除数据库,本质就是删除了这个目录
使用数据库:use hello;
显示数据库,就相当于我们在linux下执行ll命令,使用数据库相当于在linux下执行cd命令
创建数据库表
我们用create语句创建一个student表:
通过show语句可以查看创建的student表结构。比如:
由于student表采用的存储引擎是InnoDB,因此在MySQL的数据存储路径下的helloworld目录下,就会多出两个文件,分别是student.frm和student.ibd。如下:
其中student.frm是表结构文件,student.ibd是表数据和索引的文件。
小贴士:InnoDB存储引擎对应的是两个,MyISAM存储引擎对应的是三个
表中插入数据
通过desc语句可以查看对应的表结构:
通过insert语句可以向表中插入数据
查询表中的数据
通过select语句可以查看表中的数据:
5. 数据库的存储逻辑
表中的数据是以二维表格的形式进行呈现的,包括行和列。如下:
其中每一行我们称之为是一条记录,而每一列都代表一个属性(属性列)。
三、MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
由图,可以看出MySQL最上层是连接组件。下面服务器是由连接池、管理工具和服务、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成。
- 连接池:由于每次建立建立需要消耗很多时间,连接池的作用就是将这些连接缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。
- 管理工具和服务:系统管理和控制工具,例如备份恢复、Mysql复制、集群等
- SQL接口:接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface
- 解析器: SQL命令传递到解析器的时候会被解析器验证和解析。
- 优化器:查询优化器,SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询。
- 缓存器: 查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
- 可插拔存储引擎:在MySQL中对应着多种存储引擎,上层用户想要使用哪一个存储引擎直接指定就可以,这就像C++中的多态,存储引擎继承了上层服务,加以重新实现,父类的指针或引用指向那个存储引擎就使用哪个存储引擎的方法。
四、SQL分类
SQL(Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
- DDL【data definition language】 数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
- DML【data manipulation language】 数据操纵语言,用来对数据进行操作
- DML中又单独分了一个DQL,数据查询语言
代表指令: select
- DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
五、存储引擎
1. 存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
2. 查看存储引擎
show engines;
其中MySQL底层默认使用的存储引擎是InnoDB,该存储引擎支持事务、行级锁、外键等。
3. 存储引擎对比
六、修改MySQL密码
使用set password命令
set password for 你的用户名@localhost = password('你的密码');