数据库及SQL入门(一)

数据库作为计算机科学中一个独立的学科,其理论不是三言两语能够讲清楚的。在当今众多IT公司里,一些非技术人员在他们的日常工作中,有时候也会涉及到数据库,比如有的人经常跟数据打交道,需要从数据库中取一些数据,进行一些分析等。对于这部分人来说,对数据库有一个基本的了解也是必须的。本文旨在帮助非技术人员,对数据库有一个简单但力求准确的了解,并且学会操作数据库来获取数据,无需理会数据库这门学科理论化的东西,把关注点放在如何操作上。即本文不传道,而是传术,不教兵法,而是教如何开枪。

一、数据库是什么

不论是一个网站,还是一个App,我们都可以称之为“计算机应用”。一个计算机应用,基本上都是有存储数据的需求的。比如一个网站,上面有那么多的文章,文章中还有图片等数据,这些数据肯定是要存储起来,要不然你一年后又来看这篇文章,怎么会点开就能读呢,因为网站已经把这篇文章存储起来了;再比如支付宝这个App,注册用户几千万肯定有了,这么多的用户名和密码信息,阿里肯定要存储起来,要不然下次你来登录支付宝,它怎么知道你注册过了呢?

现在问题来了,如果让你来存储这些信息,你会怎么办?大多数使用过计算机办公的人,可能会想到,我可以把这些信息保存在记事本里,或者excel表格里,命名为“账号.txt”或者“账号.xls”。理论上来讲,一点毛病没有。可以说,如果支付宝把用户名和密码保存在记事本里,支付宝的功能一定不受影响。阿里的程序员只要在程序代码中,读取记事本里的用户名和密码就可以了。使用编程语言去读取一个文本文件是一件非常简单轻松的事情,大可不必为阿里的码农担心。

但是,一个记事本文件里,记录着几千万条用户名和密码等注册信息,将会带来十分严重的性能问题,可能在你登录支付宝时,一个小时之后才登录成功。因为要去记事本里查找有没有你这个账号啊,可是数据量太大,所以查找了一个小时之后才确认你可以登录成功,这显然是不可忍受的,这样的App是没法使用的。

读到这里,你可能隐约意识到,记事本不是这么玩的。一个企业开发的计算机应用,它有存储数据的需求,这点是毋庸置疑的,但是肯定需要一个专门来做这个事情的工具,而不是随便新建一个记事本或者excel来记录数据。这个专门的工具就是数据库。

从数据库的名字来看,可以推测,数据库就是存储数据的仓库。这当然是一个比喻,数据库实质是一个软件,专门用来给形形色色的“计算机应用”存储数据的一个软件,它是如此专业,专注于解决存储及管理数据的诸多问题,因此可以把它比喻为一个仓库,就是用来存储并管理数据的。回到上面的例子,我想,记事本可以比喻为一个床头柜,你可以把东西放在上面,也很方便。但是如果你有一大堆文件书籍,你非要摞到床头柜上,也没人管得了你,可是带来的种种问题也是显而易见的,所以最好是把你的文件书籍搬到你的仓库中去存放。

读者注意:上文在介绍数据库时,举了使用记事本来存储大量数据后性能很差的例子。但是请读者知悉,数据库绝并不仅仅是为了解决性能问题而出现的,它能解决的问题有很多,之所以用记事本这个例子,仅仅是为了让读者意识到,数据库是专为存储数据而生的。体会到这一点即可。

二、数据库管理系统

前文提到,数据库是存储数据的仓库,这是一种比喻,数据库实质是一种软件。其实这个地方是有些东西需要澄清的。开篇就提到,数据库是计算机科学中的一门独立学科,是包含着很多完善的理论内容的,这些理论当然也是围绕着“数据”的各种问题来建立的。也就是说,数据库首先是一个抽象的理论,而我们平时说的数据库,就是把这些抽象的理论进行具体实现的一个个的数据库软件,比如甲骨文公司的Oracle和Mysql,微软的SQL Server,IBM的DB2等等,这种软件标准的名字是“数据库管理系统”,英文缩写DBMS(Database Management System)。

dbmslogo

针对一种抽象理论,出现不同的具体实现,应该是可以理解的。如果不能理解,可以举一个简单的例子,比如手机这种工具,就可以看做是一种抽象的理论,而苹果iphone,三星note,华为荣耀等,就是手机这种抽象的一个个具体实现,这些厂商生产的产品形态各异,但是都完成了“手机”这一抽象理论中所描述的功能,比如可以拨打对方号码,接通后两人即可通话。同理,不同公司的DBMS软件各有特色,但是都是实现了数据库这一理论的软件。

读到这里,回想一下平时工作中,有同事提及,我们这个项目的数据库用的是Oracle,或者是Mysql,你是否更加清楚他在说什么了呢。就是说,我们项目有存储数据管理数据的需求,为了满足这个需求,我们需要使用数据库这套理论,而我们选择使用Oracle这个软件,来达到使用数据库这套理论的目的。由此进一步想到,如果不用Oracle,而是用Mysql,我们项目就不能做下去了吗?当然不是,不管是Oracle还是Mysql,它们都实现了数据库理论所给定的各种功能,所以理论上讲,用哪一个都是可以的。但是根据项目的特点,可能对某一种数据库软件的某些特色比较依赖,这就是项目的数据库选型问题了,不在本文讨论范围。

三、数据库实践概览

本小节大概介绍一下,在一个IT项目的具体实践中,数据库是扮演了一个什么角色。从而让读者对数据库的理解更加准确。

既然数据库是一个仓库,那么项目组选用的诸如Oracle,Mysql等数据库管理系统,是否可以理解为就是这个仓库呢?不是!在项目开始时,一个仓库也没有,Oracle不是你的仓库,而是需要用Oracle去创建一个仓库,创建的时候给这个仓库起个名字,比如叫做”库A”,这样项目就有了一个数据库了。如果你的项目很复杂,一个仓库不够,可以用Oracle再创建一个仓库,叫做“库B”。仓库里面肯定需要隔板架啊,那就再通过Oracle在“库A”中创建一些数据表,数据表里面就可以存放项目的数据了,比如网站的文章,图片,app的用户名,密码等等。当有新的数据需要被存储起来时,就把这些数据插入到数据表中;当有用户想要更改用户密码时,就更新数据表中的密码数据。所有这些向数据表中插入数据,更新数据的操作,当然也是通过Oracle来实现的。到这里读者应该可以对数据库管理系统(DBMS)的角色,有了一个比较清楚的感知了吧。

既然Oracle等数据库软件,就是用来进行创建数据库,创建数据表,插入数据,更新数据等操作的软件,那么实际工作过程中,是不是有工作人员看到有人注册,就打开Oracle,切换到搜狗输入法,把注册人的信息添加到数据库中呢?当然不是。数据库大多数情况下是跟软件程序配合使用的,也就是说对数据库的操作,都是程序员在代码里面写好的,不需要人为去操作。

那么程序员是如何告诉Oracle执行何种操作的呢?这就要了解一下SQL语言了。简单的说,SQL语言是Oracle、Mysql等众多数据库软件,都能理解的语言,程序员在程序中使用SQL语言来操纵Oracle、Mysql等数据库软件进行插入数据,更新数据,查询数据等操作。

再来介绍一下实际的工作情形,以便读者对数据库有更清晰的认识。上文数据库操作中,提及了创建数据库,创建数据表,插入数据,更新数据,查询数据等操作,在实际的项目中,往往在项目一开始,创建一次数据库,之后就再也不需要创建了,盖一个房子做仓库就行了啊肯定,之后的关键工作都是在这个房子里面存取数据。隔板架数据表的创建,往往也是在项目一开始,应该在设计阶段就完成了,之后根据需求的变更,表的结构(比如新增一列)可能会有变化,可能会创建新表,也可能删除废弃的表。数据表的设计是否合理,往往决定了项目开发阶段程序员编码时是否方便顺畅,考验着一个设计师的功力,当然这不是本文讨论范围。最后,根据实际的业务流程,程序员们在代码中更多的是对数据库中的表进行插入数据,更新数据,查询数据,删除数据。

虽然大多数情况是程序员使用SQL语言,在代码中操纵数据库。但是,如开篇所说,作为一个非技术人员,有时需要自己去数据库中查查数据,然后分析分析的。那么掌握SQL语言就是很必要的了。因为数据库文件毕竟不是记事本,你双击鼠标就能打开看。唯一的选择就是通过SQL语句去告诉Oracle等软件,你要对数据库进行什么操作。因此在后续的文章中,会介绍SQL语句。

(创建一个数据库之后,会产生一个数据库文件,如下图红框内是Sql Server创建的数据库文件,这个文件不是记事本那种文本文件,想要方便的读取,必须借助SQL语言)

sqlserverfile

对于非技术人员来说,平时工作中大部分做的应该是查询数据,查询出数据后可能要进行分析。很少会有人需要对数据库的内容进行更改,因为数据库的内容,应该来自于现实的业务流程,而不是人为随便更改的。所以重点要掌握SQL语句中的查询是如何使用的,在此基础上,建议对其他SQL的用法一并掌握,毕竟SQL语言就是那些内容,内容不是太多,投入一定精力还是可以全部掌握的。

对于数据库的介绍就到此结束,接下来会用几篇文章来介绍SQL语句,敬请期待!

Leave a comment

Your email address will not be published.