




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一验证Oraacle已已经安装完完成了,首首先得确认认程序里有有这些个选选项,有四四个选项:Oraccle IInstaallattion Prodductss、集成管管理工具、配置和移植植工具(管管理员用得得比较多)、应用程序开发。Oracle也可以形成一种层次性的链接(Directory Manager),对于我们来说用得最多是sqlplus,而OLE 是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM),他是微软提出的,在用VB开发时可能要用,对于我们来说不须管。当启动ssqlpllus时会会提示输入入用户名和和口令,所所谓的sqqlpluus是Orraclee的一个客
2、客户端。OOraclle大多数数命令都用用命令来实实现,所以以比较难使使,就如同同unixx比winndowss难使。口口令你输入入tigeer,建议议就用它,因因为以后去去企业里OOraclle 9ii就是用的的这个口令令。当你看看到SQLL命令符符时说明已已经进入到到了Oraacle的的命令行了了。图形版的的sqlpplus,命命令行的ssqlpllus,还还有一个就就是通过网网页访问OOraclle的服务务,启动ssqlpllus,端端口号是55560,UURL是 HYPERLINK hhttp:/1:55600/isqqlpluus。issqlpllus httpp:
3、/1127.00.0.11:55660/issqlpllus。iisqlpplus非非常有用,比如说你的机器上没有装上Oracle,就可以通过键入别人的IP,然后登陆到他的机器上来做实验,当然也可以安装特定的客户端软件实现。说实在的的Oraccle的这这个客户端端太难看了了,并且要要记好多好好多的命令令,所以专专门有一类类公司专门门为Oraacle开开发客户端端。有一个个比较著名名的客户端端叫Toadd,当然OOraclle还有一一个客户端端PL/SSQL DDevellplorr,这个用用的也非常常多。数据据库管理时时常用Tooad(英英文蛤蟆的的意思),如果有声卡的话,你启动一次它就叫一次
4、。对我们来说sqlplus足够使了。以后有机会我使用一下PL/SQL Develplor,不过这个也不好使,因为你同时必须装上Oracle,还不如isqlplus好呢。以超级管管理员身份份链接数据据库的方法法是再命令令行下敲入入命令:ssqlpllus ssys/口口令 ass syssdba。Sys和ssysteem的区别别是syss是数据库库管理者,ssysteem是数据据库所有者者,sys用户户拥有dbba,sysddba,sysooper等等角色或权权限,是ooraclle权限最最高的用户户,sysstem用用户拥有ddba,sysddba等角角色或系统统权限,ssysteem如果正正
5、常登录,它它其实就是是一个普通通的dbaa用户,但但是如果以以as ssysdbba登录,其其结果实际际上它是作作为syss用户登录录的,这一一点类似LLinuxx里面的suudo的感感觉,从登登录信息里里面我们可可以看出来来。syss用户必须须以as sysddba或as ssysopper形式式登录。然后输入入命令allter userr scoott aaccouunt uunlocck;它的的意思是将将Scottt用户解解锁,以后后关于dbba的用到到一个学一一个,没必必要从头到到尾的去学学它。二SQL语语言是在数数据库下进进行操作的的语言,它它本身是一一个标准语语言,有国国际标准。有
6、两套一一个是SQQL19992,SQQL19999。大多多数数据库库既支持旧旧的标准也也支持新的的,很多也也是用的旧旧的SQLL语言写程程序的,对对于我们来来说新旧都都要学,而而且对大多多数数据库库系统来说说都是通用用的,只不不过不同数数据库有一一个轻微的的改变,这这就是最郁郁闷的地方方,没办法法到时候查查手册或ggooglle一下。SQL全全称为Sttructturedd Queery LLanguuage,即机构化化查询语言言,它被定义义为第四代代语言。为为什么叫第第四代语言言,因为我我们知道第第三代语言言也得有iif ellse ffor 等等这些流程程控制语句句,也就是是你得告诉诉它干
7、什么么且怎么干干。第四大大只用告诉诉它我要干干什么,不不用去控制制它怎么干干,这样的的语言学起起来当然十十分eassy。我们共有有四类语句句要学:数数据操作语语言语句Dataa mannipullatioon laanguaage,DDML,会话控制制语句 HYPERLINK /searchwhatis/18/5949018.shtml sesssion conttrol stattemennt,数据定义义语言语句句Datta deefiniitionn lannguagge,DDDL以及及事务控制制语句 HYPERLINK /searchwhatis/297/6092797.shtml tr
8、annsacttion conttrol stattemennt。查询语句句只有一句句话就是sselecct语句,这是最重要的一条语句。以后只要遇到相应的select语句一律背过,企业再面试时其他语句一般不会怎么考但这条语句是必考的。如果考你SQL语句肯定会考这条select语句不是别的。你跟别人交流的时候,别说我写过几条dml语句,而因详细的说到底是什么语句,比如insert语句、update语句等。选择的意思是从表里把数据拿出来,展现出来。听起来似乎挺简单的,但你要从表里拿数据得首先知道有几张表,每张表里有些什么内容。第一步要要做的就是是熟悉一下下实验用的的数据,这这些数据OOraclle
9、都给自自带了,直直接用就行行了。首先先第一条语语句dessc emmp,描述述一下emmp这张表表,会分别别列出所有有字段(表表头),eempnoo 雇员编编号,enname 雇员名字字,jobb 雇员工工种,mggr 经理理人,hiiredaate 雇雇员入职日日期,saal 薪水水,commm 津贴贴,奖金,ddeptnno 所属属部门编号号。表还有一一部分叫类类型,也就就是相对应应字段的类类型,这些些都是Orraclee已经定义义好的,我我们直接用用。现在先先用别人建建立好的表表,然后再再自己建表表。NUMBEER指数字字,VARRCHARR指字符型型,Oraacle77以前在用用,现在
10、常常用的是VVARCHHAR2它它支持各种种可变字符串,可以更好好的表示各各国文字,DDATE指指日期,NNUMBEER(7,2)指七七位数字有有两位小数数。descc deppt 部门门表,它有有三个字段段DEPTTNO 部部门编号,DDNAMEE 部门名名称,LOOC部门所所在位置。Desc salggradee工资等级级表,许多多公司都实实行的是工工资等级制制,分几级级工资,GGRADEE工资等级级,HISSAL该等等级最高工工资,LOOSAL该该等级最低低工资。以上简要要的介绍了了三张表,如如果想更详详细的了解解里面的数数据,教大大家第一个个seleect语句句:secleect *
11、fromm 表名;。*表示把把表里所有有的数据都都取出来,分分号表示语语句结束。尽量多熟熟悉各张表表之间的关关系,以及及表内部各各字段之间间的关系,越越熟悉越好好。如果要算算纯数据,可可以采用ddual这这张表,它它就一条记记录,一个个字段。你你如果用其其他表计算算的话会有有好多条重重复结果,记记录。字段是不不能有空格格的,如果果非要空格格可以将整整个字段用用双引号括括起来,这这样的话引引号里面就就可以加上上各种各样样的字符了了。如果没没加引号的的话那样做做是不对的的。再没有有加双引号号的时候结结果字段名名会以大写写字母显示示出来,但但加了双引引号就保持持住了原来来的形式不不变。没有有就是nu
12、ull值,即即便是0也也与空值大大不一样。0是有值值但为0,nnull是是没有值。任何含有有空值的表表达式最后后的结果都都是空值。SQL里里面有一个个字符串链链接符|,它的作作用跟Jaava里的的+一样,所所有被链接接的都会转转换为字符符串显示出出来。如seleect eenamee|saal frrom eemp;它它的意思是是将结果ssal转换换为字符串串后链接到到enamme后面。在任何数数据库的SSQL语句句里面都是是用单引号号括起来表表示一个字字符串序列列。如果字字符串里本本来就有单单引号,再再解析时就就会出错。可以用两两个单引号号来代替一一个单引号号,这样就就可以正确确显示了。关键
13、字ddistiinct是是指选择不不重复的记记录,如果果修饰多个个字段时表表示选择该该多个字段段的组合不不重复的显显示出来。wherre叫过滤滤条件,它它会过滤掉掉一些记录录,等值判判断用=,不不等值判断断注意是而不是是Javaa语句里的的不等号。字符串比比较是比较较字符的AASCIII码,挨个个比较。做做比较时还还可以用关关键字beetweeen annd,注意意的是包括括边界值的的。andd也可把两两个过滤条条件连接起起来。下面来讲讲空值的处处理,你可可以直接用用wherre +字字段+iss nulll来取出出是空值的的,取出不不是空值的的多加一个个not就就行。这种种处理方式式非常像我
14、我们的说话话习惯。iin然后跟跟着某个字字段的取值值是括号括括起来各值值之间用逗逗号隔开。可以使用用and、or,nnot连接接起各个查查询条件。日期处理理起来稍微微麻烦一些些,由于现现在还没有有学日期函函数,所以以采用另外外一种方式式一个特殊殊的字符串串。你就按按它的日期期写法来写写如20-22月-077,然后系系统就按照照字符串来来比较即可可。年份可可以写全如如20-22月-20007,它能认认出来。以以后我们可可以写成任任何形式的的日期格式式都能处理理。模糊查询询是这样的的,比如找找出名字里里含有all的,有点点像正则表表达式。使使用关键字字likee,可以通配符符%,代表表0个或多多个
15、字符,_代表一个字母。如果名字里就含有一个%,则使用转义字符%的形式,当然可以自己指定转义字符方法是select * from emp where ename like _A$% escape $;。排序用到到的一个关关键字是oorderr by,默默认的是按按升序排列列,如果想想降序排列列可以采用用如下形式式:sellect * frrom ddept ordeer byy depptno descc;dessc是降序序的英文缩缩写。升序序排列可不不写也可加加上ascc。还可以以加入whhere先先过滤了再再排序,按按照几个字字段进行排排序时,用用逗号分隔隔开,如下下:sellect ena
16、mme ,jjob,eempnoo,sall ,deeptnoo froom emmp orrder by ddeptnno,saal deesc;意意思是先将将表按照ddeptnno升序排排列,然后后相同的ddeptnno内部再再按照saal降序排排列。三SQL函函数,函数数就是Jaava里的的方法,有有参数有返返回值。现现在讲的是是单行函数数,第一个个叫做loower,作作用是转换换为小写;第二个叫叫uppeer,作用用是转为大大写;第三三个叫suubstrring,取取子串。这这几个函数数都是对字字符串进行行操作的,传传递进去的的参数就是是字段名。如seleect llowerr(ena
17、ame) fromm empp;还有一一个函数叫叫chr,它它是把一个个数字转为为字符:sselecct chhr(866) frrom ddual;将86代代表的字符符显示出来来,与之对对应的是将将一个字符符转为对应应的ASCCII码,叫叫asciii,如:seleect aascii(A) frrom ddual;就是将AA的码值显显示出来。rounnd函数是是四舍五入入的作用,如如seleect rroundd(43.5354435) fromm duaal;结果果就为444。还有一一个重载的的带两个参参数的方法法如sellect rounnd(433.5355435,4) ffrom
18、duall;四舍五五入到小数数点后4位位,结果位位44.55354,第第二个参数数可以是负负数表示四四舍五入到到小数点前前多少位。其他函数数可以不用用记住,但但要知道有有这么个函函数,然后后取手册中中可以查到到,但下面面讲的一个个函数最好好记住它。to_cchar是是将字段内内容显示为为字符,可可以对显示示的形式进进行格式控控制,比如如seleect tto_chhar(ssal, $999,9999,9999.99999) fromm empp;就是以以后面给定定字符形式式显示出来来,小数点点后的四位位会强制显显示,而前前面的没有有的位数就就不显示,这这就是9的的含义。$换为L表表示本地货货
19、币。0代代表一位数数字,如果果没有该位位数字也会会强制显示示为0,对对于这种方方式是为了了进行格式式控制。实际上用用to_cchar来来控制数字字是比较少少用的,而而用得最多多的是对日日期格式的的控制,我我们知道OOraclle里的ssysdaate包含含了插入记记录的详细细时间信息息,我们可可以对其进进行显示的的格式进行行控制,比比如:seelectt to_charr(hirredatte,yyyyy-mm-ddd) fromm empp;转换为为年月日22006-3-233这种格式式的。实际际上对日期期的格式控控制是利用用Javaa来实现的的,到时会会有一个关关于日期处处理的专题题。se
20、leect eenamee,jobb,hirredatte frrom eemp wwheree hirredatte tto_daate(19822-1-11 1:330:000, yyyyy-mm-dd hhh:mii:ss);意思思是将特定定的字符串串转换为相相应的日期期格式。还有too_nummber是是将特定的的字符串解析析为相应的的数字格式式如seleect eenamee ,joob ,ssal ffrom emp wherre saal20000;首先按按depttno求出出每个deeptnoo的平均ssal,然然后对这些些分组利用用haviing 语语句进行过过滤。到现在为为
21、止已经学学完了所有有的单条sselecct语句,执执行顺序按按照sellect+字段或内容容+froom+表名名+wheere+grooup bby+havving+ordder bby这个顺序序进行执行行,首先取取出记录,然然后对单个个记录进行行过滤,过过滤完了分分组,分组组好了对组组过滤,剩剩下的分组组再按顺序序显示出来来。单条sselecct语句一一定要非常常熟悉,如如果这都要要查书的话话对企业就就没法交代代了,哈哈哈!之前已经经讲过一个个子查询的的例子:sselecct enname,sal fromm empp wheere ssal=(seleect mmax(ssal) from
22、m empp);看谁谁的工资最最高,之所所以叫子查查询因为再再一个seelectt语句里套套了另外一一个sellect语语句。理解解子查询的的关键是把把它当成一一张表,可可以对它做做表连接最最后就可以以求出想要要的结果来来。单独的的seleect语句句相当简单单,但是有有了sellect子子句和表连连接之后语语句就稍微微复杂了点点。sellect enamme ,ssal ffrom emp joinn(sellect max(sal) maxx_sall,depptno fromm empp grooup bby deeptnoo) t on (emp.sal=t.maax_saal ann
23、d t.depttno=eemp.ddeptnno);这这个语句的的作用是求求出每个部部门薪水最最高的员工工记录。seleect ee1.enname,e2.eenamee froom emmp e11,empp e2 wherre e11.mgrr=e2.empnno;对于于在同一张张表中进行行查询时需需要进行自自连接,为为表取别名名便于写出出条件和比比较。这条条语句的意意思是找出出每个员工工的经理人人。为同一一张表起不不同的别名名然后当成成两张表来来用。在SQLL99里面面链接条件件和过滤条条件是分开开的,即链链接条件不不能出现在在wherre语句里里面,利用用Joinn+表名+on+链链
24、接条件进进行。比如如:sellect enamme ,jjob,ddnamee froom emmp jooin ddept on (emp.depttno=ddept.depttno);等值链接接的时候有有一个简便便的写法uusingg(depptno)代替onn (emmp.deeptnoo=deppt.deeptnoo)但不推推荐使用,因因它的限制制条件很多多,可能报报出来的错错误很难找找并且看起起来也不是是很清楚。连接有各各种各样的的形式,下下面我们讲讲外连接,其其实用起来来特别方便便。它会把左左边那张表表不能和右右边链接的的数据也拿拿出来。sselecct t11.enaame ,
25、t2.enamme mggr , t1.ddeptnno frrom eemp tt1 left outeer jooin eemp tt2 onn (t11.mgrr=t2.empnno);oouterr可以省略略掉效果一一样。如果果想把右边边多余的拿拿出来Jooin前加加上rigght即可可;如果两两边多余的的都想拿出出来Joiin前加上上fulll叫全外连连接。讲一道面面试题,不不准用组函函数求出薪薪水的最高高值。方法法是用自连连接,连接接条件采用用非等值连连接,这这样表中的的最大值就就会连接不不上,然后后再从emmp表中找找出未连接接上的最大大值,如下下:sellect sal fro
26、mm empp wherre saal noot inn (seelectt t1.sal fromm empp t1 joinn empp t2 on (t1.ssal(seelectt maxx(sall) frrom eemp wwheree emppno nnot iin (sselecct diistinnct mmgr ffrom emp wherre mggr iss nott nulll) and empnno inn (seelectt disstincct mggr frrom eemp wwheree mgrr is not nulll );再讲一道道面试题:比较这两两个
27、语句的的执行效率率Selecct * fromm empp wheere ddeptnno=100 andd enaame llike %A%;Selecct * fromm empp wheere eenamee likke %A% and depttno=110;理论上说应应该是第一一个,就如如同&和和&的区别别一样它会会过滤掉很很多条件,后后面的字符符串就不用用再取去比比较了,但但实际中不不好说因为为有可能OOraclle在执行行的时候做做了优化,自自动将数字字比较放前前面了。四现在已经经讲完了sselecct语句,接接下来讲ddml语句句,常见的的有三条,他他们和seelectt语句合
28、称称为数据库库的四大语语句(seelectt/inssert/updaate/ddelette)。增删改查查!接下来简简单介绍一一下Oraacle的的逻辑结构构。安装的的时候创建建了一个全全局数据库库,同时为为这个数据据库建立了了一系列管管理它的进进程SIDD。一个大数数据库里面面又区分为为不同的表表空间,说说白了就是是装表的地地儿。我们们现在的表表是放在不不同的表空空间里面,比比方说ussers表表空间,在在里面放着着某个用户户所有的表表,当该用用户登录进进去后其实实是去访问问自己的表表空间里的的相对应的的表。可以以将某个表表空间里的的内容全部部copyy出去创建建一个新的的userr,然后
29、该该userr就操作专专属于自己己的表空间间里的表了了,所以说说Oraccle是支支持多用户户的。将某个表表空间里的的内容全部部copyy出去创建建一个新的的userr做法是这这样的:11.以超级级管理员登登录数据库库connn syss/oraacle as ssysdbba; 2.从命令令行在起一一个cliient,先先建立一个个目录如CC:teest进入入该目录后后执行deel *.*删除所所有,然后后键入命令令exp后后提示输入入用户名和和口令,就就是你要备备份哪个就就输哪个,接接下来提示示输入数组组提取缓冲冲区大小,这这个没关系系(内存里里的一个小小区域填满满了再统一一拿到硬盘盘上来
30、)一一路回车就就行,等着着它导完就就可以了;3.创建新新用户crreatee useer huuangggang idenntifiied bby haaha08832 ddefauult ttableespacce ussers quotta 100M onn useers;用用户名huuangggang口口令hahha08332在ussers表表空间里分分配10MM的默认表表空间给该该用户;4.给予相相应权限ggrantt creeate sesssion,creaate ttablee,creeate vieww to huanngganng,如果果没有seessioon它登录录都是问题
31、题;5.导入入文件immp后回车车几个后提提示是否导导入整个导导出文件选选否后输入入想导入的的那个用户户数据的用用户名。只有2和和5是在命命令行中完完成,其余余是超级用用户登录后后在数据库里里完成。inseert iinto+表名+vvaluees(各字字段值),在在对这些数数据进行操操作时最好好有一个备备份,方法法很简单rrollbback回回退操作,create table 表名 as select * from +欲备份表名;insert语句还有一种插入方法,insert into dept2(deptno,loc) values(50,beijing);只是插入部分字段的值,其他字段的
32、值为null,还有一种方法是insert into dept2 select * from dept;将select子句选出的记录挨个插入前提是选出的记录与该表的记录格式相同。在Oraacle中中取完相应应字段后,会会在末尾附附加一个伪伪字段,你你看不到,叫叫做rowwnum,它它是记录下下每条记录录在第几行行了,用它它的时候有有个限制条条件只能与与或=6 annd r=10;这个在Orraclee里面是效效率最高的的,如果通通过连接数数据库用JJava编编程来做,但但效率相当当低。这个个重点掌握握,比如说说显示论坛坛里的帖子子是分页显显示的,如如果想显示示第4页的的内容一定定是从某一一个帖子
33、到到某一个帖帖子显示出出来,帖子子这个记录录是按照发发帖时间倒倒序排列的的。三层嵌嵌套就是OOraclle对这种种问题的解解决方案,当当然每一种种数据库有有自己的解解决方式。SQL面面试题:有3个表表S,C,SC。SS(SNOO,SNAAME)代代表(学号号,姓名);C(CNNO,CNNAME,CTEAACHERR)代表(课课号,课名名,教师);SC(SSNO,CCNO,SSCGRAADE)代代表(学号号,课程成成绩)。问题:找出没选过过“黎明”老师课程程的所有学学生姓名;列出2门以以上(含22门)不及及格学生姓姓名及平均均成绩;既学过1号号课程又学学过2号课课程所有学学生姓名。请用标准SSQ
34、L语言言写出答案案,方言也也行(请说说明使用什什么方言)。selecct snname fromm s jjoin sc oon (ss.snoo=sc.sno) joiin c on (no=scc.no) wheere cc.cteeacheer limiing; (2) sselecct snname fromm s wwheree snoo in (sellect sno fromm sc wherre sccgradde =2); (3) sselecct snname fromm s wwheree snoo in (sellect sno fromm sc wherre cnno
35、=1 and sno = (sselecct snno frrom ssc whhere cno=2);updatte 的作作用相对于于对记录进进行修改。用法是uupdatte+表名名+sett+字段列列表及更新新值过滤条件;ddelette+frrom+表表名+过滤滤条件,删删除某些字字段。五接下来讲讲数据定义义语言dddl语言。它实现了了数据表,视视图等的建建立。事务务trannsacttion就就是一系列列的操作,要要么同时完完成要么不不完成,比比如转账操操作要对两两个账户uupdatte,不会会出现数据据不一致。对于Orraclee来说,一一个traanscaationn起始于一一条d
36、mll语句,然然后一系列列的操作rrollbback回回退事务会结束束;或coommitt结束事务务,再roollbaack也没没用;当遇遇到一条ddcl语句句或ddll语句提交交结束事务务;当正常常退出exxit时提提交结束事事务,不正正常退出时时(如断电电)自动回回滚结束事事务。数据库常常用对象是是指它经常常使用的一一些资源,比方说表、视图或其他资源。下面讲如何创建一张表,create table +表名+字段及字段的数据类型。Oracle常用的数据类型有变长字符串varchar2(最长字符数即上界4k)、定长字符串char(所占大小)。有了变长字符串后为什么还要有定长字符串呢?主要还是效
37、率问题,跟数组很像,但是站空间,很多结构、算法都存在拿空间换时间问题,如HashTable。数字型number(m,n)m指总共多少为,n是小数点后的位数;日期date,包含年月日时分秒;变长字符串long可达2G,主要是有些时候一篇文本相当长;存图片可以把硬盘上图像的名字存到数据库里,也可以把整张图片存到数据库里。创建一张张表存放学学生数据如如:creatte taable stu ( id nnumbeer(8), namee varrcharr(20), sex numbber(110), age numbber(33), sdatte daate, gradde nuumberr(2)
38、 defaault 1, classs nuumberr(2), emaiil vaarchaar2(550) );sex取数数字来表示示更节省空空间,入学学时日期加加个s避免免和关键字字冲突,可可以为某些些字段指定定默认值当当插入记录录时没有对对该字段赋赋新值就以以该默认值值,其他没没有默认值值为nulll。五个约束束条件第一一个叫非空空,第二个个叫唯一,第第三个叫主主键,第四四个叫外键键第五个叫叫checck。当我我们创建这这张表的时时候,有一一个最简单单的条件字字段非空nnot nnull。在Oraacle里里面约束条条件也可以以看成一个个对象,能能为之取一一个名字,加一个关键字cons
39、traint+约束名,如name varchar(2) constraint stu_name_nn not null,不起时系统自动起名字我们不用管了。唯一约束的意思是在这个字段里面所有的记录不能重复,如id number(8) unique,这属于字段级的约束;字段级的约束有些限制,比如要某些字段组合不能重复,还有就是两个空值它不认为是重复的。要达到表级约束方法是在最后一个字段写完后加一句如:constraint stu_name_email_uniuniquue(emmail,namee)。主键(pprimaary kkey)是是可以唯一一标示整条条记录的东东西,它代代表的意思思是既不能
40、能为空又不不能重复,比如学生学号。E-mail做主键不好因为它可以为null,同时索引的时候数字比字符串效率高。如id number(8) primary key ,也可以加在表级,如constraint stu_id_pk primary key(id),主键也可以是多个字段组合。外键约束束建立在一一张表的两两个字段上上或者是两两张表的两两个字段上上,是比较较麻烦的一一种约束。在empp和deppt就有外外键约束,往emp里加记录的时候不允许再dept里没有的部门编号。class number(2) references class(id),参考class这张表的id字段,当然也可以加在表级
41、上:constraint foreign key (class) references class(id),。注意在写外键约束的时候,stu里的class叫参考字段,class里的id叫被参考字段,加外键的前提是被参考字段必须是主键。删一条记录的时候首先看有没有其他字段参考它,有的话是无法删除的,违反了完整约束条件。Checck约束用用得比较少少,在写mmis系统统时数据在在Javaa程序里就就已经校验验过了。修修改表结构构是在现有有表上修改改。在任何何项目开发发时候建表表的SQLL语句是要要保存下来来的,所以以可以将表表整个删掉掉再建。添添加字段aalterr tabble +表名+aadd
42、(字字段名+数数据类型)如altter ttablee deppt2 aadd(ddphonne vaarchaar2(111);删除某个个字段如aalterr tabble ddept22 droop(dpphonee);还可可以修改字字段的数据据类型,如如果里面已已经有数据据修改的后后果应不影影响原来存存的记录值值。在Oraacle里里面看当前前用户下有有哪些表,哪哪些约束,哪哪些视图等等等这些信信息被单独独地装在一一张表里面面,称作数数据字典表表。useer_taabless里面装的的是当前用用户共有多多少张表,里面字段可多了,我们关心的是table_name。查询当前用户下有哪些视图:
43、select view_name from user_views;查询当前用户下有哪些表:select table_name from user_tables;查询当前用户下有哪些约束:select constraint_name,table_name from user_constraints;。user_tables、user_constraints、user_views这些都是数据字典表,那么一共有多少个数据字典表呢?Oracle专门有另外一张表存放数据字典表的表叫做dictionary,它总共两个字段一个叫table_name数据字典表的名字、还有一个叫comments对于这张数据字典
44、表的描述。总共有600多个数据字典表,这就是Oracle的DBA总是背着个小本本的原因,你要背是不可能的。索引就相相当于字典典里的索引引一样,它它在Oraacle里里相当于一一种新的数数据库对象象,建立索索引的方法法creaate iindexx idxx_stuu_emiil onn stuu (emmail);也可以以在字段组组合上建立立索引,以以后在查询询组合时效效率就高,删删除索引同同删除表方方法类似。忘了自己己有哪些索索引可以采采用sellect indeex_naame ffrom userr_inddexsee;当你给给某张表的的字段加主主键或唯一一性约束的的时候。建建立索引的的
45、用处是当当你建立了了索引后取取访问相应应数据的时时候效率会会很高。注注意说的是是读的效率高高了,但存存的效率反反而低了,因因为你得同同时往索引引表里加索索引值,会会占用大量量的空间。记住一点点不要轻易易建立索引引,除非觉觉得访问量量特别大时时。视图前面面也提过,它它是一张虚虚表,严格格来讲就是是一个子查查询。利用用它可以简简化我们的的查询复杂杂度,同时时它也有不不好的地方方,就是表表结构改了了它也得跟跟着改动,增增加了维护护的难度。视图有些些其他功能能,比如说说我有一个个数据库,它它里面存了了所有的产产品信息,而有一个供应商他想看我产品的信息,如果我把整张表都给他看那么关键信息他就全部都看走了
46、,我的销量有多少等等。我可以建立一个视图里面只包含我想要给他看的内容。序列是OOraclle数据库库独有的东东西,它产产生一个唯唯一、不间间断的序列列,作用是是一般做主主键。如下下我们要存存储BBSS里的帖子子建立一张张表:creatte taable artiicle (id nuumberr,titlee varrcharr2(10024),cont longg);如果要加入入一篇文章章,采用这这种做法sselecct maax(idd) frrom aarticcle;然然后知道了了id往里里插,但若若有另外一一个客户端端在做数据据插入同时时也在执行行完上面一一条语句插插入了一条条记录就
47、会会导致数据据不一致的的现象。为为此我们可可以创建一一个seqquencce,每次次插的时候候访问它的的一个属性性nexttval就就会得到不不重复的iid,实际际上它是在在内部做了了同步的。六范式就是是数据库设设计的一些些规则,而而它又是由由一个姓范的提出的的。讲到设设计其实是是很复杂的的事情,不不能指望用用几条规则则把所有的的都总结出出来(你在在造永动机机,追求银银弹sillver bulllet),所以有时时要具体问问题具体分分析,该打打破三范式式的时候还还是要敢于于打破。三范式追追求的是这这样的目标标:不存在在冗余数据据,换句话话说就是同同样的数据据不存第二二遍。当然除了了冗余性外外还
48、有一些些边缘性的的要求,不不是很重要要,讲到的的时候再说说。第一范式式的第一个个要求-要要有主键;第二个要要求-列不不可分,不不能说姓名名我还要分分成姓和名名。第二范式式当一张表表里有多个个字段作为为组合主键键的时候,非非主键的字字段不能够够依赖于部部分主键,多对多关系的表应分割成三张表,如前一个面试题。第三范式式是不能存存在传递依依赖,即除除了主键之之外的其他他字段必须须直接依赖赖于主键。比如emmp表里的的depttno依赖于于empnno,而lloc依赖赖于emppno所以以不能放一一张表里。七PL_SSQL是OOraclle里面的的一个编程程语言,比比较有用,在在Oraccle内部部写
49、一些存存储过程,触触发器,函函数。基本上每每一种数据据库都有这这么一个语语言,SQQL-Seerverr叫做T_SQL,如果每个个都学比较较累,但是是可以取学学一种然后后其他实在在要用时再再查上手要要快很多。可能以后后我们接触触的写存储储过程机会会很少,实实际上我们们用SQLL和Javva程序就就可以解决决大部分问问题了,这这只是让大大家有个了了解知道有有这么回事事。PL语言言用来补充充SQL语语言的,因因为后者不不带有分支支和循环,对对于有些问问题求解不不便,而过过程语言可可以解决。PL_SSQL写程程序非常固固定,分为为四块,第第一块叫ddeclaare,声声明各种变变量和游标标的地方,可
50、可选;第二二个叫beegin,就就是说程序序从这开始始执行了;exceeptioon是caatch到到任何异常常时要执行行的;ennd是结束束,后面得得有一个分分号。set sserveerouttput on;beginn dbmss_outtput.put_linee(hii,pl_sql!);end;/第一句是将将内部环境境变量打开开,默认的的是关掉的的,不然看看不到任何何输出结果果。dbmms_ouutputt相当于ssysteem.ouut而puut_liine相当当于priintlnn。declaare v_nname varcchar22(20);beginn v_nname :
51、= huanngganng; dbmms_ouutputt.putt_linne(v_nname);end;/变量名的写写法是v_+名字,声声明的时候候是变量名名在前,类类型在后;赋值语句句有点像ppascaal冒号等等号;declaare v_namee nummber := 00; begiin v_namee := 2/v_namee; dbbms_ooutpuut.puut_liine(vv_namme); exceeptioon whhen ootherrs thhen dbmss_outtput.put_linee(Errror!); end; /当检测到异异常时才执执行excce
52、ptiion,wwhen otheers tthen 这样做就就相当于一一张大网子子,肯定能能把异常捕捕获到。PL_SSQL变量量声明规则则:变量名名不能够使使用保留字字(Oraacle里里保留字很很多所以推推荐使用vv_+名字字,这样不不易冲突),如select、from等;第一个字符必须是字母;变量名最多包含30个字符;不要与数据库的表或者列同名;每一行只能声明一个变量。常用变量类型7种:binary_integer整数主要是计数而不是用来表示字段类型(用来for循环,数组下标,效率比较高,Oracle追求的目标);number数字类型;char定长字符串;date日期;long长字符串可
53、达2GB;boolean布尔可取true、false或null值,建议大家布尔类型在用的时候一定要给一个初值,否则是null。declaare v_tempp nummber(1); v_counnt biinaryy_inttegerr :=00; v_saal nuumberr(7,22) := 40000.000; v_daate ddate := ssysdaate; v_pii connstannt nuumberr := 3.144; v_vaalid boollean := ffalsee; v_naame vvarchhar2(20) not nulll :=myNaame;
54、begiin dbbms_ooutpuut.puut_liine(v_teemp vvaluee:|v_daate); end; /dbms_outpput.pput_lline不不能打印处处布尔类型型的值。CConsttant相相当于Jaava的ffinall ,noot nuull对变变量进行限限制。Oraccle里面面的变量经经常用来存存储某一张张表的某个个字段的值值,使用%typee属性为了了解决表里里字段的变变动与声明明变量类型型一致。在在PL_SSQL里面面可以使用用 两个短短横线注释释掉一行,注注释掉多行行的时候用用/* */。declaare v_empnno nuumberr
55、(4); v_empnno2 eemp.eempnoo%typpe; v_empnno3 vv_emppno2%typee; begiin dbbms_ooutpuut.puut_liine(Testt); end;%typee可以看做做变量的一一个属性,指指示其类型型;引用某某张表某个个字段方法法如v_eempnoo2 emmp.emmpno%typee;。下面接着着讲PL_SQL里里面复杂的的变量,可可以定义复复合变量,有有两种:TTablee相当于JJava里里的数组;Recoord相当当于Javva里的类类,暂且这这样理解。要指定ttablee的数据类类型,比较较复杂是这这样来做typ
56、ee typpe_taable_emp_empnno iss tabble oof emmp.emmpno%typee inddex bby biinaryy_inttegerr;typpe定义了了一种新的的数据类型型名字叫ttype_tablle_emmp_emmpno,然后可以用它定义新变量如 v_empnos type_table_emp_empno;。比较有意思的是下标可以取负值如v_empnos(-1)。是什么促促使了reecordd类型数据据的出现呢呢?我们现现在写的是是PL_SSQL,它它最主要用用于操纵表表,表里面面有字段、记录,如如果把一条条记录放一一个变量里里以后用起起来要
57、方便便得多。声声明这种类类型的方式式如:declaare typpe tyype_rrecorrd_deept iis reecordd( deeptnoo deppt.deeptnoo%typpe, dnname deptt.dnaame%ttype, looc deept.lloc%ttype); v_ttemp typee_reccord_deptt;beginn v_ttemp.depttno := 500; v_ttemp.dnamme := aaaaa; v_ttemp.loc := bj; dbmms_ouutputt.putt_linne(v_tempp.depptno| |
58、vv_temmp.dnname);end;/这样声明还还有一个弊弊病,那就就是当字段段改变时控控制起来比比较烦人,为为此引入rrowtyype属性性来声明rrecorrd变量。只需:declaare v_ttemp deptt%rowwtypee;beginn v_ttemp.depttno := 500; v_ttemp.dnamme := aaaaa; v_ttemp.loc := bj; dbmms_ouutputt.putt_linne(v_tempp.depptno| | vv_temmp.dnname);end;/PL_SSQL语句句里的seelectt语句只能能返回一条条记录,且
59、且seleect语句句里面必须须有个innto或使使用游标,还还要保证有有且仅有一一条记录被被返回,这这是它比较较特别的地地方,不然然会报错。在PL_SQL里里面使用iinserrt、deeletee、upddate后后加上coommitt不然起不不了作用有有时,只不不过。同时还有有这么一个个需求-执执行上述语语句以后有有多少条记记录受影响响(除seelectt,对它来来说没多大大意义),这这样做:dbms_outpput.pput_lline(sql%rowccountt|条记记录受影响响);sqql代表刚刚刚执行完完的sqll语句,而而rowccountt代表刚刚刚执行完的的sql语语句影
60、响了了多少条记记录。如果在PPL_SQQL里创建建一张表得得这样写:execcute immeediatte ccreatte taable T(nnnn vaarchaar2(220) deffaultt aaaa); 由于外面面已经有单单引号了所所以里面的的一个单引引号得用两两个代表一一个。deefaullt是给一一个默认值值。PL_SSQL里条条件语句是是形如iff (条件件) thhen elssif (条件) thenn elsse endd if;注意最后后一个ellse后没没有theen,其他他条件后有有,而且eelsiff没有那个个e,最后后以endd if;结束。PL_SSQ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理职业安全
- 关+于“三极模式”信息传播格局探微
- 商务西服培训体系构建
- 运输租凭合同协议书
- 车站票款分成协议书
- 买卖车合同正规协议书
- 饭店欠款转让协议书
- 车辆相撞事故协议书
- 解除定向培养协议书
- 公积金信息变更协议书
- 2025信息技术系统维护服务合同范本
- 2025江苏中天钢铁集团有限公司产品采购销售合同
- 《演讲与表达技巧》课件
- 中暑及热射病防治
- (四检)泉州市2025届高中毕业班适应性练习卷生物试卷(含答案)
- 2025年湖北省高考数学调研试卷(4月份)(含答案)
- 河南能源焦煤集团赵固一矿11231作业规程
- 语文五下《牧场之国》生字识记课件
- 工会劳动保护监督检查员培训大纲
- 儿童画铲雪车课件
- 水务集团面试试题及答案
评论
0/150
提交评论