【Mysql】初识 Mysql
数据库初识
数据库概念
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合
我们都知道,数据存储其实只需要使用文件就够了,为什么还要有数据库呢?
因为文件保存数据有以下缺点:
- 文件的安全型问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
理解
程序员直接管理文件其实是很不方便的,例如:对文件进行操作时需要使用(fopen,fclose…接口)去访问磁盘中的文件,而后对其进行操作;再者我们查询文件的相关属性时,也是很麻烦的,我们需要知道文件的信息(目录路径);还有就是删除文件时,需要考虑如何处理文件;总言之,直接让程序员对文件进行管理,是很不舒服的,就是数据库就诞生了;
所以其实数据库就是大佬创造出来对文件进行管理的软件(工具);
有了数据库之后,数据库就充当了程序员管理文件的中间层(专门负责管理文件),用户可以直接使用一些数据库指令(sql语句),向数据库发送相关请求,而后数据库将我们的指令分析转化之后,帮我们去对磁盘中的文件进行操作;
初理解数据库:
- 数据库也是需要自己去访问文件的
- 数据库也是使用文件的方式进行数据保存的
- 数据库中肯定存在能直接帮我们修改文件的’东西‘,实际上就是数据库中直接和文件进行打交道的存储引擎
主流关系型数据库
-
SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
-
Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
-
MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
-
PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
-
SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
-
H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
理解数据库
简单剖析数据库
数据库实际上还分为:其中就是服务端+数据库库和表结构就是我们常说的数据库
- 数据库客户端 – 用户通过在客户端输入sql语句等,数据库指令,给数据库服务端发送操作请求
- 数据库服务端 --接受客户端发送过来的指令,对指令进行词法分析语法分析工作,最后落实到对数据库中的某个表进行操作
- 数据库及其表结构
几乎所有的数据库都可以这么去理解;其中mysql就是一个具体的代表
mysql
- 客户端:mysql --接受用户的请求
- 服务器端:mysqld --客户端发送请求到服务器端,而后服务端提供对应的服务
- 数据库库+表结构 (磁盘中的sql文件)
client-server模式
在Linux系统下理解mysql
我们知道mysql肯定是封装了对应文件操作的系统调用接口,而后提供对应的用户接口,让用户操作文件,所以mysql实际上就属于封装了系统调用接口的用户接口层
在网络中理解mysql
mysql实际上也是个网络服务,而mysql其中并未涉及到网络层或者其他层的协议,所以说实际上mysql就是应用层的服务,有对应的协议
所以我们在自己机器上安装mysql的实质是,在我们的机器安装了mysql的客户端和服务端;
启动mysql服务的本质就是将mysql服务器启动(ip是当前机器的ip,端口号默认为3306),而我们本地进行连接mysql数据库的本质上,也是我们机器上的客户端通过(ip+端口号的方式)连接的服务器端(127.0.0.1 3306)
验证:
注:当前使用的云服务器版本是centos7.9.2009
指令: 查看当前服务器版本
cat /etc/redhat-release
mysql基本操作
连接服务器
指令:
mysql -h 127.0.0.1 -P 3306 -u root -p
本地连接也可使用:
mysql -uroot -p
- -h 所需连接的mysqld的ip, 默认为127.0.0.1,本地环回,默认连接本地
- -P 默认为3306,服务端口号
理解服务器,数据库,表关系
-
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,
-
一般开发人员会针对每一个应用创建一个数据库。
-
为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。数据库服务器、数据库和表的关系如下:
用户端向服务端下达sql语句,mysql服务端对该语句进行词法分析,语法分析…等工作,然后对应到对数据库中的表进行操作
小案例
-
创建数据库
create database hellomysql
-
使用数据库
use hellomysql
-
创建数据库表
create table if not exists student ( id int, name varchar(32), gender varchar(2) );
-
向表中插入数据
insert into student (id,name,gender) values(1,'张三','男'); insert into student (id,name,gender) values(2,'李四','女'); insert into student (id,name,gender) values(3,'王五','男');
-
查询表中数据
select * from student;
运行结果:
数据逻辑存储
列:一列数据
行:一行就叫一条记录
mysql架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux,Windows、Mac 和Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性
注:图中caches在新版的mysql已经不存在了
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
存储引擎
存储引擎:
数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法
MySQL的核心就是插件式存储引擎,支持多种存储引擎
理解插件式存储引擎
插件式存储引擎可以理解为c++中的多态,用c++实现就是,上层调用存储引擎的方法是使用统一的父类对象,而不同的存储引擎就是继承了父类对象之后,实现了不同功能的子类对象;即使用不同的存储引擎时,只需要将子类赋给父类对象指针或引用即可,即父类适配于所有子类存储引擎;
可以类似于这样去理解插件式存储引擎;
- 查看存储引擎
show engines;
运行结果:
插件式存储引擎可以理解为c++中的多态,用c++实现就是,上层调用存储引擎的方法是使用统一的父类对象,而不同的存储引擎就是继承了父类对象之后,实现了不同功能的子类对象;即使用不同的存储引擎时,只需要将子类赋给父类对象指针或引用即可,即父类适配于所有子类存储引擎;
可以类似于这样去理解插件式存储引擎;
- 查看存储引擎
show engines;
运行结果: