数据库学习乱草(一)

聊以自慰
升入大二之后的学习之路还是漫长漫长又漫长,苦海无涯,也没有回头路,唯一的解脱就是尽快熬出头。
保持灵感、思考和不断的发现,这是我的自勉。
每个人都需要有自己的骄傲,别人夺不走,但是事未必遂人愿,必要的放弃是为了归来,我已经将自己最大的寄托丢掉,不再每日沉迷在小说的创作,瑰丽文字和幻想的沉迷中,成为另一个我,但是某些东西,毕竟是留下来了。
丢弃了无用的执着的自己,还有什么值得骄傲的呢,也许没有了,虽然可以用什么时候重新开始都不晚来勉励,但自欺欺人也要看心有多大。
大一一年尽是虚无,没有科研没有竞赛没有社交绩点排在第一梯队边儿上的我,没有优势。
优势应该是能力,以及那些硬得恨不得将你的脑袋撞出血的证明,从这一点上说,我似乎已经被落得远远的,我之所以还能够看见别人,是因为被套圈了。
但是我依旧期望,能够凭借写一些东西,积累自己所有或凡或坏的想法,来“拥有”。
谁叫你选择了最蛋疼的一条路。

记录的开始
数据库课程,选用的教材是机械工业出版社出版的数据库系统概念中文第六版。
强迫症这个东西是在追求完美的时候才会有的,既然已经是半路出家萌生了这个记录学习的想法,开始才是最重要的,那么就从第五章开始吧。

高级SQL
什么是高级sql,自然就是跟低级sql不同的查询语言,还记得学习3、4章的时候那种复杂的查询结构一度让我倍感肺疼,现在想来,这也许是数据库这门学问本身的特点决定的——你有一群数据,你要进行相应的存储,那么铺天盖地地送进内存就很捞了,必须有一定的结构,结构不只是为了节省时间和空间,也是方便你的逻辑思维,既然逻辑当然反人类,思考的过程痛苦一点是很正常的。
而且说起来,所谓的查询,只是一种最平常的语言或者需求不是吗?
我们往往只是关注于一个东西是否具有某种性质,或是具有某种性质的东东到底在哪儿(或,它的别的性质如何?),而这个东西,主谓宾,是很好用最基本的语言结构描述出来的,至于那种层层嵌套的子查询、聚集以及分类为何会让我感到崩溃,可能只是因为这玩意儿压根继承了西方的语言特点上,how are you你硬要翻译成老是你,总不能怪人家英语发明得不对。
什么是高级,到底怎么样才算是高级?这是个比较玄学的问题,但是你的c++,java是高级语言程序而汇编语言机器语言统统不是,这就是一个思考的借鉴,虽然很难过但是它们毕竟更为地贴近了我们人类而非是机器,这一点就足以让我们感恩戴德,当然了,贴近人性化而不是机器固有的逻辑必然导致了相应的浪费和代价,你要享受这一点便利,也要有对应的复杂,事实上,这是个充分必要条件的问题。
如果到这里我们还不明白类比过来什么样子算是高级sql,那也无所谓,既然程序语言是高级的,那sql要是能用上sql,必定也就不是很捞了。
事实上书上的两个定义也是如此:sql的高级特性表现在两点,一是通过扩展sql语言来支持程序(程序,程序!)的操作;一是在数据库中执行程序语言定义的函数(函数,函数!)

使用程序语言访问数据库
实打实地说,sql查询应该是已经很强大了?能够将数据库中的数据按照对应的条件检索聚集并且呈现出来,但是要高级那明显还是不够的。
这也许就是我们这一行的悲哀,从入学的时候我就被灌输“计算机是一门解决问题的学科”,但现在看来这一点似乎并不足以成我们的骄傲反倒是令我们痛苦的来源。
都说世界上百分之九十的人都是需要工作的,这是为什么,就是因为工作,在你不知道为了自己还是为了一双皮鞋还是为了一位富婆手上的指甲油完成了一项业务的时候,你就解决了问题,而这种满足感和安全感,甚至是我们生活的动力源之一。
但是放在计算机学科,解决了一个问题你有啥好骄傲的,问题解决完了吗?永远不会,而是要浩浩荡荡朝着你奔涌而来,不被淹死就是好的,满足安全?省省吧您。
而且问题就在于,我们总是在为自己找问题。
讲真的,对我这样一个不入门的人来说,那样低级的sql似乎已经很够用,但其实当然很不够用,为了解决我们这个世界的终极问题即解决我们自己搞出的问题,我们必须将其跟程序语言关联起来。
为什么是程序语言呢,要知道,程序并不能解决一切,要试图通过编程设计的方法解决一切问题显然是有些缺脑筋的。
但是这句话说在IT界,就等同于你在日常生活中说了一句“钱不是万能的”一样——你是无法逃避这个问题的。

为什么?
为什么数据库程序员必须能够使用程序设计语言?
简单地来说,数据库的查询没有设计语言那样的表达能力,所以并不能表达所有的查询要求,这于我是难以想象的,因为我所使用的sql只是时时超出我的想象,能够让我感到凌驾于它之上的时候还没有过(再次声明,本人是菜鸡),但是再结合一下学习数据结构时的旋天转地,我信了,肯定是有只有通过高级语言程序编写的查询的结构,别的不说,就算是通过一百层的子查询嵌套你能找出个数据,你难道不会更倾向于用高级预言实现?
此外,数据库之所以功能强大,是因为它是数据库——所有的一切都关于检索、查询、更新(往往人也是这样的,专精的时候,才能强大),但也正是如此,它也只能作为数据库,而我们的需求,从来都是多方面的,交互,打印,图形,这些的组合才是一个完整的需求的理想蓝图,而这个时候,数据库必定是要能够嵌套到某种编程语言中才可以。
就像是NBA中的运动员,甭管您自己单干的时候多牛逼,只要是你来到了夺冠队伍,你就得有牺牲,你就得安于自己的职责,你就得在教练布置的时候站出来,超巨全明星,在真正完整的队伍里,也就是块儿拼图。
数据库,也只是块儿大落落的拼图而已。

怎么实现
虽然说起来是整体中和谐的存在,但是数据库和高级语言毕竟不是一个玩意儿,怎么把他们结合起来是个问题,教材上提供了两种方法。
动态sql:
通过程序设计语言可以通过函数或者是方法连接数据库服务器,算是句我能听懂的人话吧,不过到底怎么在c++中用函数实现sql的查询对我还是……总的来说,这就是在程序设计语言之中用字符串的形式来表达对应的sql语句,而这样查询出来的结果也是要存入一个程序变量中的,可以说是完全适应了程序语言。
嵌入式sql:
其实也就是使得程序和数据库能够实现交互,但是问题在于,这种嵌入式的实现是必须在编译的时候就全部确定的,然后预处理器将会提交这个语句到数据库之中进行预编译和优化,最后将程序中的sql替换为相应的代码和数据,最后调用程序语言的编译器进行编译。

这两个的区别好像是在于,第一个是用程序来调用数据库,而第二个则是以程序为执行的核心。

即便是我也觉得十分蛋疼的地方是,sql处理数据的方式我大概是了解了,无非就是若干个关系(还是觉得称为列表更为顺口)中进行操作并且返回关系(关系的一部分,甚至是元组,甚至是元组的一个属性,所以行、列、点都可以是对应的输出,但是要理解的是,关系毕竟就是个方方正正的表格,而所谓的元组、一个属性、一个点再怎么特殊,也是关系——关系和关系的实例的形式之一),但是程序语言大致上无论对象还是过程,都是用变量来作为操作的载体的吧?

也就是说,程序语言中的变量(最基本的形式)代表的应该是数据库中关系中元组中的一个属性的一个值,从数学意义上,这是个三阶无穷小的问题……

所以,为了能够整合两种语言(我差点儿忘了这是两种语言),必须提供一种转换机制(或者说标准)使得程序语言可以处理查询的返回结果。
毕竟程序语言是大头,也就是说,很需要提供一种能够让我们的程序理解数据库的手段,这种手段教材上介绍了jdbc和odbc两种,也是接下来学习的内容。

话说这是10.29动笔的,10.30才敲完,复习效率略低,果然我是在用码字的方式对待学习吗……
还有话说今天汤神爆发,14记三分球一发入魂。
库里:在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41250066/article/details/83547150
今日推荐