目录
一、数据库概念
1. 什么是数据库
2. 为什么要有数据库?
3. 数据库将数据存在哪里?
二、知名数据库介绍
1.知名数据库介绍
2.为什么要学习MySQL
三、MySQL的基本使用
0. 安装MySQL
1. 数据库客户端链接服务端
2. Windows下的MySQL服务端管理
3. 数据库的本质 及 服务器,数据库,表关系
4.数据库的物理存储和逻辑存储
「拓」对数据库的简单操作
四、MySQL架构
1. MySQL 是一个可移植的数据库
2. 这是怎么做到的呢?
3. MySQL服务端插件层的设计思想
五、存储引擎
六、SQL语句分类
一、数据库概念
1. 什么是数据库
1.1 从狭义层面上讲
a.从服务端来讲:有没有启动数据库,这里的数据库就是指数据库的服务端,即mysqld
(我们安装的MySQL是一套网络服务,既有客户端也有服务端,这意味着我们在A主机上的MySQL服务端可以被B主机上的MySQL客户端访问。启动数据库服务端后我们才能通过数据库的客户端访问服务端,对数据进行增删改查。)
b.从数据层面来讲:创建一个数据库,这里指的是创建一个数据库文件,即保存在在路径/var/lib/mysql的文件。
1.2 从宏观层面来讲
为用户提供数据管理的软件集合(程序+数据)。
2. 为什么要有数据库?
2.1 存储数据用文件就可以了,为什么还要弄个数据库?
- 文件和数据库都可以用来存储数据,但我们使用文件存储数据,数据的管理工作要我们自己做,如对文件里数据的查询和修改,需要我们自己设计程序完成。
- 为了解决上述问题,专家们在用户和文件之间添加一个更加利于管理数据的应用层软件——数据库,它能帮助用户管理文件中的数据。(所以数据库也可以说是对文件内容进行管理的"文件系统")
- 所以数据库的优势在于:数据库在存储数据的同时还管理着数据,对外提供基本的数据操作(增删查改),不用程序员手动进行数据管理。
2.2 对比数据库,单纯用文件保存数据有以下几个缺点:
文件不利于海量数据查询和管理
文件的安全性问题 (误删数据如何恢复?)文件在程序中控制不方便 (要先将文件中的所有内容加载到内存中,才能获取其中某行内容)
3. 数据库将数据存在哪里?
磁盘 或 内存 (数据库存储数据也要创建文件,并将其保存在磁盘或内存中。)
二、知名数据库介绍
1.知名数据库介绍
- SQL Sever: 微软的产品,适合中大型项目,.Net程序员的最爱。
- Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,会提供配套的服务,并发性不如MySQL。一般都是银行或非互联网公司的大型企业在使用。
- MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,但不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。互联网公司一般都会使用MySQL。
- PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,都可以免费使用。学术研究机构可能用到PostgreSQL更多。
- SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。用于嵌入式开发。
- H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
2.为什么要学习MySQL
因为MySQL开源,使用成本低,生态好,社区活跃,而且在不断迭代更新下现在MySQL的效率并不差,对于百万、千万级别的数据完全hold住,所以互联网公司一般都会使用MySQL,所以MySQL水平是衡量一个程序员水平的重要指标。
三、MySQL的基本使用
0. 安装MySQL
关于Linux上MySQL的安装请看博主这篇文章:「MySQL-00」MySQL在Linux上的安装
1. 数据库客户端链接服务端
mysql -h 127.0.0.1 -P 3306 -u root -p -h : 主机,由于MySQL默认禁止跨网络服务,现在先本地回环127.0.0.1 -P : 端口号,MySQL服务端的端口号默认为3306 -u : 以哪个用户登录 -p : 用户密码
「拓1」如何更改MySQL服务端的默认端口号?
使用vim打开MySQL配置文件 : vim /etc/my.cnf
然后在最后一行之前加上 : port=修改后端口号即可
最后重启MySQL客户端 : systemctl restart mysqld在工作中建议修改,如果仅是练习就没有必要修改了。
「拓2」如何查看MySQL服务端的默认端口号?
在Linux输入命令 netstat -nltp 进行查询。
2. Windows下的MySQL服务端管理
执行 win+r 输入 services.msc 打开服务管理器
通过下图左侧停止,暂停,重启动按钮进行服务管理
3. 数据库的本质 及 服务器,数据库,表关系
3.1 创建一个数据库的本质:
在mysql中,建立一个数据库create database XXX,本质在linux下是建立了一个目录!
3.2 在数据库中建表的本质:
在mysql中,建立一个表create table 表名(); ,本质是在Linux上对应的数据库目录下创建对应的文件!
3.3 对数据库操作的本质:
所以我们对数据库或数据库里的表进行操作,本质上就是在对Linux上对应的目录和文件进行操作。
3.4 数据库服务器的本质:
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,即musqld(数据库服务端),这个管理程序可以管理多个数据库。
3.5 数据库客户端的本质:
Linux我们通过命令行访问MySQL服务端,这是一个客户端。
图像界面中访问数据库的软件,也是一个客户端。
程序中引入MySQL中通过的第三方库来访问MySQL服务端,那么这个程序也是一个客户端。
3.6 总结
数据库客户端服务器、数据库和表的关系如下:
MySQL的客户端通过SQL语句向服务端发起请求,服务端再根据请求对数据库进行操作。
4.数据库的物理存储和逻辑存储
4.1 物理存储:以二进制的形式保存在文件中。
4.2 逻辑存储: 以行和列的形式保存在表中。
「拓」对数据库的简单操作
- show databases; : 展示已创建的数据库(注意数据库命令以分号结尾)。
- create database 数据库名称; : 创建一个数据库(注意数据库命令以分号结尾)。
- system 系统命令 : 执行Linux系统命令,经常使用system clear (执行系统命令清屏,结尾不用带;)。
- use 数据库名称; : 进入一个数据库。
- select database(); : 查看当前正在哪一个数据库里。(需要先进入一个数据库)
- create table 表名(表头); : 创建一个表。(需要先进入一个数据库)
- show tables; : 查看数据库里所有的表。(需要先进入一个数据库)
四、MySQL架构
1. MySQL 是一个可移植的数据库
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、 Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。即,MySQL的底层实现在各平台上不同,但是在各平台上对外暴露的上层接口是一样的。
2. 这是怎么做到的呢?
MySQL的服务端架构主要分三层:
- 链接层:对与客户端的链接进行管理,如鉴权。
- SQL语句的接口识别&语法解析&性能调优层:SQL语句在传入下层时就已经被处理、解析好了。
- 插件(存储引擎)层:把解析好的SQL语句,给选出的存储引擎,存储引擎根据SQL语句和OS的文件系统进行交互。
3. MySQL服务端插件层的设计思想
MySQL服务端插件层里有多个存储引擎,对于这些存储引擎必须要进行管理,怎么管?当然是先描述,再组织了。由于MySQL是使用C语言/C++写的,所以对于这些存储引擎,可以使用类来描述,类中的成员方法中既有提供给上层的调用接口,也有对下层的操作方法。在未来用户要使用某个存储引擎,直接靠类new一个对象出来即可;不需要了,直接delete掉即可。这就是插件式开发。对于已经存在的存储引擎对象,用列表、顺序表等数据结构进行组织,这样就完成了对所有存储引擎的管理。
五、存储引擎
1.是什么?
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术 的实现方法。真正执行SQL语句的部分。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
2. 查看存储引擎
show engines;
3. 常用的存储引擎
- InnoDB :建议设置为默认存储引擎,因为它支持事物。
- MyISAM :常用于大量查找的情况。
4.设置存储引擎
- 使用vim打开MySQL配置文件 : vim /etc/my.cnf
- 然后在最后一行skip-grant-tables前面加上行:default-storage-engine=存储引擎名
- 最后重启MySQL客户端 : systemctl restart mysqld
六、SQL语句分类
根据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