Oracle学习笔记

2004.8.5  星期四  晴

今天,开始和Oracle数据库的亲密接触。

Oracle公司是世界上第二天软件公司,除Oracle数据库外,开发有数据库操作工具、ERP等产品。作为数据库的No.1,仰慕已久。市面上有关使用考证人们趋之若骛,DBA职位也以其高薪轻闲为人眼热。而教我们Oracle的赵老师是一位资深的Oracle方面专家。初学便得遇良师,可谓幸运!

Oracle数据库历经多个版本,97年的8,99年的8i,2001年的9i(9.2.0),我们学习和使用的是9i。也就是从这个,Oracle才开始全面支持所有的SQL语句。SQL是一个非过程化语言,其优化只能从语句上操纵。

Oracle讲五天,学习用Java编辑过程中涉及到Oracle的部分。赵老师介绍我们学习的内容是DBA的十分之一。发了二天教材:一本练习,一本课件。课件是标准的Oracle公司培训用课件,全部是英文。课件只是一个骨架,单纯看很难形成一个完整的东西,但经赵老师讲解,课件上的内容立即充满了血肉,鲜活起来。甚至在想,这些课件以及课堂笔记、释以后都是珍贵的工作资料吧!

今天讲了两个章节,介绍了Oracle的背景,SQL Plus中一些操作语句以及第一个SQL语句的Select的一部分。DBA教材有二本书,其中一本的内容都是有关Select。十四个SQL语句之一的Select花费如此篇幅,可见其重要。

课上到三点半便做练习,当天的内容当天消化。

2004.8.6  星期五  晴

今天的进度比昨天快,讲到第七章,已过整本课件的一半。赵老师笑言:明天周末,可乘这二天练习。这二个月全力学习,找到好工作再好好玩亦不迟。我们学费是12000,840学时,上午9点半上到12点,下午一点半到五点半,一天差不多七个小时。用刚学的语句:select  12000/(840/7) from dual,乖乖,每天一百大洋呀,赵老师所言极是。怎么着也不要和自己的Money为难 :)

这几章的内容一是Single Row Functions ,改变字段类型、显示格式以及进行一些数值计算(加、减、乘、除、求余,取整)。在显示格式中有关日期是一个难题,用英文全拼星期、月,一个星期后的第一个星期一是多少号以及一个月的第几天等。

第四章从多个表中显示数据很有意思。Equijoin、Non-Equijion、Outor Join以及Self Join。赵老师说Outer Join 是一个在面试中经常问及的问题。这几种Join在语句上差别都不大:Equijoin适用两个表中主外键情况;Non-Equijion没有主外键对应,但内容有其它对应关系(join condition contains an operator other than equal)。如Join的两个表中有一个表中对应字段没有内容也想显示出来,则是Outer Join情况,哪边少,哪边Where时在字段后放“(+)”,而self Join只是Join的两个表是同一个表而已(逻辑上看做两个表)。

有Single便有Group:AVG、MAX、Count、Sum、Min。在select时使用这五个function便可进行Group operator。如select后跟单个Column name ,该Column name 一定要出现在group by语句中,反之并不一定。Where后不能跟group function,如要用组函数筛选,可采用having。

至于第六章的sub Query、第七章的语句中变量则较简单,在练习中都不存在这两章。

在课堂上,赵老师为活跃气氛,故意问些问题让我们说出答案,并提议打赌。输了请吃饭。呵呵,免费的晚餐,我喜欢!

2004-8-8  星期天   晴

明媚的阳光下,近处的苏州河如一条深色的绸缎,蜿蜒于河畔的建筑群中,又恰似贵妇胸前那一抹质的华丽的围巾,将黄浦装点得风情万种。间或一二艘船低鸣着驶过,围巾便波光鳞鳞。河上的提篮桥行人如织:步履匆匆的人群、滚滚向前的车轮,夏日苏州河上图因此而生动起来。远处有一幢十多层的住宅建筑、四楼顶有一大块面积置了些楼顶园林景观:树荫下有人戴着墨镜闲适地翻着杂志、旁边的桌上放着刚喝了一半的饮料。游泳池里浮着几只花花绿绿的泳圈。有孩子在里面快乐的嬉戏。这幢建筑的四周被一些矮的建筑簇拥着,再远处也是类似的景致。站在科技京城的顶楼,远处高楼顶的广告字样清晰可辨。

看书累了的时候,喜欢极目远眺。捧着一杯水,看着远方。风微微地吹着,思绪随风在建筑群中游荡。想着什么,或者,什么也不想。阳光温和地照射在身上,在空调房里久了,夏日的阳光也变得温暖。

温暖的阳光下,一只飞机在天际游移。地面上苏州河在缓缓地流动。飞机有既定的航向,河水奔流入大海。自己呢?从江西至深圳及至上海,心始终飘浮如天上的风筝。一路行走,一路寻找。拽着自已的那根线究竟在哪?想要抓住什么,许多年过去,双手依旧空空。

阳光逐渐热辣起来,还是回教室去吧,继续看书。

“经过二天的休息,大家气色都不错”(赵老师语),气色不错的大家今天的学习任务却不重。在讲完第八、九章后,下午三点半便练习。当摞完作业后,看着大家摩拳擦掌的模样,相信很多同学心里都在说:Come on,Come on,Oracle!

第八章讲数据模型预览以及数据库设计,全部是概念性的东西。Entity对应Table、Attribute对应Column。Relationship Types有:一对一(此时两张表完全可合成一张表,用得非常少);多对一(用得最多);多对多(开发时一定要找出中间载体转化为多对一关系)。Oracle数据库遵从三个范式:第一范式属性(表元)必须单值;第二范式:其它字段与主键有依赖关系;第三范式:其它字段间没有依赖关系。另外,第八章很大内容是讲如何由Entity转为Table的步骤。

上堂课讲了Select语句的详细用法,Select的内容来自的Table是如何创建的呢?第九章进行了介绍:Table name、Column name、Column Type,更为重要的是Constraint。一共有Primary key、Foreign Key(外键)、Unique(唯一值)、Not null(非空)、Check(主键)五种约束。Constraint直接跟在Column name后为Column level的Constraint,如在所有字段后并以逗号分隔则为Table level。两种level设置有些细节上的出入,二个字段以上的约束必须在table level上才能设置。

有空翻了翻《程序员》杂志,找到两本好书或许有用:《Oracle 9i初学者指南》(非常适合初学者入门)、《Oracle专家高级编程》(一本关于Oracle成功开发应用程序的经典之作,建议看英文原版)。


2004-8-10      星期二     晴

今天和昨天的学习进度,如以走路作比,昨天是闲庭信步,而今天便是三步并作两步。先让我们从章节的数量上来个直观认识吧:第11章、第12章、第14章、第15章。其中第13章和第16章不太重要,发的教程没有,赵老师共享了电子版本。

第11章:介绍如何操作数据,操作命令有以下三个:

INSERT: INSERT into table [(column[,column...])]
 values (value[,value...]);
UPDATE: UPDATE table
 SET column = value [,column = value]
 [where condition];
DELETE: DELETE [From] table
 [where condition];

只有以上三个命令存在提交(commit)和回滚(Rollback)。如不提交,以上操作只改变当前session的显示内容。回滚可以设置回滚断点(savepoint Marker),通过Rollback to Marker返回。

第12章讲修改表和约束,命令用得不熟,好好总结一下。首先是能修改什么对象:

1. 对于Alter table允许修改:
   1) 增加和修改行(增加数值类型宽度、精度;null或无记录才能减少列宽度;没有空值的字段才允许通过修改行增加非空约束);
   2) 增加或移除约束(约束能修改吗?不能);
   3) 使约束有效或失效。
2. 删除一个表的结构和数据;
3. 其它Rename、TRUNCATE(删除表行记录同时释放占用空间)以及COMMENT(对象为Table)自以为不太重要。

明白了内容框架,接下来看看具体语法:

1. Alter TABLE table
   ADD (column datatype [DEFAULT expr][NOT NULL]
       [,column datatype]...);
2. Alter TABLE table
   MODIFY (column datatype [DEFAULT expr][NOT NULL]
          [,column datatype]...);
3. Alter TABLE table
   ADD [CONSTRAINT constraint] type (column);
4. Alter TABLE table
   DROP [CONSTRAINT constraint];
5. Alter TABLE table
   DISABLE(ENABLE) [CONSTRAINT constraint];

试试将这些语句同前面的内容联系起来,:)

然后我们创建视图。什么是视图?赵老师问。镜像?软连接?原来就是一条Select语句。而创建View的语句与创建Table内容框架来自于subquery类同。但修改View就不同了,采用Create OR REPLACE。显示视图数据操作与Table同。

第15章介绍索引,字段约束为主键和唯一值时系统为该字段自动建立索引,亦可自行创建索引。

相形于前几天日记的篇幅,大家应该能够感受到今天学习内容的丰富吧!今天的内容得好好消化。另外,在实际工作中具体如何操作Oracle呢?

2004-8-11      星期二     晴

“计算机是怎么学出来的?”,赵老师发问。

“计算机是练出来的!”,众同学异口同声。

怎么瞅着像广告?呵呵,一天的Oracle小项目之后,这,却是我们的真实感受。

项目是一个有关录像租像系统数据库的建设。建立表、约束、增加字段、创建序列、录入数据、从数据字典里查询建立好的对象以及检索插入的数据。最后通过一个脚本出具一张报表。这个看似简单的项目却将前面四天学习的Oracle知识有机地联系起来。

一共有五张报表:Title记录录像基本资料;Title_copy记录租借状态;Rental记录租借时间;Reservation记录预订情况;member 表记录顾客资料。由ERD图生成的Table Instance Charts已经给出,我们只须对着直接建表。

收获来自于挫折。项目的八道题目一环紧扣一环。Rental表的copy_id、title_id为联合外键与Title_copy表的对应字段成主外键关系。初始单独设Rental表的copy_id字段外键约束,咦,怎么提示主键为非唯一键。OK,将Title_copy表的copy_id字段加上Unique Constraint。表建好了,然后插入数据。一个表、二个表...插入不了数据?怎么又是表Title_copy?天,范例数据copy_id竟有重复值。删除Unique constraint,以后Rental表无法建立。不删,数据又录入不了。前后进退不得,这......,联合外键率先发难。

另外一个细节来自于为Title表的price字段增加非空约束。用Alter TABLE table ADD [CONSTRAINT constraint]死活不让。在第12章仔细Search,原来NOT NULL约束在修改字段时完成。天,这不正是赵老师在课堂上强调的。

匆匆完成项目后才有心情对项目题目更仔细推敲。像租借状态为什么不直接写入Title表而用Title_copy表保存是因为同一个录像带存在多个拷贝。Title_copy表中采用title_id和copy_id联合主键才能是唯一值。录像租借数据库如此,图书租借不也一样吗?

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值