MySQL的初步认识 - 细节狂魔
数据库就是一个软件,或者说是一类软件。不要想太多就跟qq、微信一样,都是一个软件。至于为什么后面说是一类软件,因为数据库软件的品种有很多。我们的MySQL 就是其中之一。
这一类软件功能就是“管理数据”,实现数据库软件的内部,会广泛的使用各种数据结构。
注意 学了数据结构,不是说我们会刷几道题了,不是这样的。
数据结构,这门知识就是在讨论具体如何组织和管理数据。
管理的目的:为了进行“增删查改”。
说白了,数据库就是基于数据结构,所实现的一个非常具体软件。
数据库管理的数据,保存在哪里?
一般情况下,是保存在硬盘上。
说到硬盘,我们就不得不说一下电脑的组成,
电脑的组成 :冯诺依曼体系
说到冯诺依曼体系,就不得不提到一个人 现代计算机之父 就是 约翰.冯.诺依曼。
冯诺依曼体系 由五个部分组成
1、输入设备,2、输出设备,3、外存储器,4、内存储器,5、运算器和控制器(两者组成的,也就是所谓的CPU)
冯诺依曼体系结构图
CPU
CPU 又称 中央处理器,计算机最核心的组件! 是计算机的大脑。
是目前人类科学技术的巅峰!能CPU的技术含量相提并论的,只有氢弹。
存储器
CPU 是用来运算数据,但是计算机除了运算,还能存储数据。
存储数据 就是借助 存储器这样的设备。
而存储器又分两个大类: 内存和外存。
外存的种类还有很多!比如:软盘,磁盘,光盘,硬盘,flash(U盘)。其中我们生活中见到的最多的是 硬盘 和 U 盘。
内存 和 外存的区别
1、内存的存储空间较小(电脑常见内存大小:8G,16G),外存的存储空间很大(512G,1T)
2、内存的访问速度块,外存的访问速度慢。(内存的访问速度大概比外存的访问速度,快 3 ~ 4个数量级,也就是几千倍 ~上万倍)
【这里的外存,特指的是机械硬盘,外存的访问速度受限于机械硬盘的物理结构,机械硬盘的存储速度,已经快10年没有发展了。懂电脑的朋友,知道还有一个SSD固态硬盘。访问速度很快,比机械硬盘快很多,最好的固态硬盘,快赶上最垃圾的内存了,唯一的缺点就是贵】
3、内存成本太高,外存的成本太低。
4、内存中数据,断电后消失,外存中的数据,断电后还在。
输出 和 输入设备
这两个设备 就是 我们用户 和 计算机之间进行一个交互的设备。
输入设备:键盘、鼠标、麦克风等等…
输出设备:显示器,音箱等等…
总结
当前世界上绝大部分的计算机,99%以上 都是上述的这五个部分所组成的。
而数据库管理的数据,就是保存在硬盘上。数据库就是一种“持久化存储”数据的方式
相比我们平常写代码,数据基本都是在内存中的实现和保存的。(当我们定义一个变量,其实就是在向操作系统进行申请内存)
小拓展
也有少部分数据库,是把数据存储在内存中的。比如 Redus,Tair等等…
但这些都不是目前主流的数据库。
我们平常用的最多还是 将数据存储在外存的数据库。
什么是 MySQL?
MySQL 就是 一个 具体的数据库软件之一,也是我这个数据库主题文章的中心点。
有的朋友可能学的或者用的不是MySQL,而是 SQLServer。它也是一个数据库软件。
以后在实际工作中,数据库用的最多的还是 MySQL。
不是说SQLServer 不好,而是它被自家公司微软的营销策略给坑了,最初的时候,要求必须是 windows 系统才能使用。
但是,大部分公司的服务器系统都是Linux系统。根本不支持SQLServer,于是,市场被其他的软件所抢占。导致它错过了发展起来的机会。虽然后面改回来了,但是并没有多大作用
另外,其实各个数据库之间,差别大师很大,微乎及微。会MySQL,那么操作其他的数据库,也不是问题。
至于还有的朋友可能说:我们学的是 Oracle。
Oracle 是数据库中,最顶尖的存在!
但其实在很多公司里,Oracle 几乎不会用到。原因就是贵!但是 MySQL 是免费的!
有的人朋友可能会问:how much?一个月大概
除了不缺钱的那种,比如中国人民银行:它的数据特别重要,就需要用到 Oracle来管理数据。
而且,一旦数据出现了问题,随时可以找 Oracle的技术支持上门服务。还有 ! 如果是 Oracle 软件 的 问题,人家会做出相应的赔偿。
总得来说 我们的重点在于MySQl。【数据库三大巨头:Oracle、MySQL、SQLServer】
细谈MySQL
MySQL 这个数据库,是一个“客户端 - 服务器”结构的程序。(涉及到网络编程)
所谓的“客户端 - 服务器”结构:网络通信的时候,通信双方,分别起的名字。
我们通常将主动发起请求的一方称为“ 客户端”,被动接受请求的一方称为 “服务器”。
对于 MySQL ,你安装好了 MySQL,相当于 安装了 客户端 和 服务器。
客户端 和 服务器之间是通过“网络”来通信的。
举个例子
假设:我们现在要下馆子,我们(主动的)选择某一个餐馆(被动的)。此时的我们就是一个客户端(拥有主动权),而餐馆不知道到我们是否会选择它,什么时候来。一直处于被动的情况,简单来说被动的一方就是服务器。
当我们走进餐馆的时候,说先吃什么什么。我们一般都会加上一个句老板有这个菜吗?这就是一个请求,而老板呢,他就会说有,请稍等,然后他把菜端上来了,这盘菜就是 响应。
所以,客户端给服务器发送的数据,称为 “请求”。
服务器给客户端返回的数据,称为“响应”。
另外,需要注意的是:不是说 客户端 和 服务器 必须 安装一个 主机上。
我可是 2个主机,一个装 客户端,一个装服务器。
但是,最常见的情况:拿前面举的例子来说:这个餐馆不可能只招呼我一个人,其他人也会来着消费。
那么,我想表达的意思就是:一个服务器 与 多个 客户端 进行交互。
那么引出一个问题:MySQL 的 客户端 和 服务器 谁更重要呢?
很显然 服务器 更重要。服务器就是我们的数据库的本体(服务器在MySQL 当中的角色就是用来保存和管理数据的一端,而客户端是不持有数据的,它要想 获取/修改 数据,只能通过网络与服务器进行交互,依次来达到 获取/修改 数据的目的),一个客户端出了问题,只有服务器没问题,那么,其它的客户端的运行也就没有问题。只需要处理 出现问题的 客户端就行了。
可一旦 是 服务器出了问题,所有的客户端都要遭殃!!!
数据库的简单操作
知识铺垫
在进行简单操作之前,装了MySQL数据库的朋友,跟着我的来看 MySQL 的 服务器在哪。 (没装的朋友去官网下载,博主我的是5.7版本的,建议你们下载 5 这个大版本,最新 8 版本对新手不太友好。至于安装视频上b站 搜 很简单的)
为什么我要先说这个,是因为,接下来的操作,需要服务器处于工作状态。
说了这个,至少能确保你们的MySQL 是 正常工作的。
下面我们来看客户端的在哪里。
有的朋友会说:我可以修改 mysql的服务器 配置文件,跳过权限表登录。但是,这么做很麻烦。
你还不重装一下,设置一个简单到不行的密码来得舒服。反正我们的数据不值钱。。【穷 == 安全,除了我们的腰子】
此时,进行前面的一番操作,我们此时应该都会打开MySQL 了
此时,我们的客户端已经连上了服务器,接下来,我们进行的任何操作,本质上都是客户端给服务器发送了网络请求,服务器在做出具体的响应。
下面我们就来进行一个简单的操作
连接上之后,我们就可以通过这个数据库的客户端操作服务器了。
当前我们都是通过命令行的方式进行操作的。又称 SQL 语句。
SQL 语句 虽然是一个单独的编程语言,实际上这个东西并不难,只要多操作一下,熟练就好了。
简单操作 :通过 SQL 来操作 “数据库”
大家需要注意一点:数据库这个词,具有很多的含义。具体想知道操作的是什么"数据库",需要结合上下文。
我们这里的数据库 指的是 一个 MySQL服务器上,所管理的一个独立的数据集合。
了解这个概念后,我们就可以开始操作了。
第一个简单操作 :显示出当前服务器 上 都有哪些数据库(哪些数据集合)
显示数据集合命令: show databases;
有的朋友可能不一样,但这不是问题。只要显示这么一个表就行了。
当前的表的意思:当前MySQL 的 服务器上有哪些数据集合。
有些是我们自己创建的,有些是系统自带的。这张图就是系统自带的,我还没有自己创建数据库。
注意!服务器自带的数据库不能动!!!! 容易狗带。
另外,再说一点:命令行下输入的SQL语句,基本上都是以分号结尾,且不区分大小写。
SQL 语句 中的 单词 基本上都是使用空格来分割的。
第二个简单操作:创建数据库
创建数据库命令: create database 数据库名字;【注意这里database 是单数的,没有加s】
大家在敲的时候,一定要注意单词拼写!它不在 Java 在 idea 当中拼写 方法名 和 类名 会有提示的。在数据库中,输入错误的命令是不会执行命令,也没有提示你语句该怎么写。
给数据库起的名字,在不包含SQL语句中的 关键字的情况下,随便取名。
如果实在要使用关键字来作为名字,需要 用 反引号 `` 引起来。
【就是在 ESC 键下面,1 键的左边,tab键的上面,输入法调整为英文,按两下就是了 】
【SQL 语句的关键字,其实就命令语句的成员,比如 show ,database这些。。】
【注意!关于符号的规则,还是跟我们敲代码一样,必须是 英文符号】
小技巧:可以在输入法设置中,勾选下面图中选项,能让我们在敲中文的时候,符号还是英文的。(大部分输入法都有这个功能,可能名字不一样。自己多摸索)
我们来 show databases; 一下、
事实证明,我们的 java 数据库 就创建成功了。
小拓展:
访问速度
访问网络 : s(秒) ~ ms(毫秒)
访问磁盘:ms(毫秒) ~ us(微秒)
访问内存:us(微秒) - ns(纳秒)
操作CPU:ps(皮秒)
因为数据库要操作磁盘数据,所以它的时间与 访问磁盘的速度差不多。
所以 数据库往往是比较慢的一个环节,未来涉及到一下“系统优化”这样的场景。数据库很容易就会成为“性能瓶颈”【就是性能限制】。
时间进制: 1s == 1000ms
1ms == 1000us
1us == 1000ns
1ns == 1000 ps
不要短路了,见什么都是1024.。。。。
创建一个具有 SQL 语句关键字的 数据库
正确写法:用 `` 将数据库名字引起来。
如果我们想要在输入一遍上次的 SQL 语句
就是直接按 上下方向键,就可以翻找以前输入过的指令。
使用错误的命令 create database s 来创建数据库(错误实例)
创建一个 数据库 java,但是服务器中已经有 java 这个名字的数据库了。会怎么样?(错误示例)
其他创建数据库的SQL语句的补充
1、如果系统没有 db_test2 的数据库,则创建一个名叫 db_test2 的数据库,如果有则不创建.
命令:create database if not exists db_test2;
2、如果系统没有 db_test 的数据库,则创建一个使用utf8mb4字符集的 db_test 数据库,如果有则不创建.
命令:create database if not exists db_test character set utf8mb4;
MySQL的 utf8 编码 不是真正的 utf8,没有包含某些复杂的中文字符。MySQL真正的utf8 是使用 utf8mb4,建议大家都使用 utf8mb4.
什么是字符集?简单来说:相比大家都知道 在编程中,我们代码 所有的字符和符号,可用ASCII码来表示,也就是说用数字来表示。
而 utf8mb4 和 ASCII码差不多,只是 utf8mb4 能表示的数据更多。
常用的字符集版本:1、GBK ,2、utf - 8(utf - 8 是编程中用的最多的汉字编码方式)
【 utf8mb4 和 utf-8 差不多,utf8mb4 就是多了一些表情字符 比如 emoji】
第三个简单操作:选中数据库/使用数据库
在针对数据库进行进一步操作何倩,需要先选中数据库,再进行操作。
选中数据库命令:use 数据库名;
这个选中操作,就类似于:大家玩RTS 类游戏,比如:红警,星际争霸,魔兽争霸3,帝国时代。
玩家需要控制很多单位。那么怎么控制这些单位,需要先选中单位,再给予指令操作。
引申出游戏公司一个常见的面试题
让你说出 RTS、FPS、MOBA、RPG等等… 这些单词的含义。
RTS:即时战略类游戏:红警,星际争霸,魔兽争霸3,帝国时代。
FPS:第一人称射击类游戏:CS CF
MOBA:刀塔类游戏:LOL 、刀塔二
RPG:角色扮演类游戏
特殊:绝地求生 的 游戏类型:“吃鸡类游戏”
很多游戏公司就会问到这些。
第四个简单操作 - 删除数据库 - 重要!
删除数据库命令: drop database 数据库名;
将指定的数据库删除,但是这个操作非常危险!!!!!
一旦执行成功后,此时数据大概率是恢复不过来了。直接GG。
以后在公司里,切勿操作 drop database 命令。
名言:“从删库,到跑路。”
最后 ,我们来了解一下,创建的库,一般在数据库安装目录里。我们来看一下位置。