




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、主讲 韩顺平玩转玩转oracle 10goracle 10g实战教程实战教程主讲:韩顺平主讲:韩顺平emailemail:主讲 韩顺平玩转oracle 10g实战教程oracle第4讲1. 1. 维护数据的完整性维护数据的完整性 2. 2. 序列序列(sequence) (sequence) 3. 3. 管理管理索引索引4. 4. 管理权限和角色管理权限和角色主讲 韩顺平玩转oracle 10g实战教程维护数据的完整性 介绍介绍数据的完整性用于确保数据库数据遵从一定的商业的逻辑规则。在oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,因为约束
2、易于维护,并且具有最好的性能,所以作为维护数据完整性的首选.主讲 韩顺平玩转oracle 10g实战教程维护数据的完整性 约束约束约束用于确保数据库数据满足特定的商业规则。在oracle中,约束包括: not null、unique,primary key,foreign key,和check 五种.主讲 韩顺平玩转oracle 10g实战教程维护数据的完整性 not null(非空非空)如果在列上定义了not null,那么当插入数据时,必须为列提供数据。 unique(唯一唯一)当定义了唯一约束后,该列值是不能重复的.但是可以为null。 primary key(主键主键)用于唯一的标示表
3、行的数据,当定义主键约束后,该列不但不能重复而且不能为null。需要说明的是:一张表最多只能有一个主键,但是可以有多个unqiue约束。 foreign key(外键外键)用于定义主表和从表之间的关系.外键约束要定义在从表从表上,主表则必须具有主键约束或是unique约束.,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null主讲 韩顺平玩转oracle 10g实战教程维护数据的完整性 check用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在10002000之间如果不再10002000之间就会提示出错。主讲 韩顺平玩转oracle 10g
4、实战教程维护数据的完整性 商店售货系统表设计案例商店售货系统表设计案例(1)(1)现有一个商店的数据库,记录客户及其购物情况,由下面三个表组成:现有一个商店的数据库,记录客户及其购物情况,由下面三个表组成:商品商品goodsgoods(商品号(商品号goodsIdgoodsId,商品名,商品名goodsNamegoodsName,单价,单价unitpriceunitprice,商品类,商品类别别categorycategory,供应商,供应商provider);provider);客户客户customercustomer(客户号(客户号customerId,customerId,姓名姓名nam
5、e,name,住址住址address,address,电邮电邮emailemail性别性别sex,sex,身份证身份证cardId);cardId);购买购买purchasepurchase(客户号(客户号customerId,customerId,商品号商品号goodsId,goodsId,购买数量购买数量nums);nums);请用请用SQLSQL语言完成下列功能:语言完成下列功能:1 1 建表,在定义中要求声明:建表,在定义中要求声明:(1)(1)每个表的每个表的主外键主外键;(2)(2)客户的姓名不能为空值;客户的姓名不能为空值;(3)(3)单价必须大于单价必须大于0 0,购买数量必须
6、在,购买数量必须在1 1到到3030之间;之间;(4)(4)电邮不能够重复电邮不能够重复; ;(5)(5)客户的性别必须是客户的性别必须是 男男 或者或者 女女, ,默认是男默认是男主讲 韩顺平玩转oracle 10g实战教程维护数据的完整性维护 商店售货系统表设计案例商店售货系统表设计案例(2)(2)如果在建表时忘记建立必要的约束,则可以在建表后使用如果在建表时忘记建立必要的约束,则可以在建表后使用alter tablealter table命令为表增加约束命令为表增加约束. .但是要注意但是要注意: : 增加增加not nullnot null约束约束时时, ,需要使用需要使用modify
7、modify选项选项, ,而增加其它四种约束使用而增加其它四种约束使用addadd选项。选项。(1)(1)每个表的主外码;每个表的主外码;(2)(2)客户的姓名不能为空值;客户的姓名不能为空值;-增加商品名也不能为空增加商品名也不能为空(3)(3)单价必须大于单价必须大于0 0,购买数量必须在,购买数量必须在1 1到到3030之间;之间;(4)(4)电邮不能够重复电邮不能够重复;-;-增加身份证也不重复增加身份证也不重复(5)(5)客户的性别必须是客户的性别必须是 男男 或者或者 女女, ,默认是男默认是男(6)(6)增加客户的住址只能是增加客户的住址只能是海淀海淀、朝阳朝阳、东城东城、西城西
8、城、通州通州、崇文崇文主讲 韩顺平玩转oracle 10g实战教程维护数据的完整性维护 删除约束删除约束当不再需要某个约束时,可以删除当不再需要某个约束时,可以删除. .alter table alter table 表名表名 drop constraint drop constraint 约束名称约束名称; ;在删除主键约束的时候,可能有错误在删除主键约束的时候,可能有错误, ,比如:比如:alter table alter table 表名表名 drop primary key ;drop primary key ;这是因为如果在两张表存在主从关系,那么在删除主表的主键这是因为如果在两张表
9、存在主从关系,那么在删除主表的主键约束时,必须带上约束时,必须带上 cascade cascade 选项选项 如象如象alter table alter table 表名表名 drop primary key drop primary key cascadecascade; ;主讲 韩顺平玩转oracle 10g实战教程维护数据的完整性维护 列级定义列级定义列级定义是在定义列的同时定义约束列级定义是在定义列的同时定义约束。 表级定义表级定义表级定义是指在定义了所有列后,再定义约束表级定义是指在定义了所有列后,再定义约束. .这里需要注意这里需要注意: : not nullnot null约束只
10、能在列级上定义约束只能在列级上定义。主讲 韩顺平玩转oracle 10g实战教程序列(sequence) 一个问题一个问题在某张表中,存在一个在某张表中,存在一个id列列(整数整数),我们希望在添加记录的时候,我们希望在添加记录的时候,该列从该列从1开始,自动的增长,怎么处理开始,自动的增长,怎么处理? 主讲 韩顺平玩转oracle 10g实战教程序列(sequence) 介绍介绍oracle中,是通过使用序列(sequence)来处理自动增长列。 (1) 可以为表中的列自动产生值. (2) 由用户创建数据库对象,并可由多个用户共享. (3) 一般用于主键或唯一列. 案例案例说明说明 主讲 韩
11、顺平玩转oracle 10g实战教程序列(sequence) 细节说明细节说明一旦定义了某个序列,你就可以用CURRVAL,NEXTVAL CURRVAL:返回 sequence的当前值 NEXTVAL:增加sequence的值,然后返回 sequence 值 比如: 序列名.CURRVAL 序列名.NEXTVAL 什么时候使用sequence: - 不包含子查询、snapshot、VIEW的 SELECT 语句 - INSERT语句的子查询中 - INSERT语句的VALUES中 - UPDATE 的 SET中 主讲 韩顺平玩转oracle 10g实战教程序列(sequence) 细节说明细
12、节说明可以看如下例子:可以看如下例子: INSERT INTO emp VALUES INSERT INTO emp VALUES (my_seq.nextval, TOMCAT, CLERK,(my_seq.nextval, TOMCAT, CLERK,75667566, SYSDATE, 1200, NULL,20); , SYSDATE, 1200, NULL,20); SELECT my_seq.currval FROM DUAL; SELECT my_seq.currval FROM DUAL; 但是要注意的是:但是要注意的是: 第一次第一次NEXTVALNEXTVAL返回的是初始值
13、返回的是初始值;随后的;随后的NEXTVALNEXTVAL会自动增加你定义的会自动增加你定义的INCREMENT BYINCREMENT BY值,然后返回增加后的值。值,然后返回增加后的值。CURRVAL CURRVAL 总是返回当前总是返回当前SEQUENCESEQUENCE的值,的值,但是在第一次但是在第一次NEXTVALNEXTVAL初始化之后才能使用初始化之后才能使用CURRVALCURRVAL,否则会出错,否则会出错。一次一次NEXTVALNEXTVAL会增加一次会增加一次SEQUENCESEQUENCE的值,所以如果你在同一个语句里面使用的值,所以如果你在同一个语句里面使用多个多个
14、NEXTVALNEXTVAL,其值就是不一样的。如果指定,其值就是不一样的。如果指定CACHECACHE值,值,ORACLEORACLE就可以预先就可以预先在内存里面放置一些在内存里面放置一些sequencesequence,这样存取的快些。,这样存取的快些。cachecache里面的取完后,里面的取完后,oracleoracle自动再取一组到自动再取一组到cachecache。 使用使用cachecache或许会跳号,或许会跳号, 比如数据库突然比如数据库突然不正常不正常downdown掉(掉(shutdown abort),cacheshutdown abort),cache中的中的seq
15、uencesequence就会丢失就会丢失. . 所以可以所以可以在在create sequencecreate sequence的时候用的时候用nocachenocache防止这种情况。防止这种情况。 主讲 韩顺平玩转oracle 10g实战教程管理索引原理介绍 介绍介绍索引是索引是用于加速数据存取的数据用于加速数据存取的数据对象对象.合理的使用合理的使用索引可以大大降索引可以大大降低低i/o次数次数,从而提高数据访问性能。索引有很多种我们主要介绍常从而提高数据访问性能。索引有很多种我们主要介绍常用的几种用的几种:为什么添加了索引后,会加快查询速度呢为什么添加了索引后,会加快查询速度呢?主讲
16、 韩顺平玩转oracle 10g实战教程管理索引创建索引 单列索引单列索引单列索引是基于单个列所建立的索引,语法: 复合索引复合索引复合索引是基于两列或是多列的索引。在同一张表上可以有多个索引,但是要求列的组合必须不同,语法:create index index_nameon table(columnname,columnname);create index index_nameon table(columnname);主讲 韩顺平玩转oracle 10g实战教程管理索引使用原则 使用原则使用原则在大表上建立索引才有意义在where子句或是连接条件上经常引用的列上建立索引索引的层次不要超过4层
17、这里能不能给学生演示这个效果呢?如何构建一个大表呢?主讲 韩顺平玩转oracle 10g实战教程管理索引索引的缺点 索引缺点分析索引缺点分析索引有一些先天不足:索引有一些先天不足:1:建立索引,系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引。2:更新数据的时候,系统必须要有额外的时间来同时对索引进行更新,以维持数据和索引的一致性。实践表明,不恰当的索引不但于事无补,反而会降低系统性能。因为大量的索引在进行插入、修改和删除操作时比没有索引花费更多的系统时间。比如在如下字段建立索引应该是不恰当的:比如在如下字段建立索引应该是不恰当的:1、很少或从不引用的字段;2、逻辑型的字段,如男或女(是
18、或否)等。综上所述,提高查询效率是以消耗一定的系统资源为代价的,索引不能盲目的建立,这是考验一个DBA是否优秀的很重要的指标主讲 韩顺平玩转oracle 10g实战教程管理索引其它索引 介绍介绍按照数据存储方式,可以分为B*树、反向索引、位图索引;按照索引列的个数分类,可以分为单列索引、复合索引;按照索引列值的唯一性,可以分为唯一索引和非唯一索引.此外还有函数索引,全局索引,分区索引对于索引我还要说对于索引我还要说:在不同的情况我们会在不同的列上建立索引,甚至建立不同种类的索引,请记住,技术是死的,人是活的。比如:B*-树索引建立在重复值很少的列上,而位图索引则建立在重复值很多、不同值相对固定
19、的列上。主讲 韩顺平玩转oracle 10g实战教程管理权限和角色 介绍介绍这一部分我们主要看看oracle种如何管理权限和角色,权限和角色的区别在那里。当刚刚建立用户时,用户没有任何权限,也不能执行任何操作。如果要执行某种特定的数据库操作,则必须为其授予系统的权限;如果用户要访问其它方案的对象,则必须为其授予对象的权限.为了简化权限的管理,可以使用角色。这里我们会详细的介绍主讲 韩顺平玩转oracle 10g实战教程管理权限和角色 权限权限权限是指执行特定类型sql命令或是访问其它方案对象的权利,包括系统权限和对象权限两种:主讲 韩顺平玩转oracle 10g实战教程管理权限和角色系统权限
20、系统权限介绍系统权限介绍系统权限是指执行特定类型sql命令的权利.它用于控制用户可以执行的一个或是一组数据库操作.比如当用户具有create table权限时,可以在其方案中建表,当用户具有create any table权限时,可以在任何方案中建表.oracle提供了100多中系统权限。常用的有:create session连接数据库连接数据库create table建表建表create view 建视图建视图create public synonym键同义词键同义词create procedure 建过程、函数、包建过程、函数、包 create trigger 建触发器建触发器create
21、 cluster建簇建簇 显示系统权限显示系统权限oracel提供了100多系统权限,而且oracle的版本越高,提供的系统权限就越多,我们可以查询数据字典视图system_privilege_map,可以显示所有系统权限select * from system_privilege_map order by name;主讲 韩顺平玩转oracle 10g实战教程管理权限和角色系统权限 授予系统权限授予系统权限一般情况,授予系统权限是有dba完成的,如果用其它用户来授予系统权限,则要求该用户必须具有grant any privilege的系统权限在授予系统权限时,可以带有with admin o
22、ption选项,这样,被授予权限的用户或是角色还可以将该系统权限授予其它的用户或是角色。为了让大家快速入门,我们举例说明:1.创建两个用户 ken , tom.初始阶段他们没有任何权限,如果登陆就会给出错误的信息1.1创建两个用户,并指定密码.2.给用户ken授权:2.1:授予create session 和create table权限时 带with admin option2.2 授予create view 时不带with admin option主讲 韩顺平玩转oracle 10g实战教程管理权限和角色系统权限3.给用户tom授权我们可以通过ken 给tom授权,因为with admin
23、option是加上的。当然也可以通过dba给tom授权,我们就用ken给tom授权: grant create session,create table to tom; grandt create view to tom; ok吗?不ok 回收系统权限回收系统权限一般情况下,回收系统权限是dba来完成的,如果其它的用户来回收系统权限,要求该用户必须具有相应系统权限及转授系统权限的选项(with admin option)。回收系统权限使用revoke来完成,当回收了系统权限后,用户就不能执行相应的操作了,但是请注意,系统权限级联收回问题?不是级联回收!sys-ken-tom(create se
24、ssion) (create session)(create session)用用system执行如下操作执行如下操作:revoke create session from ken; 请思考请思考 tom还能登录?还能登录?主讲 韩顺平玩转oracle 10g实战教程管理权限和角色对象权限 对象权限介绍对象权限介绍指访问其它方案对象的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限. 比如smith用户要访问scott.emp表(scott:方案,emp :表)则必须在scott.emp表上具有对象的权限。常用的有:alter 修改修改delete 删除
25、删除select 查询查询 insert 添加添加update 修改修改index索引索引references 引用引用 execute 执行执行主讲 韩顺平玩转oracle 10g实战教程管理权限和角色对象权限 授予对象权限授予对象权限在oracle9i前,授予对象权限是由对象的所有者来完成的,如果用其它的用户来操作,则需要用户具有相应的(with grant option )权限,从oracle9i开始,dba,sys,system 可以将任何对象上的对象权限授予其它用户.授予对象权限是用grant命令来完成的.我们看几个案例:1.monkey用户要操作scott.emp表,则必须授予相应
26、的对象权限希望monkey可以查询scott.emp的表数据,怎样操作?希望monkey可以修改scott.emp的表数据,怎样操作?希望monkey可以删除scott.emp的表数据,怎样操作?有没有更加简单的方法,一次把所有权限赋给monkey?grant 对象权限对象权限 on 数据库对象数据库对象 to 用户名用户名,角色名角色名,public with grant option主讲 韩顺平玩转oracle 10g实战教程管理权限和角色对象权限2.能否对能否对monkey访问权限更加访问权限更加精细控制精细控制.(授予列权限授予列权限)希望monkey只可以修改scott.emp的表的
27、sal字段,怎样操作?希望monkey只可查询scott.emp的表的ename,sal数据,怎样操作?3.授予授予alter权限权限如果black用户要修改scott.emp表的结构,则必须授予alter对象权限4.授予授予execute权限权限如果用户想要执行其它方案的包/过程/函数,则须有execute权限.比如为了让ken可以执行包dbms_transaction,可以授execute权限主讲 韩顺平玩转oracle 10g实战教程管理权限和角色对象权限5.5.授予授予indexindex权限权限如果想在别的方案的表上建立索引,则必须具有index对象权限,如为了让black可以在 s
28、cott.emp上建立索引,就给其index的对象权限sqlconn scott/tigersqlgrant index on scott.emp to blake 6.6.使用使用with grant optionwith grant option选项选项该选项用于转授对象权限.但是该选项只能被授予用户,而不能授予角色sqlconn scott/tigersqlgrant select on emp to blake with grant optionsqlconn black/shunpingsqlgrant select on scott.emp to jones主讲 韩顺平玩转orac
29、le 10g实战教程管理权限和角色对象权限 回收对象权限回收对象权限在oracle9i中,收回对象的权限可以由对象的所有者来完成,也可以用dba用户(sys,system)来完成这里要说明的时:收回对象权限后,用户就不能执行相应的sql命令,但是要注意的是对象的权限是否会被级联收回?级联回收请看一个案例:scott-blake-jonesselect on empselect on empselect on emprevoke 对象权限对象权限 on 数据库对象数据库对象 from 用户名用户名,角色名角色名,public主讲 韩顺平玩转oracle 10g实战教程管理权限和角色角色 介绍介绍
30、角色就是相关权限的命令集合,使用角色的主要目的就是为了简化权限的管理.假定有用户1,2,3为了让他们都拥有权限连接数据库在scott.emp表上select,insert,update,如果采用直接授权操作,则需要进行12次授权。因为要进行因为要进行1212次授次授权操作权操作, ,所以比较所以比较麻烦喔麻烦喔! ! 怎么办怎么办? ?主讲 韩顺平玩转oracle 10g实战教程管理权限和角色角色 介绍介绍我们如果采用角色就可以简化:首先将create session , select on scott.emp, insert on scott.emp,update on scott.emp授
31、予角色,然后将该角色授予a,b,c用户,这样就可以三次授权搞定.角色分为预定义和自定义角色两类:可以考虑使用自可以考虑使用自定义角色来解决定义角色来解决问题的。问题的。主讲 韩顺平玩转oracle 10g实战教程管理权限和角色角色 预定义角色预定义角色预定义角色是指oracle所提供的角色,每种角色都用于执行一些特定的管理任务,下面我们介绍常用的预定义角色connect,resource,dbaconnectconnect角色角色connect角色具有一般应用开发人员需要的大部分权限,当建立了一个用户后,多数情况下,只要给用户授予connect和resource角色就够了,那么,connect
32、角色具有哪些系统权限呢?alter session create cluster create database linkcreate sesssion create table create view create sequence主讲 韩顺平玩转oracle 10g实战教程管理权限和角色角色 预定义角色预定义角色resourceresource角色角色resource角色具有应用开发人员所需要的其它权限,比如建立存储过程、触发器等。这里需要注意的是resource角色隐含了 unlimited tablespace系统权限。resourceresource角色包含以下系统权限角色包含以下系
33、统权限: :create clustercreate indextypecreate tablecreate sequencecreate typecreate procedure create trigger主讲 韩顺平玩转oracle 10g实战教程管理权限和角色角色 预定义角色预定义角色dbadba角色角色dba角色具有所有的系统权限,及with admin option选项,默认的dba用户为sys和system他们可以将任何系统权限授予其它用户.但是要注意的是dba角色不具备sysdba和sysoper的特权(启动和关闭数据库)主讲 韩顺平玩转oracle 10g实战教程管理权限和角
34、色角色 自定义角色自定义角色顾名思义就是自己定义的角色,根据自己的需要来定义.一般是dba来建立,如果用的别的用户来建立,则需要具有create role的系统权限.在建立角色时可以指定验证方式(不验证,数据库验证等)建立角色建立角色( (不验证不验证) )如果角色是公用的角色,可以采用不验证的方式建立角色.create role 角色名 not identified;建立角色建立角色( (数据库验证数据库验证) )采用这样的方式时,角色名、口令存放在数据库中。当激活该角色时,必须提供口令.在建立这种角色时,需要为其提供口令create role 角色名 identified by shunping主讲 韩顺平玩转oracle 10g实战教程管理权限和角色角色 角色授权角色授权当建立角色时,角色没有任何权限,为了使得角色完成特定任务,必须为其授予相应的系统权限和对象权限。给角色授权给角色授权给角色授予权限和给用户授权没有太多区别,但是要注意,系统权限的 unlimited tablespace 和对象权限的with grant option 选项是不能授予角色的。grant 对象权限对象权限 on 数据库对象数据库对象 to 自定义角色名自定义角色名 with admin option练习 : 1. 用system 给某个自定义角色 授予creat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甘肃省平凉市崆峒区卫生健康系统临时聘用人员招聘考前自测高频考点模拟试题完整参考答案详解
- 2025年宁乡事业单位真题
- 2025湖北随州市曾都医院引进急需紧缺高层次人才15人模拟试卷及完整答案详解一套
- 雷达装配工新技术推广应用考核试卷及答案
- 公司手绣工岗位设备技术规程
- 公司提琴吉他制作工岗位职业健康、安全、环保技术规程
- 2025年江西职业技术大学高层次人才招聘51人考前自测高频考点模拟试题及参考答案详解一套
- 公司金属摆件制作工职业健康技术规程
- 2025河南郑州市第六人民医院招聘模拟试卷及答案详解一套
- 起重机械装配调试工办公技能考核试卷及答案
- 2025银行招聘试题及答案详解
- 2025贵州册亨县招聘教师25人考试参考试题及答案解析
- 河南成人2024学位英语考试真题及答案
- 2025年淮南市大通区和寿县经开区公开招聘社区“两委”后备干部30名考试参考试题及答案解析
- 长期照护师培训考核试卷及答案
- 煤矿安全规程2025版解读
- 2025年秋季开学典礼诗歌朗诵稿:纪念抗战胜利八十周年
- 军人识图用图课件
- 乙型肝炎病毒护理查房
- (标准)菜地转让合同协议书范本
- 高血压与糖尿病防治课件
评论
0/150
提交评论