排队打饭的时间足够带你入门MySQL

145 阅读11分钟

一、数据库的引出

1、为什么要存在数据库

几乎任何一个企业级的应用,都要用到数据库,就拿英雄联盟来讲,他如果不需要数据库,拿什么存储庞大的8亿+用户的相关信息,用户的等级、皮肤、好友列表、充值记录等等与用户相关信息,都是需要存储的,并且我们申请一个帐号,并不是简简单单的就是输入手机号验证码就创建了一个账户,应用的后台要为我们创建对应的库,把我们的相关信息存储在库中,并帮我们维护,如果不帮我们维护,下一次登陆他怎么知道你曾经创建了帐号,你拥有了这款皮肤呢?

像一般的网游可能会使用MySQL数据库,但是这种大型网络游戏服务器可能会采用其它类型的数据库比如Oracle(天涯)、IBM(银行金融),不同企业会根据不同的需求选择合适的数据库,我们以MySQL为例。

2、数据库存在的必要性

此时又有人疑惑,我们在C/C++/Java等各种编程语言中都学到了文件IO操作,我们可以使用像fopen这样的库函数又或者open这样的系统调用打开某个路径下的文件,然后使用read/write系统调用对文件内容进行读写,这样挺好的,为什么还要设计一个数据库出来呢?这是因为使用文件保存数据有很大的局限性:

文件保存数据的缺点:

  a.文件的安全性问题

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

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

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

所以为了解决文件存储数据带来的不便,就产生了数据库,而数据库存储数据可以解决上面文件存储数据的一切缺点。

二、数据库的介绍

1、什么是数据库

数据库其实是一整套数据存储容灾解决方案。是一整套方案,不是一个文件,也不是一个客户端或者服务端。

为什么这么说呢?是因为我们的数据库有自己的数据库文件、数据库客户端和数据库服务器。首先是数据库文件,当我们在数据库中建立各种数据库,然后使用数据库再新建各种表,然后各种增删改查操作,其实本质就是在数据库所在的文件中进行新建文件夹、新建文件、文件中写入数据等等操作;其次是数据库客户端,客户端就是我们进入数据库的程序,mysql -uroot -p,还有其他各种图形化界面的客户端;最后是数据库服务器,数据库服务器说白了就是运行在我们Windows/Linux下的一个进程,这个进程通常设为守护进程,当我们使用数据库客户端连接到数据库服务端时,服务端读取客户端的指令代码,来帮助我们完成数据的增删改查。

有些书上这样解释:mysql服务,本质就是进程和文件的关系。

其实就是我们在使用mysql客户端连接并访问数据库的时候,本质内部就是connect()接口发起连接,然后再把你所有的sql语句发送给对方,然后让对端mysql服务进行处理。数据库本身是包含客户端和服务器的,底层用的是tcp协议,我们每次安装数据库的时候就是安装客户端和服务器,数据库最终的本质就是网络服务器进程和文件的关系。

我们的数据库的存储介质一般有内存和磁盘两种,像存储介质是磁盘的是以实现持久化存储为目的,而存储介质是内存的主要是为了提高检索效率,他们也有自己的策略,也会定期将内容刷新到磁盘做一些持久化的处理机制。

2、主流数据库介绍

2.1、Oracle:甲骨文公司开发,Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库,是目前最流行、应用最广泛的客户端/服务器体系结构的数据库,适合大型项目和复杂的业务逻辑,并发一般来说不如MySQL。

2.2、DB2:开发商为IBM,DB2数据库支持各种机型及操作系统环境。支持面向对象编程,并有强大的开发和管理工具。也常用于银行。

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

2.4、SQL Server:开发商为微软公司,SQL Server在性能及安全性上不及以上三种数据库,但是其占用系统资源较少,操作简单、灵活。.Net程序员的最爱,中大型项目

2.5、PostgreSQL:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。

2.6、MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务;主要用在电商、SNS、论坛,对简单的SQL处理效果好。

三、连接数据库

1、检查数据库服务是否启动

连接数据库服务器之前,我们先检查一下我们的服务器是否启动,使用命令:ps axj | grep mysqld

如果看到像下图中框起来的内容,就说明我们的数据库服务是正常启动的,此时就可以连接数据库。

2、连接数据库服务

连接数据库服务有3个选项:

   -h代表你要连接哪个主机   -P指定端口号   -u表示哪个用户   -p+密码

连接MySQL服务器:mysql -h ”127.0.0.1” -P3306 -u root -p+回车
其中-h “127.0.0.1”,代表本地环回;mysql默认端口是3306;-p可以直接+密码,为了安全性,-p+回车,然后输入密码。

一般连接本机的情况下直接输入:mysql -u root -p

3、退出数据库

如果想要退出就直接输入:quit

如果想要停止数据库服务,使用命令:systemctl stop mysqld;

如果想要重新启动就使用命令:start mysqld

四、数据库的简单实用

1、创建数据库

创建数据库命令:create database 数据库名

我们做一个验证,重启一个ssh会话窗口然后登陆mysql,该窗口就位于/var/lib/mysql目录下,然后另一个窗口登陆mysql的会话窗口进行创建数据库的操作,当我们创建完毕后,我们就能发现在/var/lib/mysql目录下有一个test1的文件。

我们做一个验证,重启一个ssh会话窗口然后登陆mysql,该窗口就位于/var/lib/mysql目录下,然后另一个窗口登陆mysql的会话窗口进行创建数据库的操作,当我们创建完毕后,我们就能发现在/var/lib/mysql目录下有一个test1的文件。

所谓的创建一个数据库,本质就是在数据库的数据路径下,新建一个目录。就是把所有表数据打包起来的一个目录。

删除数据库:drop database xd_test,删除后在数据库文件夹下就不存在刚刚的文件了。

2、使用数据库

mysql命令行中输入:use test1;,就是使用该数据库,使用数据库本质等价于,在Linux中cd test1中。

test1就是我们创建的一个数据库,我们进入这个数据库里面ll观察,发现里面也没有什么东西,就一个db.opt代表数据库的一些选项,里面涉及数据库的一些默认编码和校验编码(校验规则)。

3、创建数据库表

创建数据库表命令:

create table student(

id int,

name varchar(32),

gender varchar(2)

);

当创建一个表结构后,我们在linux下ll,发现多了两个文件,student.frm表示我们创建的表结构,student.ibd表示数据+索引。

经过上述操作,我们就创建出来了一个数据库表,然后我们使用show tables;可以查看该数据库下所有的表;show create table students \G;命令可以查看我们刚刚创建数据库表的语句和一些字段属性:ENGINE代表默认采用的存储引擎InnoDB;CHARSET代表默认的字符编码集就是utf8。

删除表结构:drop table test1;,删除之后,和数据库表相关的两个普通文件也没了。 查看创建的数据库表结构:desc student;

删除表结构:drop table test1;,删除之后,和数据库表相关的两个普通文件也没了。
查看创建的数据库表结构:desc student;

4、数据库表中插入数据

使用命令:insert into student (id, name, gender) values (1, “xd”, “男”);进行表中数据的插入

5、查询数据库表数据

使用select * from students来查询我们所选表中所有的数据

当我们向表中插入数据后,我们发现我们linux下test1文件夹中的两个文件,student.frm表示我们创建的表结构,student.ibd表示数据+索引,这两个文件的大小都没有变化,这和我们的数据库缓存有关,而且还和我们的内存和磁盘在进行文件块级交互的时候不是立马刷新,它的交互方式是以块为单位。

五、数据库数据和存储逻辑

1、服务器、数据库、表关系

首先,所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

其次,为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

数据库服务器、数据库和表的关系如下:

我们前面也说过数据库就是文件,那么建立数据库和数据库表时,你的文件在哪里呢?我们打开数据库的配置文件,看一下他会把数据库放在那里,vim /etc/my.cnf,里面有一个datadir字段,datadir=/var/lib/mysql,这个就是你将来数据库中所形成的所有数据全部就会在这个目录下。我们切换成root用户/sudo进入这个目录下,就能看到各种数据库文件。

2、数据逻辑存储

实际上我们的mysql存储数据的时候是以表格形式存储的,包括行和列,我们把行称为一条记录;相同属性的字段会放在一列,列通常代表属性列,一列代表一个属性。并且这里需要注意,列名称不能重复。

五、SQL语句分类

5.1、DDL【data definition language】数据定义语言,用来维护存储数据的结构。 代表指令:create, drop, alter

5.2、DML【data manipulation language】数据操纵语言,用来对数据进行操作。 代表指令:insert,delete,update

  DML中又单独分了一个DQL,数据查询语言,代表指令:select

5.3、DCL【Data Control Language】数据控制语言,主要负责权限管理和事务。 代表指令:grant,revoke,commit

推荐更多学习课程:

java基础:    Java300集课程-Java必备优质教程_手把手图解学习Java,让学习成为一种享受_

Python基础: Python入门大全套!更适合初学者的Python从业速成计划!两个月可上岗那种!

Java管理系统项目合集: 可以写在简历上的项目合集,2022最新版Java初阶实战项目合集

java游戏项目:  【Java项目】开发王者荣耀教程和素材全套合集,不到2小时用Java做出王者荣耀

前端基础: 超干货!一周时间搭出小米商城!Web前端零基础入门HTML5+css3,学搭网站看这篇就够了!