初识mysql数据库之数据库介绍

目录

一、什么是数据库

1. 数据库的概念

2. 为什么要有数据库

3. 数据库样例

二、 主流数据库

三、服务器、数据库和表之间的关系

四、mysql存储架构

五、sql语句分类


一、什么是数据库

1. 数据库的概念

如果大家现在已经安装好了mysql,想必大家应该也都知道,在mysql按照好后就会多出两个东西,分别是mysqlmysqld

在这里面,mysql是数据库服务的客户端mysqld则是数据库服务的服务端。如果大家已经启动了mysqld后,大家应该就会发现,mysqld在启动后并不会影响linux的其他操作。而大家知道,在linux中一个窗口中只能有一个前台进程,但可以有多个后台进程。因此,mysqld在启动后其实就是守护进程,在后台运行。一般来讲,在可执行程序的名字中带d就是指该程序启动后是一个守护进程

mysql数据库,其实就是一套给我们提供数据存取服务的网络程序。这里大家要区分两个概念,mysql既可以指大家的linux中的mysql客户端也可以指mysql这个数据库。要将这两个东西区分开。这就好比大家平常手机上的微信,一般来讲大家说的微信其实就是说手机上的微信app,但是微信这个程序其实还应该包括它的服务端等各种内容的集合。一个是客户端,一个整体程序。

数据库,一般指的是在磁盘或内存中存储的特定结构组织的数据,即在磁盘或内存中存储的一套数据库方案

数据库服务,则一般指的是mysqld

2. 为什么要有数据库

大家应该知道,数据在磁盘中一般都是以文件的形式存储的,而linux中也是有对应的文件系统的。那问题就来了,既然我们有文件可以用来存储数据,那为什么还需要数据库呢?

这其实是因为,文件虽然提供了数据的存储功能,但是并没有提供非常好的数据管理能力。例如现在有一份文件,这份文件中有10万个ip地址,现在要求你从这10万个ip地址中找到开头为127的所有ip地址。如果你想完成这份工作,那么就需要你自己实现相关的逻辑,对程序员来说很不方便。

此时有人就可能又会说了,OS不是可以管理文件么,为什么不利用OS呢?OS确实需要对文件进行管理,但它仅仅是对文件整体做管理,管理的是文件的属性,如何保存等等内容,并不干涉文件的具体数据。因此,便有了数据库来帮助程序员完成对数据内容的具体管理工作。

总的来看,文件保存数据有以下几个缺点:

1. 文件的安全性问题;

2. 文件不利于数据查询和管理;

3. 文件不利于存储海量数据

4. 文件在程序中控制不方便;

数据库的本质,其实就是对数据内容存储的一套解决方案。即实现用户给数据库一个字段,数据库根据这个字段执行对应的操作并返回结果。而数据库的存储介质,则是磁盘和内存。

上图就可以看成是一个简单的数据库运行逻辑。用户在mysql端给服务器上的mysqld发命令,mysqld收到命令后就去操作磁盘上的数据库文件,然后再将对应数据返回给客户端。注意,这里的数据库文件并不是以前大家看到的普通文件

3. 数据库样例

为了让大家更好理解数据库,在这里就简单的操作一下,生成一个数据库。

首先输入“mysql -u root -p”登录mysql数据库,然后输入“show databases;”命令显示当前mysql中存在的数据库

那这些数据库到底存放在哪里呢?输入“vim /etc/my.cnf”打开配置文件,里面就配置好了数据库的数据存放位置:

然后再执行“cd /var/lib/mysql”命令进入该目录

此时再在mysql中执行“create database helloword;”命令,创建一个helloworld数据库,然后再执行“show databases”命令查看数据库

此时就可以看到,已经成功创建出一个新的数据库了。然后再在linux查看数据库的存储路径下的内容:

可以看到,在数据库的存储路径下就多了一个helloworld。看到这个蓝色字体,大家应该想到,在一个目录中用蓝色标出来的东西,其实就是一个目录。因此,所谓的创建数据库,就是在数据库存储路径下创建一个目录

进入该目录,里面只有一些配置文件,其他什么都没有:

既然是数据库,里面肯定需要有数据,因此在这里我们再创建一个表。

上文中说了,数据库其实就是linux下的一个目录。因此在mysql中要使用数据库,首先就要进入数据库。输入“use 数据库名称;”进入指定数据库。

然后执行下图命令,创建一个学生信息表:

在linux中的指定数据库目录下查看文件:

此时就多了两个数据库文件了。由此可以知道,在数据库中建表,本质就是在linux下创建对应的文件即可。

为了方便看到表里的内容,执行“insert into student (name, age, varchar) values ('张三', 20, '男');”命令,向表中添加内容。

 插入完后,再执行“select * from student;”命令查看表内容:

可以看到,数据正常插入到表结构中了。

在上面的这些操作中,无论是创建数据库,还是创建表结构生成数据库文件,这些工作都不是由程序员完成的, 而是由mysqld帮我们完成的。由此,就大大减轻了程序员的负担。

通过这个样例,我们就可以得出三个结论:

1. 建立数据库,本质就是在linux下创建一个目录;

2. 在数据库中建表,本质就是在linux下的对应数据库目录下创建对应的数据库文件;

3. 数据库本质也是文件,只不过这些文件并不由程序员直接操作,而是依靠数据库服务帮我们完成。

二、 主流数据库

虽然在这里我们只学习mysql数据库,但同时也可以了解一下其他的主流数据库。

1. SQL  Server:微软的产品,.Net程序员的最爱,一般适用于中大型项目;

2. Oracle:甲骨文产品,一般适合用于大型项目和处理一些复杂的业务逻辑,并发一般来说不如MySQL;

3. 世界上最受欢迎的数据库,并发性好,但是不适合做复杂的业务。主要用于电商、SNS、论坛。对简单的SQL处理效果好。

4. PostgreSQL:加州大学伯克利分销计算机系开发的关系型数据库,不管是使用、商用还是学医研究上都比较好。可以免费使用、修改和分发。

5. SQLite:是一款轻型的数据库,遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是用于嵌入式,并且目前的很多嵌入式产品都使用了它。该数据库的占用资源很低,在嵌入式设备中,可能只需要几百K的内存就够了。

6. H2:是j一个用于ava开发的嵌入式数据库,本身只是一个类库,可以直接嵌入到应用项目中

三、服务器、数据库和表之间的关系

 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。例如你手机上的淘宝app,它在服务端上就可能有一个单独的数据库来保存该应用的数据。

为了保存应用中的实体数据,一般会在数据库中创建多个表,以保存程序中市实体的数据。例如我们在使用淘宝时,有各自的账户信息,浏览记录,商品列表等等,这些数据可能就是分门别类的用不同的表保存的。

总来来看,服务器、数据库和表之间的关系可以看成下图所示:

四、mysql存储架构

mysql是一个可移植的数据库,几乎能在当前所有的OS上运行,如Unix/Linux、windows、Mac和Solaris。不过他最主流的场景还是在linux上运行。各种系统在底层实现方面各有不同,但是mysql基本上能保证在各个平台上的物理结构的一致性。

上图就是一张mysql存储架构的图。在这张图中,最外层的Connectors是客户端,也就是用户通过它来使用mysql

在下面的内容中就是mysql服务器的一个整体结构了。其中第一层“connection pool”连接池。当我们要使用mysql时,第一件事就是需要登录mysql,对于登录账户的认证、安全保护等内容就是在这一层实现的。

在第二层中包含几个组件,这些东西大家不用特别关心。只需要知道这一层基本就是用于指令分析的。当我们在客户端中输入了指令后,这些指令就需要在第二层进行语法分析、语句优化等等工作,然后再将这些指令下达给下一层。

第三层中就是一个个具体的存储引擎真正执行任务的就是这一层的存储引擎。这些存储引擎接收到指令后,就帮我们去做创建数据库、创建表结构或增删查改等等内容。至于这一层为什么会有这么多存储引擎,其实是因为在数据库中存储的数据可能是不同的,有时存储文本数据,有时又可能存储二进制数据等等。而这些存储引擎,针对不同的数据所展现出来的存储效率就有所差别。例如MyISAM就有较高的并发度,能更好的支持大文本的读取。InnoDB中则提供了丰富的索引支持,能方便我们快速的进行查找。

注意,这些存储引擎是支持“热拔插”的。也就是说,这些存储引擎你想用哪一个就启用哪一个,不想用的就可以直接关掉。这就好比我们在写代码时准备好一个个的类,当需要用哪个类是就用new创建一个对象,不需要的类则不用管。

最后,这些存储引擎会将需要存储的数据放到第四层中的磁盘或内存中。

总的来讲,在上图中的mysql中的前三层都是用户层,最后一层则属于内核层。

五、sql语句分类

要使用mysql,就需要使用各种sql语句。虽然sql语句很多,但总的来讲分为以下三个大类。

1. DDL(data definition language)

DDL,即数据定义语言,用来维护存储数据的结构。代表指令有create、drop、alter

2. DML(data manipulation language)

DML,即数据操作语言,用于对数据进行操作。代表指令有insert、delete、update

3. DCL(data control language)

DCL,即数据控制语言,主要负责权限管理和事务。代表指令有grant、revoke、commit

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值