赞
踩
在工作中常见的关系型数据库有三个:第一个是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
虽然好,但也不是一家独大呀!我们知道的操作系统还有:Linux
、Mac os
、Android
等等,在有其他选择的时候,凭啥用你SQL Server
呢?然而,等微软反应过来的时候,想支持Linux
,但已经来不及了,市场早就被Oracle
和MySQL
瓜分完毕。
好啦,关于数据库的一些趣事大概就如上所示。这些事情也是蛮有趣的,其实Oracle
公司还跟Google
公司有过一番腥风血雨,此处就不展开聊了。接下来,我们就正式进入数据库的学习吧~
学习数据库主要是学习SQL
语言,这是一门结构化的查询语言。这门语言是运行在Oracle
、MySQL
、SQL Server
之上的,不同数据库软件公司支持的SQL语法
只是稍有不同,但是大体相当。
这里要注意:SQL
语言并不是数据库的全部。我们上面谈到的Oracle
、MySQL
、SQL Server
都属于关系型数据库。什么是关系型数据库呢 ?如下图所示,其实这有点类似于我们的Excel表,也就是所有关系都是对应着的。
既然有关系型数据库,自然就有非关系型数据库,常见的非关系型数据库有如下这些:Redis
、MongoDB
、HBase
。非关系型数据库的存储方式比较灵活,相比于关系型数据库,它的功能更少,但是性能更快,能够很好地适应分布式环境。这里简单解释一些分布式是什么意思。我们常听到的高并发、大数据、分布式、微服务其实是一个意思:在面对海量数据(大数据)的背景下,一台机器的硬件资源已经不能够满足用户的需求了,所以就多增添两台、三台、四台…来提供更流畅的服务。
这里的请求与响应其实就是计算机网络中的概念,由客户端(client)主动发出请求(request),服务端(server)被动接受并返回一个响应(response)。那数据库作用于哪里呢?数据库作用于服务端一边。举个例子:我们在登录网站的时候,我们自己的电脑(也就是客户端)会向网站的服务器发出一个请求,服务器接收到这个请求之后就会在数据库中寻找用户数据,如果存在这个用户,并且用户的账号、密码均是正确的,那么就能够登录网站,否则就会响应一个错误。
刚刚咱们谈到数据的存储在服务端的,那么具体是存储在哪里呢?这就要涉及一些简单的计算机组成原理的知识了。我们知道,计算机属于冯诺依曼体系,主要由四个部分组成:输入设备、输出设备、CPU、存储器。输入设备就是键盘、鼠标这些设备;输出设备就咱们看到的显示屏;CPU也叫中央处理器,里面结构复杂,涉及内容颇多,此处就不多作介绍了;存储器就是咱们存储数据的主角了,存储器专门负责存储数据。
存储器可以分成:内存和外存。这里的内存就是我们平时说的电脑内存,大家可以看看自己的电脑是多少内存的,笔者的笔记本就是16GB的。下图中的机带RAM也叫运行内存,其实就是电脑内存的意思。
那么外存有什么呢?我们计算机上的:硬盘就属于外存,还有我们常用的U盘也是外存。笔者小时候见过光盘也属于外存的一种。
既然计算机分了内存和外存,那么这两者有什么区别呢?
A.内存的读写速度比外存快,大概能相差 3~4个数量级
B.内存的空间比外存空间小
C.内存比外存贵
D.内存数据是“易失的”,而外存数据是“持久的”。简单来讲:内存数据在断电之后就会丢失,但是外存不会。
基础的数据库介绍大概就如上所示,接下来我们讲讲数据库的创建、查看、使用 与 删除。
数据库增加的语法
create database 数据库名;
或者
create database if not exists 数据库名;
笔者这里为数据库起名为test_for_blog
,就有了如下的代码。这里我们顺便补充一下数据库的命名格式问题,对于多个单词合在一起命名的数据库名,咱们用_
来分割。创建如下所示:
如果我们创建了同名的数据库,那么编译器就会报出如下所示的错误:database exists
,也就是提示我们重复创建。这就带来了一个问题,等到数据库很多的时候,我们怎么知道这个数据库创建没有呢 ?
这时候我们就需要用到我们第二种创建数据库的语句了,在下图可以看到编译器此时已经没有报错,并显示OK
。说明此时数据库已经创建成功了!
查看数据库的语法
show databases;
看到查询结果的最下方,我们发现正是我们的刚刚创建的数据库。这里唯一需要注意的就是 databases
这个单词是个复数,大家在拼写的时候不要敲错了。
选定数据库的语法
use 数据库名;
这里的语法其实很鸡贼~因为按照我们上面的习惯,我们此时应该写use database 数据库名
,但是我们并不需要database
,如果我们记错了,其实应该把锅给设计背,这是设计的问题,不是我们程序员的问题。但是,我们在笔试和面试的时候还是不要写错为好。
删除数据库的语法
drop database 数据库名;
或者
drop database if exists 数据库名;
这也比较简单,我们还能通过刚刚的 show
语句来验证一下。
关于删库笔者需要多说几句:删库是危险操作,可能会直接给公司带来损失,每一分钟的损失可能都不是你一辈子的工资能抵得起的,如果是故意删库,将会面对坐牢的风险。
上方的数值类型大部分没啥好谈的,跟Java的数据类型比较相似。唯一值得聊一聊的就是最后一个decimal(size,d)
这个数据类型。
与float
和double
相比,decimal
能够比较精确的表示浮点数。不过,这种精度提升是需要:牺牲存储空间、牺牲运算速度的。我们看看这个类型怎么使用把score decimal(3,1)
,如果score = 98
,存储的时候就会存成98.0
,给小数不够的补0;如果score = 98.05
,存储的时候就会存成98.0
,直接去掉后面的数字。(跟float
和double
的n+1位四舍五入不同)。
这里值得注意的是第三个TIMESTAMP()
。这个类型很强大,我们计算机上的时间也是用这种类型表示的,因此我们的计算机还能通过时区来调整时间。但是这种强大就意味着牺牲,这个类型是用时间戳来作起始标志的,那么就意味着:当存储的差值太大时,这个时间戳就会被耗尽!所以,我们能看到注释中写到:支持的范围只到2038年。因此,能不用就尽量不用。
我们在创建数据库的时候,其实还能指定数据库的字符集,那么读者们知道在计算机中:一个汉字占一个字节吗?
有的读者可能会回答:2!也有的可能会回答:3!但是只回答具体数字的读者通通都败给了这道面试题。
正确的回答应该是:结合具体的字符集来回答。比如说:在Java内置的 unicode 的编码方式中,一个汉字占两个字节;在 UTF-8 这个编码方式中,一个汉字一般是3个字节。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。