当前位置:   article > 正文

MySQL初阶【1】 —— 数据库介绍与SQL数据类型

MySQL初阶【1】 —— 数据库介绍与SQL数据类型

一、简单初识

1.数据库趣事

在工作中常见的关系型数据库有三个:第一个是Oracle公司的数据库,数据库名也叫 Oracle,这是公认世界上最好的数据库;第二个是MySQL数据库,这个数据库是社区大佬们一起弄出来的,属于是开源艺术品,当然现在MySQL已经被Oracle公司收购了(至于为啥会被收购,咱们待会再谈);第三个就是微软的SQL Server,但是微软的SQL Server有点力不从心,干不过前面两位,处于一个不上不下的地位。

咱们接下来要介绍与学习的是 MySQL这个数据库。这里当然也是有点故事的,为什么我们不直接学习 世界上最好的数据库 呢 ?原因就是:MySQL是开源的,能白嫖当然是白嫖呀!一时白嫖一时爽,一直白嫖就一直爽啊!Oracle公司的数据库虽然厉害,但是不便宜呀!而且在使用的时候,单独使用数据库还不能发挥出全部的功力,还需要配备一台小型机。正是因为开源与收费的对立,很多公司觉得MySQL也是可以用的,因此就放弃了Oracle数据库,随着MySQL的发展,MySQL的影响力也越来越大,市场份额也越来越大。作为数据库老大的Oracle公司当然不会坐视不管,于是来了一招釜底抽薪,直接向社区的几个大佬提议,买下MySQL数据库。社区大佬当然是同意的呀!本来是用爱发电,现在不但可以发电,还能赚钱,简直不要太爽!当然,Oracle虽然贵,但也是有人用的,比如:一些不差钱,但又对数据要求很高的企业(银行)。

在咱们中国互联网最开始发展的时候,其实也是用Oracle数据库,但是随着数据量的增大,数据的维护越来越重要,维护成本也越来越高。如果我们站在阿里巴巴的视角,就会觉得这纯纯帮帮别人打工赚钱啊,于是就牵头各个互联网公司,在中国搞起了去Oracle运动,于是MySQL就代替了Oracle成为中国比较主流的数据库。随着各种大佬的加入,MySQL自然是越来越好,一些小公司看他们大公司都能玩得转,自然也消去了自己的那一份担忧,因此也纷纷用起了MySQL。所以,对于一些有技术情怀的读者(包括笔者自己),咱们要意识到:技术的变革是由业务推动的!业务才是一个公司的灵魂。

对于比较没有存在感的SQL Server,我们也会好奇是什么原因导致的。其实,这是微软公司营销策略上的失误。首当其冲的就是:收费。对于这个收费啊,其实是0~1的过程,要么就不收费,要收就收贵一些。但是微软很尴尬,向上又够不着Oracle这么好,没理由收得比别人贵;向下又不肯开源,又没有MySQL白嫖来得香。当然,部分处于中层的企业可能会觉得微软这种中间的比较适合他们,既不用很担心数据安全问题,也不用担心收费带来的昂贵成本。但是,微软还有一个骚操作:捆绑销售。用户必须在Windows上使用SQL Server。我们知道Windows虽然好,但也不是一家独大呀!我们知道的操作系统还有:LinuxMac osAndroid等等,在有其他选择的时候,凭啥用你SQL Server呢?然而,等微软反应过来的时候,想支持Linux,但已经来不及了,市场早就被OracleMySQL瓜分完毕。

好啦,关于数据库的一些趣事大概就如上所示。这些事情也是蛮有趣的,其实Oracle公司还跟Google公司有过一番腥风血雨,此处就不展开聊了。接下来,我们就正式进入数据库的学习吧~

2.数据库介绍

(1)SQL语言

学习数据库主要是学习SQL语言,这是一门结构化的查询语言。这门语言是运行在OracleMySQLSQL Server之上的,不同数据库软件公司支持的SQL语法只是稍有不同,但是大体相当

(2)数据库类型

这里要注意:SQL语言并不是数据库的全部。我们上面谈到的OracleMySQLSQL Server都属于关系型数据库什么是关系型数据库呢 ?如下图所示,其实这有点类似于我们的Excel表,也就是所有关系都是对应着的。

在这里插入图片描述

既然有关系型数据库,自然就有非关系型数据库,常见的非关系型数据库有如下这些:RedisMongoDBHBase。非关系型数据库的存储方式比较灵活,相比于关系型数据库,它的功能更少,但是性能更快,能够很好地适应分布式环境。这里简单解释一些分布式是什么意思。我们常听到的高并发、大数据、分布式、微服务其实是一个意思:在面对海量数据(大数据)的背景下,一台机器的硬件资源已经不能够满足用户的需求了,所以就多增添两台、三台、四台…来提供更流畅的服务。

(3)请求与响应

这里的请求与响应其实就是计算机网络中的概念,由客户端(client)主动发出请求(request),服务端(server)被动接受并返回一个响应(response)。那数据库作用于哪里呢?数据库作用于服务端一边。举个例子:我们在登录网站的时候,我们自己的电脑(也就是客户端)会向网站的服务器发出一个请求,服务器接收到这个请求之后就会在数据库中寻找用户数据,如果存在这个用户,并且用户的账号、密码均是正确的,那么就能够登录网站,否则就会响应一个错误。

在这里插入图片描述

(4)数据的存储

刚刚咱们谈到数据的存储在服务端的,那么具体是存储在哪里呢?这就要涉及一些简单的计算机组成原理的知识了。我们知道,计算机属于冯诺依曼体系,主要由四个部分组成:输入设备、输出设备、CPU、存储器。输入设备就是键盘、鼠标这些设备;输出设备就咱们看到的显示屏;CPU也叫中央处理器,里面结构复杂,涉及内容颇多,此处就不多作介绍了;存储器就是咱们存储数据的主角了,存储器专门负责存储数据

存储器可以分成:内存和外存。这里的内存就是我们平时说的电脑内存,大家可以看看自己的电脑是多少内存的,笔者的笔记本就是16GB的。下图中的机带RAM也叫运行内存,其实就是电脑内存的意思。

在这里插入图片描述

那么外存有什么呢?我们计算机上的:硬盘就属于外存,还有我们常用的U盘也是外存。笔者小时候见过光盘也属于外存的一种。

在这里插入图片描述
既然计算机分了内存和外存,那么这两者有什么区别呢?

A.内存的读写速度比外存快,大概能相差 3~4个数量级
B.内存的空间比外存空间小
C.内存比外存贵
D.内存数据是“易失的”,而外存数据是“持久的”。简单来讲:内存数据在断电之后就会丢失,但是外存不会。

基础的数据库介绍大概就如上所示,接下来我们讲讲数据库的创建、查看、使用 与 删除。

二、库的CURD

1.创建

数据库增加的语法
create database 数据库名;
或者
create database if not exists 数据库名;
  • 1
  • 2
  • 3
  • 4

笔者这里为数据库起名为test_for_blog,就有了如下的代码。这里我们顺便补充一下数据库的命名格式问题,对于多个单词合在一起命名的数据库名,咱们用_来分割。创建如下所示:
在这里插入图片描述

如果我们创建了同名的数据库,那么编译器就会报出如下所示的错误:database exists,也就是提示我们重复创建。这就带来了一个问题,等到数据库很多的时候,我们怎么知道这个数据库创建没有呢
在这里插入图片描述

这时候我们就需要用到我们第二种创建数据库的语句了,在下图可以看到编译器此时已经没有报错,并显示OK。说明此时数据库已经创建成功了!
在这里插入图片描述

2.查看

查看数据库的语法
show databases;
  • 1
  • 2

看到查询结果的最下方,我们发现正是我们的刚刚创建的数据库。这里唯一需要注意的就是 databases这个单词是个复数,大家在拼写的时候不要敲错了。

在这里插入图片描述

3.选定

选定数据库的语法
use 数据库名;
  • 1
  • 2

这里的语法其实很鸡贼~因为按照我们上面的习惯,我们此时应该写use database 数据库名,但是我们并不需要database,如果我们记错了,其实应该把锅给设计背,这是设计的问题,不是我们程序员的问题。但是,我们在笔试和面试的时候还是不要写错为好。

在这里插入图片描述

4.删除

删除数据库的语法
drop database 数据库名;
或者
drop database if exists 数据库名;
  • 1
  • 2
  • 3
  • 4

这也比较简单,我们还能通过刚刚的 show语句来验证一下。

在这里插入图片描述

关于删库笔者需要多说几句:删库是危险操作,可能会直接给公司带来损失,每一分钟的损失可能都不是你一辈子的工资能抵得起的,如果是故意删库,将会面对坐牢的风险

三、数据库表的数据类型

1.数值类型

在这里插入图片描述
上方的数值类型大部分没啥好谈的,跟Java的数据类型比较相似。唯一值得聊一聊的就是最后一个decimal(size,d)这个数据类型。

floatdouble相比,decimal能够比较精确的表示浮点数。不过,这种精度提升是需要:牺牲存储空间、牺牲运算速度的。我们看看这个类型怎么使用把score decimal(3,1),如果score = 98,存储的时候就会存成98.0,给小数不够的补0;如果score = 98.05,存储的时候就会存成98.0,直接去掉后面的数字。(跟floatdouble的n+1位四舍五入不同)。

2.文本类型

在这里插入图片描述

3.日期类型

在这里插入图片描述

这里值得注意的是第三个TIMESTAMP()。这个类型很强大,我们计算机上的时间也是用这种类型表示的,因此我们的计算机还能通过时区来调整时间。但是这种强大就意味着牺牲,这个类型是用时间戳来作起始标志的,那么就意味着:当存储的差值太大时,这个时间戳就会被耗尽!所以,我们能看到注释中写到:支持的范围只到2038年。因此,能不用就尽量不用。

四、一个有意思的面试题

我们在创建数据库的时候,其实还能指定数据库的字符集,那么读者们知道在计算机中:一个汉字占一个字节吗?

有的读者可能会回答:2!也有的可能会回答:3!但是只回答具体数字的读者通通都败给了这道面试题。

正确的回答应该是:结合具体的字符集来回答比如说:在Java内置的 unicode 的编码方式中,一个汉字占两个字节;在 UTF-8 这个编码方式中,一个汉字一般是3个字节。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/888515
推荐阅读
相关标签
  

闽ICP备14008679号