修改原有的列定义有可能会破坏已有数据课件

上传人:鲁** 文档编号:570829995 上传时间:2024-08-06 格式:PPT 页数:72 大小:174.50KB
返回 下载 相关 举报
修改原有的列定义有可能会破坏已有数据课件_第1页
第1页 / 共72页
修改原有的列定义有可能会破坏已有数据课件_第2页
第2页 / 共72页
修改原有的列定义有可能会破坏已有数据课件_第3页
第3页 / 共72页
修改原有的列定义有可能会破坏已有数据课件_第4页
第4页 / 共72页
修改原有的列定义有可能会破坏已有数据课件_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《修改原有的列定义有可能会破坏已有数据课件》由会员分享,可在线阅读,更多相关《修改原有的列定义有可能会破坏已有数据课件(72页珍藏版)》请在金锄头文库上搜索。

1、第三章关系数据库标准语言SQLn结构化查询语言(structured query language)是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的、功能极强的关系数据库语言。 修改原有的列定义有可能会破坏已有数据第一节SQL概述nSQL成为国际标准,对数据库以外的领域产生了很大影响,有不少软件产品将SQL语言的数据查询功能与图形功能、软件工程工具、人工智能程序结合起来。SQL已成为关系数据库领域中一个主流语言。修改原有的列定义有可能会破坏已有数据一、SQL的特点nSQL语言是一个综合的、通用、功能极强、同时又简捷易学的语言。SQL语言及数据查询(

2、data query)、数据操纵(data manipulation)、数据定义(data definition)和数据控制(data control)功能于一体,充分体现了关系数据语言的特点和优点。其主要特点包括:修改原有的列定义有可能会破坏已有数据n1、综合统一n数据库的主要功能是通过数据库支持的数据语言来实现的。n2、高度非过程化n用SQL语言进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户不需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。n3、面向集合的操作方式nSQL语言采用集合操作方式,不

3、仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。 修改原有的列定义有可能会破坏已有数据n4、以同一种语法结构提供两种使用方式nSQL既是自含式语言又是嵌入式语言,以统一的语法结构提供两种不同的使用方式的做法,为用户提供了极大的灵活性与方便性。n5、语言简洁,易学易用nSQL语言功能极强,但由于设计巧妙,语言十分简洁,语法简单,接近英语口语,因此容易学习容易使用。修改原有的列定义有可能会破坏已有数据二、SQL语言的基本概念nSQL语言支持关系数据库三级模式结构:外模式、模式、内模式。其中外模式对应于视图(view)和部分基本表(base table),模式对应于

4、基本表,内模式对应于存储文件。n基本表式本身独立存在的表,在SQL中一个关系对应一个表。一些基本表对应一个存储文件,一个表可以带若干索引,索引存放在存储文件中。n存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理文件结构是任意的。修改原有的列定义有可能会破坏已有数据n视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍然存放在导出视图的基本表中,因此视图是一个虚表。n用户可以用SQL语言对视图和基本表进行查询。在用户眼中,视图和基本表都是关系,而存储文件对用户是透明的。修改原有的列定义有可能会破坏已有数据第二

5、节数据定义n关系数据库由模式、外模式和内模式组成,即关系数据库的基本对象是表、视图和索引。SQL的数据定义功能包括定义表、定义视图和定义索引。由于视图是基于基本表的虚表,索引是依附于基本表的,因此SQL通常不提供修改视图定义和修改索引定义的操作。用户如果想修改视图定义或索引定义,只能先将它们删除掉,然后再重建。修改原有的列定义有可能会破坏已有数据一、定义、删除与修改基本表n1、定义基本表n建立数据库最重要的一步就是定义一些基本表。SQL语言使用CREATA TABLE语句定义基本表,其一般格式如下:nCREATE TABLE(列级完整性约束条件,n列级完整性约束条件n,);n定义表的各个属性时

6、需要指明其数据类型及长度。不同的数据库系统支持的数据类型不完全相同。修改原有的列定义有可能会破坏已有数据2、修改数据表n随着应用环境和应用需求的变化,有时需要修改已建立好的基本表,包括增加新列、增加新的完整性约束条件,修改原有的列定义或删除已有的完整性约束条件等。SQL语言用ALTER TABLE语句修改基本表,其一般格式为:nALTER TABLE表名n ADD完整性约束n DROPn MODIFY;修改原有的列定义有可能会破坏已有数据n不论基本表中原来是否已有数据,新增加的列一律为空值。修改原有的列定义有可能会破坏已有数据。SQL没有提供删除属性列的语句,用户只能间接实现这一功能,即先将原

7、表中要保留的列及其内容复制到一个新表中,然后删除原表,并将新表重明名为原表名。修改原有的列定义有可能会破坏已有数据3、删除基本表n当某个基本表不再需要时,可以使用SQL语句DROP TABLE进行删除。其一般格式为:nDROP TABLE;n基本表定义一旦删除,表中的数据和在此表上建立的索引都将自动被删除掉,而建立在此表上的视图虽然保留,但已无法引用。因此执行删除操作要格外小心。修改原有的列定义有可能会破坏已有数据二、建立与删除索引n建立索引是加快表的查询速度的有效手段。SQL语言支持用户根据应用环境的需要,在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。建立与删除索引有数据库

8、管理员(DBA)或表的属主(即建立表的人)负责完成。系统在存取数据时会自动选择合适的索引作为存取路径,用户不必也不能选择索引。 修改原有的列定义有可能会破坏已有数据1、建立索引n在SQL语言中,建立索引使用CREATE INDEX语句,其一般格式为:nCREATE UNIQUE CLUSTER INDEX ON (n , )nUNQUE表示此索引的每一个索引值只对应唯一的数据记录。nCLUSTER表示要建立的索引是聚簇索引。所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。修改原有的列定义有可能会破坏已有数据n用户可以在最常查询的列上建立聚簇索引以提高查询效率。显然在一个基本表上

9、最多只能建立一个聚簇索引。建立聚簇索引后,更新索引列数据时往往导致表中记录的物理顺序的变更,代价较大,因此对于经常更新的列不宜建立聚簇索引。 修改原有的列定义有可能会破坏已有数据2、删除索引n索引一经建立,就由系统使用和维护它,不需用户干预。建立索引是为了减少查询操作的时间,但如果数据增删改频繁,系统会花费许多时间来维护索引。这时可以删除一些不必要的索引。在SQL语言中,删除索引使用DROP INDEX语句,其一般格式为:nDROP INDEX n删除索引时,系统会同时从数据字典中删去有关该索引的描述。 修改原有的列定义有可能会破坏已有数据第三节查询n建立数据库的目的是为了查询数据,可以说数据

10、库查询是数据库的核心操作。SQL语言提供了SELECT语句进行数据库的查询,该语句具有灵活的使用方式和丰富的功能。n整个SELECT语句的含义是,根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,在按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。如果有GROUP子句,则将结果按的值进行分组,该属性列值相等的元组为一个组,每个组产生结果表中的一个记录。nSELECT语句既可以完成简单的单表查询,也可以完成复杂的连接查询和嵌套查询。 修改原有的列定义有可能会破坏已有数据一、单表查询n单表查询是指仅涉及一个表的查询,单表查询是一种最简单的查询操作

11、。n1、选择标中的若干列n选择表中的全部列或部分列,这类运算又称为投影。其变化方式主要表现在nSELECT子句的上。 修改原有的列定义有可能会破坏已有数据1)查询指定列n在很多情况下,用户只对表中的一部分 属 性 列 感 兴 趣 , 可 以 通 过 在SELECT子句的中指定要查询的数据。中各个列的先后顺序可以与表中的顺序不一致,用户在查询时可以根据应用的需要改变列的显示顺序。修改原有的列定义有可能会破坏已有数据2)查询全部列n将表中的所有属性都选出来,可以有两种方法:一在SELECT关键字后面列出所有列名;如果列的显示顺序与其在基本表中的顺序相同,也可以简单地将指定为。修改原有的列定义有可能

12、会破坏已有数据3)查询经过计算的值nSELECT子句的不仅可以是表中的属性列,也可以是有关表达式,即可以将查询出来的属性列经过一定的计算后列出结果。修改原有的列定义有可能会破坏已有数据2、选择表中的若干元组n1)消除取值重复的行n两个本来并不相同的元组,投影到指定的某些列上后,可能变成完全相同的行了。n2)查询满足条件的元组n查询满足指定条件的元组可以通过WHERE子句实现。 修改原有的列定义有可能会破坏已有数据3、对查询结果排序n如果没有指定查询结果的显示顺序,DBMS将按其最方便的顺序(通常是元组在表中的先后顺序)输出查询结果。用户可以用ORDER BY子句指定按照一个或多个 属 性 列

13、的 升 序 ( ASC) 或 降 序(DESC)从新排列查询结果,其中升序ASC为缺省值。修改原有的列定义有可能会破坏已有数据4、使用集函数n为了进一步方便用户,增强检索功能,SQL提供许多集函数。如果指定DISTINCT短语,则表示在计算时要取消指定列中的重复值。如果不指定DISTINCT短语或指定ALL短语(ALL为缺省值),则表示不取消重复值。修改原有的列定义有可能会破坏已有数据5、对查询结果分组n对查询结果分组的目的是为了细化集函数的作用对象。如果未对查询结果分组,集函数将作用于整个查询结果,即整个查询结果只有一个函数值,否则集函数将作用于每一个组,即每一组都有一个函数值。GROUP

14、BY子句可以将查询结果表的各行按一列或多列取值相等的原则进行分组。 修改原有的列定义有可能会破坏已有数据n如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用HAVING短语指定筛选条件。nWHERE子句与HAVING短语的根本区别在于作用对象不同,WHERE子句作用于基本表或视图,从中选择满足条件的元组;HAVING短语作用于组,从中选择满足条件的组。 修改原有的列定义有可能会破坏已有数据二、连接查询n若一个查询同时涉及两个以上的表,则称之为连接查询。连接查询实际上是关系数据库中最主要的查询,主要包括等值连接查询、非等值连接查询、自身连接查询、外连接查询和复合

15、条件查询。修改原有的列定义有可能会破坏已有数据1、等值与非等值连接查询n当用户的一个查询请求涉及到数据库的多个表示,必须按照一定的条件把这些表连接在一起,以便能够共同提供用户需要的信息。用来连接两个表的条件称为连接条件或连接谓词。当连接运算符为时,称为等值连接,使用其他运算符称为非等值连接。修改原有的列定义有可能会破坏已有数据2、自身连接n连接操作不仅可以在两个表之间进行,也可以是一个表以其自己进行连接,这种连接称为表的自身连接。 修改原有的列定义有可能会破坏已有数据3、外连接n在通常的连接操作中,只有满足连接条件的元组才能作为结果输出。外连接的运算符通常为,有的关系数据库中也用。外连接就好像

16、是为制定的表增加一个“万能”的行,这个行全部由空值组成,它可以和另一个表中所有不能与指定表其它行连接的元素进行连接。修改原有的列定义有可能会破坏已有数据4、复合条件连接nWHERE子句中有多个条件的连接操作称为复合条件连接。连接操作除了可以是两表连接,一个表与其自身连接外,还可以是两个以上的表进行连接,后者通常称为多表连接。修改原有的列定义有可能会破坏已有数据三、嵌套查询n在 SQL语 言 中 , 一 个 SELECT FROMWHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询或子查询。嵌套查询的求解方法是由里向外处理,即每

17、个子查询在其上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。n嵌套查询使得可以用一系列简单查询构成复杂的查询,从而明显地增强了SQL的查询能力。以层层嵌套的方式构造程序正是SQL中“结构化”的含义所在。 修改原有的列定义有可能会破坏已有数据1、带有IN谓词的子查询n带有IN谓词的子查询是指父查询与子查询之间用IN进行连接,判断某个属性列值是否在子查询的结果中。由于在嵌套查询中,子查询的结果往往是一个集合,所以谓词IN是嵌套查询中最经常使用的谓词。DBMS求解该种查询时,实际上是分步去作的,即首先求解子查询,得到结果,然后求解父查询。也就是说用子查询构造查询语句,实际上是把分步过

18、程留给DBMS。实现同一个查询可以有多种方法,当然不同的方法其执行效率可能会有差别,甚至会差别很大。修改原有的列定义有可能会破坏已有数据2、带有比较运算符的子查询n带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。当用户能确切知道内层查询返回的是单值时,可以用、等比较运算符。 修改原有的列定义有可能会破坏已有数据3、带有ANY或ALL谓词的子查询n子查询返回单值时可以用比较运算符外,而使用ANY或ALL谓词时则必须同时使用比较运算符。其语义为:(略 )。n用集函数实现子查询通常比直接用ANY或ALL查询效率要高。修改原有的列定义有可能会破坏已有数据4、带有EXISTS谓词的子查

19、询n带有EXISTS谓词的子查询不返回任何实际数据,它只产生逻辑真值“TRUE”或逻辑假值“FALSE”。使用存在量词EXISTS后,若内层查询结果非空,则外层的WHERE子句返回真值,否则返回假值。 修改原有的列定义有可能会破坏已有数据四、集合查询n每一个SELECT语句都能获得一个或一组元组。若要把多个SELECT语句的结果合并为一个结果,可用集合操作来完成。集合操作主要包括并操作UNION、交操作INTERSECT和差操作MINUS。使用UNION将多个查询结果合并起来,形成一个完整的查询结果时,系统会自动去掉重复的元组。需要注意的是,参加UNION操作的各数据项数目必须相同;对应项的数

20、据类型也必须相同。n标准SQL中没有直接提供集合交操作和集合差操作,但可以用其他方法来实现。具体实现方法依查询不同而不同。修改原有的列定义有可能会破坏已有数据第四节数据更新nSQL中数据更新包括插入数据、修改数据和数据删除数据三条语句。 修改原有的列定义有可能会破坏已有数据一、插入数据nSQL的数据插入语句INSERT通常有两种形式:一种是插入一个元组,另一种是插入子查询结果,后者可以一次插入多个元组。 修改原有的列定义有可能会破坏已有数据1、插入单个元组n插入单个元组的INSERT语句的格式为:nINSERT INTO (,) VALUES (,);n其功能是将新元组插入指定表中,其中新记录

21、属性列1的值为常量1,属性2的值为常量2,。如果某些属性列在INTO子语中没有出现,则新记录在这些列上将取空值。必须注意的是,在表定义时说明了NOT NULL的属性列不能取空值,否则会出错。如果INTO子句中没有指明任何列名,则新插入的记录必须在每个属性列上均有值。修改原有的列定义有可能会破坏已有数据2、插入子查询结果n子查询不仅可以嵌套在SELECT语句中,用以构造父查询的条件,也可以嵌套在INSERT语句中,用以生成要插入的数据。子查询其功能是以批量插入,一次将子查询的结果全部插入指定表中。修改原有的列定义有可能会破坏已有数据二、修改数据n修改操作又称为更新操作,其语句的一般格式为:nUP

22、DATE SET ,WHERE ;n其功能是修改指定表中满足WHERE子句条件的元组。其中SET子句用于指定修改方法,即用的值取代相应的属性列值。如果省略WHERE子句,则表示要修改表中的所有元组。修改原有的列定义有可能会破坏已有数据n1、修改某个元组的值n2、修改多个元组的值n3、带子查询的修改语句n子查询可以嵌套在UPDATE语句中,用以构造执行修改操作的条件。n4、修改操作与数据库的一致性nUPDATE语句一次只能操作一个表,这会带来一些问题。必须保证两条相关的UPDATE语句,要么都做,要么都不做。为解决这一问题,数据库系统通常都引入了事务(transaction)的概念。 修改原有的

23、列定义有可能会破坏已有数据三、删除数据n删除语句的一般格式为:nDELETE FROM WHERE ;nDELETE语句的功能是从指定表中删除满足WHERE子句条件的所有元组。如果省略WHERE子句,表示删除表中全部元组,但表的定义仍在字典中,也就是说DELETE语句删除的是表中的数据而不是表的定义。 修改原有的列定义有可能会破坏已有数据n1、删除某个元组的值nDELETE操作一次只能操作一个表,因此同样会遇到UPDATE操作中提到的数据不一致问题,必须用一条独立的DELETE语句完成删除,以保证数据的一致性。n2、删除多个元组的值n3、带子查询的删除语句n子查询同样也可以嵌套在DELETE语

24、句中,用以构造执行删除操作的条件。 修改原有的列定义有可能会破坏已有数据第五节视图n视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍然存放在原来的基本表中。基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。n视图一经定义,就可以和基本表一样被查询、被删除,也可以在一个视图上定义新的视图,但对视图的更新(增删改)操作则有一定的限制。修改原有的列定义有可能会

25、破坏已有数据一、定义视图n1、建立视图nSQL语言用CREATE VIEW命令建立视图,其一般格式为:nCREATE VIEW ( ,) ASnWITH CHECK OPTION;n其中子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。修改原有的列定义有可能会破坏已有数据在下列三种情况下必须明确指定组成视图的所有列名:n(1)其中某个目标列不是单纯的属性名,而是集函数或列表达

26、式。n(2)多表连接时选出了几个同名列作为视图的字段。需要在视图中为某个列启用新的更合适的名字。n需要说明的是,组成视图的属性列名必须依照上面的原则,或者全部省略或者全部指定,没有第三种选择。修改原有的列定义有可能会破坏已有数据n视图不仅可以建立在一个或多个基本表上,也可以建立在一个或多个以定义好的视图上,或同时建立在基本表与视图上。定义基本表时,为了较少数据库中冗余数据,表中只存放基本数据,由基本数据经过各种计算派生出的数据一般是不存储的。但由于视图中的数据并不实际存储,所以定义视图时可以根据应用的需要,设置一些派生属性列。这些派生属性由于在基本表中并不实际存在,所以也称他们为虚拟列。带虚拟

27、列的视图称为带表达式的视图。修改原有的列定义有可能会破坏已有数据2、删除视图n视图建立好后,若导出此视图的基本表被删除了,该视图将失效,但一般不会被自动删除。删除试图通常需要使用DROP VIEW语句进行。该语句的格式为:nDROP VIEW ;n一个视图被删除后,由该视图导出的其他视图也将失效,用户应该使用DROP VIEW语句将它们一一删除。 修改原有的列定义有可能会破坏已有数据二、查询视图n视图定义后,用户就可以相对基本表进行查询一样对视图进行查询。DBMS执行对视图的查询时,首先进行有效性检查,检查查询设计的表、视图等是否在数据库中存在,如果存在,则从数据字典中取出查询涉及的视图的定义

28、,把定义中的子查询和用户对视图的查询结合起来,转换成对基本表的查询,然后再执行这个经过修正的查询。将对视图的查询转换为对基本表的查询的过程称为视图的消解(view resolution)。修改原有的列定义有可能会破坏已有数据n一般说来,DBMS队行列子集视图的查询均能进行正确转换。但对非行列子集的查询就不一定能够保证转换的正确性了,因此对这类视图进行查询时应尽量避免视图中的特殊属性出现在查询条件中。 修改原有的列定义有可能会破坏已有数据三、更新视图n更新视图包括插入、删除和修改三类操作。n由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。为防止用户通过视图对数据进行增

29、删改时,无意或故意操作不属于视图范围内的基本表数据,可在定义视图时加上WITH CHECK OPTION子句,这样在视图上增删改数据时,DBMS会进一步检查视图定义中的条件,若不满足条件,则拒绝该执行操作。修改原有的列定义有可能会破坏已有数据n在关系数据库中,并不是所有的视图都是可更新的,因为有些视图的更新不能唯一的有意义的转换成对相应基本表的更新。n目前各个关系数据库系统一般都只允许对行列子集视图的更新,而且各个系统对视图的更新还有更进一步的规定,由于各系统实现方法上的差异,这些规定也不尽相同。修改原有的列定义有可能会破坏已有数据四、视图的用途n视图最终是定义在基本表之上的,对视图的一切操作

30、最终也要转换为对基本表的操作,而且对于非行列子集视图进行查询或更新时还有可能出现问题。合理使用视图能够带来许多好处。修改原有的列定义有可能会破坏已有数据1、视图能够简化用户的操作n视图机制使用户可以将注意力集中在他所关心的数据上。如果这些数据不是直接来自基本表,则可以通过定义视图,使用户眼中的数据库结构简单、清晰,并且可以简化用户的数据查询操作。用户所做的只是对一个虚表的简单查询,而这个虚表是怎样得来的,用户无需了解。 修改原有的列定义有可能会破坏已有数据2、视图使用户能以多种角度看待同一数据n视图机制能使不同的用户以不同的方式看待同一数据,当许多不同种类的用户使用同一个数据时,这种灵活性是非

31、常重要的。修改原有的列定义有可能会破坏已有数据3、视图对重构数据库提供了一定程度的逻辑独立性n数据的物理独立性是指用户和用户程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有的关系增加新的字段等,用户和用户程序不会受影响。层次数据库和网状数据库一般能较好地支持数据的物理独立性,而对于逻辑独立性不能完全的支持。在关系数据库中,数据库的重构造往往是不可避免的。重构数据库最常见的是将一个表“垂直”地分成多个表。尽管数据库的逻辑结构改变了,但应用程序并不必修改,因为新建立的视图定义了用户原来的关系,使用户的外模式保持不变,用户的应用程序仍然能够查找数据。修改原有

32、的列定义有可能会破坏已有数据4、视图能够对机密数据提供安全保护n有了视图机制,就可以在设计数据库应用系统时,对不同的用户定义不同的视图,使机密数据不出现在不应看到这些数据的用户的视图上,这样就由视图的机制自动提供了对机密数据的安全保护功能。修改原有的列定义有可能会破坏已有数据第六节数据控制n由DBMS提供统一的数据控制功能是数据库系统的特点之一。数据控制也称为数据保护,包括数据的安全性控制、完整性控制、并发控制和恢复。SQL语言提供了数据控制功能,能够在一定程度上保证数据库中数据的完全性、完整性,并提供了一定的并发控制及恢复能力。数据库的完整性是指数据库中数据的正确性与相容性。并发控制是指当多

33、个用户并发地对数据库进行操作时,对它们加以控制、协调,以保证并发操作正确执行,并保持数据库的一致性。恢复指的是当发生各种类型的故障,使数据库处于不一致状态时,将数据库恢复到一致状态的功能。数据库的安全性是指保护数据库,防止不合法的使用所造成的数据泄露和破坏。 修改原有的列定义有可能会破坏已有数据一、授权nSQL语言用GRANT语言向用户授予操作权限。其语义为将对指定操作对象的指定操作权限授予指定的用户。对数据库可以有建立表的权限,该权限属于DBA,可由DBA授予普通用户,普通用户拥有此权限后可以建立基本表,基本表的属主(owner)拥有对该表的一切操作权限。接受权限的用户可以是一个或多个具体用

34、户,也可以是PUBLIC,即全体用户。 修改原有的列定义有可能会破坏已有数据二、收回权限n授 予 的 权 限 可 以 由 DBA或 其 他 授 权 者 用REVOKE语句收回,REVOKE语句的一般格式为:nREVOKE , ON FROM ,;修改原有的列定义有可能会破坏已有数据nSQL提供了非常灵活的授权机制。用户对自己建立的基本表和视图拥有全部的操作权限,并且可以用GRANT语句把其中某些权限授予其他用户。被授权的用户如果有“继续授权”的许可,还可以把获得的权限再授予其他用户。DBA拥有对数据库中所有对象的所有权限,并可以根据应用的需要将不同的权限授予不同的用户,而所有授予出去的权利在必

35、要时又都可以用REVOKE语句收回。修改原有的列定义有可能会破坏已有数据第七节嵌入式SQLnSQL语言是面向集合的描述性语言,具有功能性强、效率高、使用灵活、易于掌握等特点。但是SQL语言是非过程性语言,本身没有过程性结构,大多数语句都是独立执行,与上下文无关,而绝大多数完整的应用都是过程性的,需要根据不同的条件来执行不同的任务。为了解决这一问题,SQL语言提供了两种不同的使用方式:一种是在终端交互式方式下使用SQL语言,另一种是将SQL语言嵌入到某种高级语言中使用,利用高级语言的过程性结构来弥补SQL语言在实现复杂应用方面的不足,这种方式下使用的SQL语言称为嵌入式SQL(embedded

36、SQL),而嵌入SQL的高级语言称为主语言或宿主语言。修改原有的列定义有可能会破坏已有数据一、嵌入式SQL的一般形式n在嵌入式SQL中,为了能够区分SQL语句与主语言语句,所有SQL语句都必须加前缀EXEC SQL。SQL语言的结束标志则随主语言的不同而不同。在宿主程序中,任何允许出现可执行的高级语言语句的地方,都可以写可执行SQL语句;任何允许出现说明型高级语言语句的地方,都可以写说明性SQL语句。 修改原有的列定义有可能会破坏已有数据二、嵌入式SQL语句与主语言之间的通信n将SQL嵌入到高级语言中混合编程,SQL语句负责操纵数据库,高级语言语句负责控制程序流程。n数据库工作单元与源程序工作

37、单元之间通信主要包括: 修改原有的列定义有可能会破坏已有数据n(1)向主语言传递SQL语句的执行状态信息,使主语言能够据此控制程序流程。n(2)主语言向SQL语句提供参数。n(3)将SQL语句查询数据库的结果交给主语言进一步处理。n在嵌入式SQL中,向主语言传递SQL执行状态信息主要用SQL通信区(SQLCA)实现;主语 言 向 SQL语 句 输 入 数 据 主 要 用 主 变 量(host variable)实现;SQL语句向主语言输出数据主要用主变量和游标(cursor)实现。修改原有的列定义有可能会破坏已有数据1、SQL通信区nSQL语句执行后,系统要反馈给应用程序若干信息,主要包括描述

38、系统当前工作状态和运行环境的各种数据,这些信息将送到SQL通信区SQLCA中,应用程序从SQLCA中取出这些状态信息,据此决定接下来执行的语句。SQLCA是一个数据结构。 修改原有的列定义有可能会破坏已有数据2、主变量n嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据。把在SQL语句中使用的主语言程序变量简称为主变量。主变量根据其作用的不同,分为输入主变量和输出主变量。输入主变量由应用程序对其赋值,SQL语句引用;输出主变量由SQL语句对其赋值或设置状态信息,返回给应用程序。一个主变量可能既是输入主变量又是输出主变量。修改原有的列定义有可能会破坏已有数据n一个主变量可以附带一个人选的

39、指示变量(indicator variable)。所谓指示变量是一个整型变量,用来“指示”所指主变量的值或条件。输入主变量可以利用指示变量赋空值,输出主变量可以利用指示变量检测出是否空值,值是否被截断。修改原有的列定义有可能会破坏已有数据3、游标nSQL语言与主语言具有不同数据处理方式。SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录,而主语言是面向记录的,一组组变量一次只能存放一条记录。所以仅使用主变量并不能满足SQL语句向应用程序输出数据的要求,为此嵌入式SQL用游标来协调这两种不同的处理方式。游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。修改原有的列定义有可能会破坏已有数据三、不用游标的SQL语句n所有说明性语句及数据定义与控制语句都不需要使用游标。它们是嵌入式SQL中最简单的一类语句,不需要返回结果数据,也不需要使用主变量。 修改原有的列定义有可能会破坏已有数据

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 销售管理

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号