Oracle培训课程讲稿

上传人:e****s 文档编号:40846332 上传时间:2021-11-17 格式:DOC 页数:43 大小:317KB
收藏 版权申诉 举报 下载
Oracle培训课程讲稿_第1页
第1页 / 共43页
Oracle培训课程讲稿_第2页
第2页 / 共43页
Oracle培训课程讲稿_第3页
第3页 / 共43页
资源描述:

《Oracle培训课程讲稿》由会员分享,可在线阅读,更多相关《Oracle培训课程讲稿(43页珍藏版)》请在装配图网上搜索。

1、Oracle 基 础 知 识 讲义Oracle 基础知识讲义一、绪论结合 Open3000系统的实际操作环境,本讲义主要讲解以下在 OPEN3000 系统中经常会用到的内容:1、 Oracle 数据库结构简介简要介绍 Oracle 数据库系统内部的结构原理及其相互关系。2、 启动和关闭数据库介绍启动和关闭Oracle 数据库的常用方式以及需要注意的事项。3、 SQL 语言入门概要介绍 Oracle 中的专用 SQL 语言 Sql*plus 的基本概念,数据类型、常用语句、常用对象。不准备介绍事务、触发器和Sql*plus 中的编程语言PL/SQL。4、 Sql*plus 编辑工具的使用介绍 O

2、racle 中用于输入和运行SQL 语句的操作环境 Sql*plus 的使用。5、 Oracle 的用户管理简介简单介绍 Oracle 中用户和用户权限的基本概念,以及如何在 Oracle 中创建、修改和删除用户。6、 使用 Oracle 的导出实用程序简单介绍利用 Oracle 的导出实用程序 exp 进行数据备份的常用方法和注意事项。7、 使用 Oracle 的导入实用程序简单介绍如何利用 Oracle 的导入实用程序 imp 对通过 exp 工具备份好的数据进行恢复。二、Oracle 数据库结构Oracle 数据库是个极其复杂的软件系统。为了给以后章节打好基础,本章简要介绍 Oracle

3、 数据库系统结构。从最大的层次上, Oracle 数据库系统可以分成以下三部分:a、数据库文件( Database Files)b、数据字典( Data Dictionary)c、数据库实例( Oracle Instance)数据库文件是 Oracle 中需要用到的一系列外存文件的统称,这里外存可以是硬盘、阵列或磁带。数据字典用于存放 Oracle 系统本身所需要用到的有关信息,比如目前数据库中注册了多少用户,创建了多少表,占用了多少空间等等。因为数据字典中保存的信息非常重要,因此用户只能以只读的方式访问数据字典,而不能对其进行修改。1Oracle 基 础 知 识 讲义数据库实例实际上就是我们

4、通常所说的数据库管理系统( DBMS ),它由一组进程和内存中的一些结构组成。用于完成数据库不同的处理需要。1、 数据库文件数据库文件是个物理概念,对应于操作系统中实际存在的文件,主要包括初始化参数文件、数据文件、控制文件和重做日志文件等。1.1、初始化参数文件初始化参数文件 initsid.ora ,用于存储 Oracle 系统中的绝大多数配置参数。它是一个文本文件,可以进行手工编辑修改。顾名思义,初始化参数文件主要供数据库实例启动时访问。从中得到必需的启动配置数据。1.2、控制文件控制文件是数据库实例启动之后需要经常访问的内部二进制文件。 Oracle 一般有两个或者更多的控制文件, 名称

5、依次为 control01.ctl 、control02.ctl 、 每个控制文件的内容完全相同,如果一个文件损坏, Oralce 会自动使用另外一个控制文件。如果控制文件全部损坏, Oracle 将不能工作。如果 Oracle 发现一个控制文件已经在 Oracle 系统之外被修改过,它会认为该控制文件已经损坏。因此绝对不能手工对控制文件进行编辑。1.3、重做日志文件重做日志文件用于记录数据库中被改变的数据信息,以供将来可能的数据恢复操作时使用。 Oracle 一般有两个或者更多的重做日志文件,名称依次为 redo01.log、redo02.log、 同控制文件一样,重做日志文件也不能进行手工

6、编辑。1.4、数据文件数据文件是 Oracle 中最主要的外存文件。用于存放 Oracle 系统中绝大部分的数据信息。 Oracle 中全部的用户、表、视图和索引等数据库实体都存储在数据文件上。同数据文件密切相关的还有一个表空间的概念,表空间是一个逻辑上的外存空间,一个表空间可以由一个或多个数据文件组成。而一个数据文件只能属于一个表空间。有了表空间这一逻辑概念,在创建数据库实体时就不需要具体指定其物理存储位置(数据文件),只需要指定一个表空间就可以了。事实上, Oracle 也不允许用户在创建实体时指定具体的数据文件,只能指定表空间。Oracle 中的表空间主要有三类:系统表空间、用户表空间和

7、临时表空间。系统表空间和临时表空间是 Oracle 安装之后自动创建好的。其中系统表空间用来存放 Oracle 系统的数据字典,临时表空间用来存放日常工作时产生的临时数据。在通常情况下,系统表空间名称为 SYSTEM ,由数据文件 system01.dbf 组成;临时表空间名称为 TEMP ,由数据文件 temp01.dbf 组成。2Oracle 基 础 知 识 讲义用户表空间用于存放用户自己的数据,由用户负责创建。名称可以在满足 Oracle 命名规则的前提下任意选取。虽然系统表空间中也可以存放用户自己的数据,但建议用户数据最好全部存放在用户表空间上,以便与系统数据字典分开,减少冲突的可能性

8、。2、 数据字典数据字典是 Oracle 系统的重要组成部分。 它存放了 Oracle 数据库需要用到的绝大部分信息。数据字典实质上是一些表和视图的集合,这些表和视图都存放在系统表空间 SYSTEM 上,用户只能以只读的方式访问,不能对其进行修改。数据字典中主要包括了以下重要内容: 数据库中全部数据库实体(表、视图等)的相关信息 数据库当前空间使用情况 各类完整性约束的信息 数据库中用户、角色的相关信息3、 数据库实例数据库实例是 Oracle 系统用来管理数据库各类处理的一组进程和内存结构 的 集 合 。 在 更 多 的 情 况 下 , 数 据 库 实 例 也 被 叫 做Oracle 服 务

9、(OracleService)。在 Oracle 服务没有被启动之前, 用户是无法访问数据库的。Oracle 服务成功启动之后,在操作系统的后台就有一组进程在活动,同时在内存中也申请了一块特定结构的空间。Oracle 服务中最重要的后台支持进程有以下五个: 数据库复写器( DBWR )DBWR 负责把数据库缓冲区中发生改变的数据(脏数据)写回外存数据文件中。是唯一一个把数据写入数据库的进程。进程监控器( PMON)PMON 负责当用户会话异常结束并且用户自己没有清除会话时,执行清除工作。失败的会话所占用的系统资源会被 PMON 清理并释放出来。 系统监控器( SMON )SMON 在 Orac

10、le 服务启动时检查和修复所有的数据库文件,保证其正确和一致。在 Oracle 服务正常工作时, SMON 负责定时检查整个系统,找出并修复错误。 日志复写器( LGWR )LGWR 负责数据库文件中重做日志文件的管理,保证重做日志能够可靠高效的进行。 校验点( CKPT )CKPT 负责监测所有的数据库文件, 保证数据库文件中保存的信息的3Oracle 基 础 知 识 讲义一致性,确保数据库文件之间的同步。常用的数据字典:v$bgprocess 查看全部的后台进程select * from v$bgprocess where paddr <>00; 查看当前正在工作的后台进程可以

11、查看当前库是否异常比如如果 pmon 正在工作,说明存在异常的会话。v$session查看当前全部的会话 (库连接 )内存区:SGA 区(System Global Area 系统全局区 ):库实例启动时 Oracle 向操作系统申请的一块基本内存区域。PGA 区(Program Global Area 进程全局区 ):一个 Oracle 进程启动时 Oracle 为其分配的内存区域。SGA 区的组成:1、共享池 (Shared Pool)用于缓存最近执行过的 SQL 语句和 PL/SQL 代码段用于缓存最近使用过的数据字典数据由两部分组成库缓存 (Library Cache)用于缓存语句和代

12、码段数据字典缓存 (Data Dictionary Cache)用于数据字典数据两者的大小比例由 Oracle 自行管理,无法人工指定,共享池分配的合适可以加快语句执行时的速度,从而提高性能。2、库高速缓存 (Database Buffer Cache)缓存最近使用过的数据文件中的数据块。库高速缓存分配的合适可以降低物理 I/O 的发生次数,提高数据存取的速度,从而提高性能。3、重做日志缓存 (Redo Log Buffer)缓存库高速缓存中数据发生改变了的数据块,即脏数据。主要用于事务回滚 (Rollback) 时。分配一定的重做日志缓存可以加快事务回滚时的速度,但不需要很大,一般为 CPU

13、 数目乘以 128K,但最好不要低于 512K。4、大池 (Large Pool)大池是一块机动内存区域,当库比较繁忙,其他内存区域不足时,可以从大池中划取内存块来使用。大池不是 SGA 区的必要组成部分,但使用大池可以降低某块特定内存区域不足的出现概率,特别适合于库的使用情况不定,繁忙和空闲交替出现的场合。5、 Java池 (Java Pool)专为 Java 应用分配的内存区域, 9i 中默认值为 24MB 。因为 Open3000 中没有使用 Java应用,因此 Java池使用系统默认值即可。PGA 区:当一个会话服务进程或者一个Oracle 后台进程启动时, Oracle 为其分配4O

14、racle 基 础 知 识 讲义的内存区域。当该进程终止时,Oracle 收回这部分内存区域。一个进程的PGA区只能由该进程使用。常用的数据字典:v$sql查看最近执行过的SQL 语句v$sgastat查看 SGA 区的当前状态show parameter sga三、启动和关闭数据库在 UNIX 环境下,启动和关闭数据库一般采用Oracle 的 Sql*plus 工具。在 OPEN2000 系统中,因为客户机一般不安装 Oracle 的客户端。因此启动数据库的方式主要是客户机远程登录到服务器, 在服务器上运行 Sql*plus 来启动数据库。下面以一个实例来说明启动和关闭数据库的过程:前提条件

15、:数据库名称为 o2000e,数据库中存在一个用户 test,密码为 test000。Test用户具有能够启动和关闭数据库的sysdba的权限,数据库处于关闭状态。1、启动一个终端窗口,键入以下命令:sqlplus /nolog来启动 Sql*plus 。此时会出现提示符SQL>2、在 SQL>提示符下键入:connect test/test000o2000e as sysdba连接 o2000e数据库,连接成功之后,屏幕上显示Connected。3、在 SQL>提示符下键入:startup启动 o2000e数据库,启动数据库一般需要十几秒的时间, 启动成功之后,屏幕上会显示

16、 o2000e 数据库的一些空间分配信息,此时数据库就可以正常使用了。一些说明:第 1 步的 /nolog 参数表示只启动 Sql*plus,不进行连接。如果不加这个参数的话,就需要依次输入用户名,密码,数据库名和连接身份。不如在第2 步中用 connect 命令一次全部输入来得方便。第 2 步的 as sysdba参数表示 test 用户的连接身份为数据库管理员,该参数必须要加,否则第 3 步的 startup 命令就会因为权限不足而无法启动数据库。除了通过终端窗口启动数据库之外, 利用 Oracle的 Sql*plus 工具和 DBA Studio 工具也可以进行启动数据库的操作。 其中

17、Sql*plus 同终端窗口一样采用命令行方式。步骤也相同。而 DBA Studio 采用图形界面,操作比较简单直观,但速度较慢。5Oracle 基 础 知 识 讲义要关闭数据库,需要用到shutdown 命令。接着上面的例子,在SQL>提示符下键入:shutdown immediate关闭 o2000e 数据库,关闭数据库也需要十几秒的时间,关闭成功之后,屏幕上显示相关提示信息,此时数据库被正常关闭。Shutdown 命令具有四种参数Normal: 等待所有已连接的会话session主动退出之后再关闭数据库。Immediate:等待所有已连接的会话执行完当前的SQL 语句之后关闭数据库

18、。Transaction:等待所有已连接会话执行完当前事务之后关闭数据库。Abort :不做任何等待,立刻关闭数据库。其中 Normal 参数一般不用,因为需要等待其他用户主动退出,因此何时关闭数据库是无法预料的。一般经常使用的是 immediate 和 transaction 参数。对 OPEN2000 系统来说,因为没什么用户自定义的处理, 因此使用 immediate 参数来关闭数据库就可以了。需要特别提醒的是,轻易不要用 abort 参数来关闭数据库, 使用 abort 参数时,因为数据库被立刻关闭, 如果此时有用户正进行数据更新操作, 数据库中的内容将无法预料。只用当数据库已经崩溃,

19、无法正常关闭时,才使用 abort 参数来强制关闭数据库,就像电脑上只用死机时才按 reset键一样。同样,利用 Oracle 的 Sql*plus 工具和 oemapp console工具也可以进行关闭数据库的操作。最后总结一下启动和关闭数据库需要注意的3 个地方。1、连接数据库时必须加as sysdba参数,否则无法启动数据库。2、关闭数据库时使用immediate 或 transaction 参数,切勿使用abort 参数。3、在关闭服务器之前,如果数据库还未关闭,一定要先关闭数据库,再关闭服务器。否则可能导致数据库中数据无法预料。四、 SQL 语言入门1 SQL 的概念结 构 化 查

20、询 语 言 (Structure Query L anguage)是 目 前 主 流 数 据 库(Oracle,Sybase,SQLServer等)使用的一种命令式语言。 每种数据库支持的 SQL 语言都有各自的变化,这里介绍 Oracle 支持的 SQL 语言。SQL 语言的作用是a、查询、添加、修改和删除数据库中的各类数据;b、创建、修改和删除各类数据库对象;(对象是Oracle 中的一个术语,对象是数据库中能够存放数据的事物,比如表和视图就是两种最常见的对象,索引、过程、函6Oracle 基 础 知 识 讲义数和触发器等也是对象 )c、进行各类访问数据库数据和系统的操作。 比如上面启动和

21、关闭数据库的操作就属于这一类。 Connect、 startup 和 shutdown 实际上都是 SQL 命令。 Exit show user show parameterSQL 语言是外部程序或操作人员同 Oracle 数据库的唯一联系方法, 虽然目前很多图形用户界面常常使用户无法看到 SQL 的命令,但实际上在界面底下,外部程序还是使用 SQL 语言同 Oracle 打交道的。2 SQL 的类型SQL 语言主要分两大类: DDL( 数据定义语言 ) 和 DML( 数据操纵语言 )。i. DDL 语言DDL 语言用来创建、修改和删除各类数据库对象自身, 最常见的 DDL 语言中的命令是 C

22、reate(创建 ) 、 Alter( 修改 ) 和 Drop( 删除 ) 命令,TRUCATE 截去整表。不可撤销ii. DML 语言DML 语言用来查询、添加、修改和删除数据库中各类对象中存放的数据,最常见的 DML 语言中的命令是 Select(查询 )、 Insert(添加 )、Update(修改 )和 Delete(删除 )。回滚 rollback 和提交 commit3 SQL 语言支持的常用数据类型和定义格式每种数据库的 SQL 语言所支持的数据类型格式都不一样,这里只介绍Oracle 中的数据类型和定义格式。Oracle 中的数据格式不区分大小写。i. 定长字符串定义格式: c

23、har(n)n 为字符串长度n <= 2000说明:定长字符串的最大支持长度为2000,如果字符长度小于定义的长度,自动在末尾添加空格;如果不指定长度,默认为1。实例:name char(5) 定义了一个最多能够存储 5 个字符的对象 name。如果要利用其存储四个字符的字符串 ”hawk”,那么 name中实际存储的是 ”hawk“加一个空格。仍然占用 5 个字符的存储空间。ii.变长字符串定义格式: varchar2(n)n 为字符串最大的长度n <= 4000说明:变长字符串的最大支持长度为4000,没有默认值,必须指定长度。实例:name varchar2(5) 定义了一个

24、最多能够存储5 个字符的对象name。同定长字符串不同的是,利用 name 存储字符串 ”hawk”只会占用 4 个字符的存储空间。7Oracle 基 础 知 识 讲义定长串费空间,查询快变长串省空间,查询慢iii. 数字型数据定义格式: number(p, s) p-s 为数据的整数部分最大长度, s 为数据的小数部分最大长度,如果不指定 p 或 s,则由 Oracle 根据要存储的数据自动确定。 0<p<=38 0<=s<=12 p>=s说明:Oracle 统一使用关键字 number 来定义一切可能的数字型数据,这导致了 number 的使用方法很灵活。实例

25、:a number(7, 2) a 对象中可以存储的数字最多具有 5(7 2 = 5)位整数位, 2 位小数位。 12345.67 可以精确的存储在 a 中;12345.678 在 a 中被存为 12345.68;123456因为有 6 个整数位,无法存储在 a 中。-99999.99+99999.99补充:因为 number 的使用方法过于灵活,容易出错,在实际使用时通常比照一些常用的数字型类型定义来确定 p 和 s 的值。而不是随便指定。下面是一些常用的数字类型同 number 类型的对照关系表NUMBER(3)Unsigned char1 BYTE整数, -999-999NUMBER(5

26、)Short 短整型2 BYTES整数, -99999-99999NUMBER(10)int4 BYTES整数NUMBER(22,6)float单精浮点数NUMBER(38,12)double双精浮点数我们在定义 number 型数据时, p 和 s 的值按照上表来取,就不容易出错了。iv. 日期型数据定义格式: date说明:日期型数据的定义很简单,访问日期型数据则需要用到 SQL 语言的系统函数 to_date。实例: birthday date 定义了一个日期型的对象 birthday。如果要将”2003-8-19 12:00:00”这个时间存储在 birthday 中,要用到 to_d

27、ate 函数:birthday = to_date( 03-8-19 14:00:00,yy-mm-dd hh24:mi:ss ) Oracle 中 yyyy 表示年,mm 表示月,dd 表示日,hh24 表示小时,mi 表示分钟, ss 表示秒。yyyy-mm-dd hh24:mi:ss 为格式匹配字符串, Oracle 按照格式匹配字符串中的格式去得到 2003-8-19 12:00:00中存储的时间数据。4 SQL 语言中常用的操作符操作符中的英文不区分大小写。8Oracle 基 础 知 识 讲义i.算术操作符加减乘除+-*/ii.比较操作符等于 = 不等于 !=或<> 或=

28、 小于 < 大于 > 小于等于 <= 大于等于 >=在 A 和 B 之间 between A and B 双闭区间不在 A 和 B 之间 not betweenA and Biii.集合操作符属于 in 不属于 not in 存在 exists 不存在 not exists 类似 like(说明:这里 like 操作符支持两种通配符 % 和_,% *可匹配 0 到多个长度的字符串, _ ?匹配单个字符。比如:”ha% ”可以与 ”ha”、 ”haw”或”hawk ”匹配,而 ”ha_”只能匹配 ”haw”。)iv. 逻辑操作符与 AND 或 OR 取反 NOT 是否为空

29、 IS NOT NULL优先级 : 算术 >比较 >集合 >逻辑 可以用 ( )来改变优先级顺序空值同任何数字进行任何运算,结果均为false 或 05 常用 DDL 命令的使用DDL 命令中的英文不区分大小写i. 建表语句建表语句的作用是在数据库中新建一张关系表。建表语句语法:Create table 表名 (第一个域的定义语句 , 第二个域的定义语句 ,第 N 个域的定义语句 )中括号 中的内容为可选项,创建新表时,至少应包含一个域。可以为该表显式指定表空间,也可以使用当前的默认表空间。域定义语句语法:域名 数据类型DEFAULT 缺省值 NOT NULL 域上的约束 (

30、说明:约束是Oracle 中的术语。简单说来,在某些域上建立约9Oracle 基 础 知 识 讲义束,就是在这些域上建立了一种存储数据时的限制规则。比如,我们有一张职员信息表,上面有”职员 ID ”和”职员性别 ”两个表域。显然,不能有两个相同的职员ID ,职员性别也只能在”男 女 ”中选一个。为了能在职员信息表中反映出这两种限制,就要在职员 ID 和职员性别这两个表域上建立约束。Oracle 支持的约束有四类:i、主键约束 (Primary Key)主键约束所在的域中存储的数据必须具有唯一的非空值。在上面的例子中,因为每个职员必须有自己的ID ,而且不能与其他人相同。这样就可以在”职员 ID

31、 ”域上建立主键约束来反映这种限制规则。一张表只能有一个主键约束。ii 、 唯一约束 (Unique)唯一约束也要求所在域中存储的数据必须具有唯一性。 它同主键约束的区别是:唯一约束不要求数据必须为非空值。比如,在职员信息表中还有一个表域 ”职员电话 ”。不一定要求每个职员都有电话, 但有电话的职员之间的电话号码一定不能相同。这样就可以在”职员电话 ”域上建立唯一约束来反映这种限制规则。iii 、 范围约束 (Check)范围约束要求所在域中存储的数据必须在某一范围内。比如,在正常情况下, ”职员性别 ”域中的数据只能是 ”男 女”10Oracle 基 础 知 识 讲义中的一个,这样就可以在

32、”职员性别 ”域中建立范围约束来反映这种限制规则。iv 、 外键约束 (Foreign Key)外键约束用来反映两张表之间的限制规则。 比如我们另外有一张职员薪资表,上面也有一个 ”职员 ID ”域。显然,在职员薪资表的 ”职员 ID ”域中存储的职员 ID 必须是在职员信息表中已经有的职员ID 。否则就说明有人在冒领工资了。这样就可以在职员薪资表的”职员 ID ”域和职员信息表的 ”职员ID ”域之间建立外键约束来反映这种限制规则。可以在多个域上建立一个约束。还是以上面的例子来说明, 在职员信息表中还有一个”职员部门 ”域。假如公司有这样的规定:不同部门之间的职员, ID 号可以重复。只要同

33、一部门的职员ID 不同就可以了。这时,就需要在”职员部门 ”和”职员 ID ”两个域上建立主键约束来反映这种限制规则。)下面是一个综合的实例:Create table T (PK_TEST number(10) ,UNK_TEST1 varchar2(10) not null,UNK_TEST2 varchar2(10),CK_TEST number(3) default 100,FOR_DEL number(3),Constraint PK_TTT PRIMARY KEY(PK_TEST),Constraint UNK_TTT UNIQUE(UNK_TEST1,UNK_TEST2), Con

34、straint CK_TTT CHECK(99 <=CK_TEST) )表 T 具有五个表域,一个主键约束 PK_TTT ,一个唯一约束 UNK_TTT ,一个范围约束 CK_TTT 。表域 UNK_TEST1 为非空域,表域11Oracle 基 础 知 识 讲义CK_TEST 具有缺省值 100。ii. 修改表语句表的修改需要用到Alter 命令。1. 增加新的表域使用 Alter table 命令中的 ADD 关键字向表中添加一个新域Alter table T ADD(FK_TEST number(10) not null);上面的语句为表 T 添加了一个新的非空域FK_TEST。2

35、. 修改域的属性使用 Alter table 命令中的 MODIFY 关键字向表中添加一个新域Alter table T MODIFY(UNK_TEST2 varchar2(20);上面的语句将域 UNK_TEST2 的长度增加为 20 个字符。3. 删除一个域使用 Alter table 命令中的 DROP 关键字从表中删除一个域Alter table T DROP COLUMN FOR_DEL;上面的语句将域 FOR_DEL 从表 T 中删除。iii. 删表语句使用语句DROP TABLE 来删除一个表。表删除之后无法恢复,因此 DROP TABLE 命令必须小心使用。DROP table

36、 T;上面的命令将删除表T 以及 T 中的全部数据。iv. 与索引管理有关的语句索引是 Oracle 数据库中一种特殊的对象,它的主要目的是加快数据的读取速度。在表中适当添加索引可以提高检索效率。使用 CREATE INDEX语句建立索引。Create unique index index_1 ON T (FK_TEST);上面的语句在表T 的 FK_TEST 域上建立了索引index_1。使用 ALTER INDEX 命令改变索引名称Alter index index_1 RENAME TO new_index_1; 上面的语句将索引 index_1 的名称改为 new_index_1。使用

37、 DROP INDEX 命令删除索引Drop index new_index_1;上面的命令删除索引new_index_1。v. 与视图管理有关的语句视图实际上是存储在数据库中的查询语句。用户可以像访问表那样来访问视图。12Oracle 基 础 知 识 讲义视图的主要作用是1. 可以阻止用户察看表中的全部数据,增加数据库的安全性。2. 可以封装一些复杂的查询语句,方便用户使用。使用语句 CREATE OR REPLACE VIEW 来创建视图, REPLACE 参数表示如果视图已经存在,将覆盖其原有定义。Create or replace view view_tASSelect PK_TEST

38、, FK_TEST from T;上面的语句创建了视图 view_t,该视图只包含表 t 的 PK_TEST 和 FK_TEST 域,其他的域则被隐藏起来。修改视图的语句也是CREATE OR REPLACE VIEW 。Create or replace view view_tASSelect PK_TEST, FK_TEST, CK_TEST from T;上面的语句更新了视图 view_t 的定义,现在 view_t 中包含了表 t 的三个域了。使用语句 DROP VIEW 删除视图Drop view view_t;上面的命令删除了视图view_t。6 常用 DML 命令的使用i. 与查

39、询数据有关的语句Oracle 使用 SELECT 语句从数据库查询数据。Select语句的常用格式如下:SELECT column_listFROMtable_listWHEREconditionsORDER BY column_listColumn_list 表示希望查看的表域, 对于单张表,使用 * 号来表示该表的全部表域。 Table_list 表示包含 column_list 的全部表。 Conditions 指定了一个条件,使得 select 语句只返回满足该条件的值。 ORDER BY column_list 指定了将 select 语句返回的结果按照 column_list 排序

40、。1. 单张表的查询下面语句Select * from T;返回表 T 中的全部数据,注意这里* 表示察看表 T 的全部表域13Oracle 基 础 知 识 讲义上面的语句等价于Select PK_TEST,UNK_TEST1,UNK_TEST2,FK_TEST,CK_TEST from T;很明显使用 * 比较方便。如果不想返回全部数据,可以通过 WHERE 子句和 SELECT 的域列表限制条件。下面语句Select PK_TEST,FK_TEST from T where PK_TEST < 10; 只返回 PK_TEST 小于 10 的数据行的 PK_TEST 和 FK_TEST

41、 表域。可以使用 ORDER BY 来排序结果,使其更具有可读性Select * from T ORDER BY PK_TEST; 按照 PK_TEST 的升序排序结果 Select * from T ORDER BY PK_TEST DESC; 按照降序排序结果。2. 从多张表中查询数据从多张表中查询数据需要用到连接操作。假定有以下两张表:表 name_idnameidmarry1tom2mike3表 id_scoreidscore186278369现在希望同时得到名称和分数,需要使用以下查询Select name_id.name, id_score.scoreFrom name_id, i

42、d_scoreWhere name_id.id = id_score.id;上面的查询语句中, 带波浪线的部分就是一个连接操作。 它表示查询结果应该满足表 name_id 和表 id_score 的”id”域域值相等。 上面的语句在域名前加了表前缀 (表名 + .+ 域名 ),这是为了区分两张表中名称相同的域,比如 name_id.id 表示表 name_id 的域 id,而 id_score.id 则表示表 id_score 的域 id。另外,上面的语句较长, 不利于阅读, 可以通过使用表别名的方法来减少语句的长度。上面的语句等价于:Select a.name, b.scoreFrom na

43、me_id a, id_score bWhere a.id = b.id;这里分别为表 name_id 和 id_score 取了别名 a 和 b。使用别名的唯一目的就是为了减少语句长度,方便阅读。3. 嵌套查询简介14Oracle 基 础 知 识 讲义嵌套查询指在一个大查询中嵌套一个小查询, 大查询使用小查询的结果作为限制条件。嵌套查询是 SQL 语言中一块很复杂的部分,这里不打算详细介绍,只举一个实例来说明一下:Select constraint_name, table_name from user_constraintsWhere r_constraint_name IN(Select

44、constraint_name from user_constraintsWhere constraint_type='P' and(table_name='MNG_NODE_INFO') and constraint_type = R;上面的语句用来查询表 name_id 上被其他表所引用的全部外键和这些外键所在的表名。上面的例子中,带波浪线的部分是一个小查询,它返回的结果为表 sys_table_info 和 bay_info 的全部主键。大查询中的 WHERE 子句引用小查询的结果,使用了集合操作符 IN ,表示大查询的 SELECT语句将返回所有表 us

45、er_constraints的 r_constraint_name域在小查询结果之内的数据行。ii. 在表中添加数据的语句使用 INSERT INTO 命令为表中添加新数据。Insert into T values(1, hawk ,limin ,102,1);上面的语句在表 T 中添加了一行新数据。INSERT INTO 命令也可以使用子查询的结果作为返回值看下面的例子:Create table exp_test(col1 number(3);Insert into exp_test values(1);上面的语句创建了一张只有一个域的表 exp_test,并在其中添加了一行数据 : 1。现

46、在,使用以下命令:Insert into exp_testSelect * from exp_test;将发现,上面的命令每执行一次,exp_test 中的数据行将以 1,2,4,8,16, 32,.的速度增加。第一次执行时,Select * from exp_test返回一行数据,Insert into 在 exp_test插入一行,此时 exp_test 中有两行数据,第二次执行时, Select * from exp_test 返回两行数据, Insert into 将在exp_test中插入两行,此时 exp_test中有了四行数据,以此类推。在 OPEN2000 系统中,可能会经常需

47、要从一张表复制数据到另一张表。这里就稍微详细介绍一下表间数据复制的方法。15Oracle 基 础 知 识 讲义首先讲一下在两张结构完全相同的表之间如何复制数据,假设表 T1 和 T2 结构相同,现在想把 T1 的数据复制到 T2 中,可以通过如下 SQL 语句实现:Insert into T2 select * from T1;如果表的结构不同,或者只想复制特定的表域,这时就必须显式的指明需要复制的表域。假设数据库中存在以下两张表:OLD_FAC_INFOFAC_IDFAC_NAMEVLTY_ID1Fac_1100KV2Fac_210KV3Fac_35KVNEW_FAC_INFONEW_IDN

48、EW_NAMEVLLE_IDNEW_DESP现在想把表 old_fac_info 中 fac_id 表域的内容复制到new_fac_info 中的 new_id 表域,把 fac_name表域的内容复制到 new_name表域,把 vlty_id表域的内容复制到 vlle_id 表域。需要以下 SQL 语句: Insert into new_fac_info(new_id,new_name,vlle_id) Select fac_id,fac_name,vlty_id from old_fac_info;需要注意各表域的先后顺序不能颠倒。iii. 修改表中数据的语句使用 UPDATE 语句修改

49、表中的数据。下面的语句Update T set FK_TEST=2 Where PK_TEST=1;将表 T 中 PK_TEST=1 的数据行的 FK_TEST 域值修改为 2。注意 where 子句的使用,如果不加 WHERE 子句, update语句将修改表中的全部数据行,这可能引起很大的麻烦。iv. 删除表中数据的语句使用 DELETE 语句删除表中的数据。下面的语句Delete from T Where PK_TEST=1;将表中 PK_TEST=1 的数据行删除。这里 WHERE 子句的使用更须注意,如果不加的话, Delete from T 将删除表 T 的全部数据。五、Sql*p

50、lus 的使用Sql*plus 是一个允许输入和执行SQL 语句和 PL/SQL 程序的交互式工具。16Oracle 基 础 知 识 讲义利用 Sql*plus,用户可以生成简单的报表,启动和关闭数据库,进行数据库的导入和导出,查询数据库中的各类信息,创建表,视图,触发器等各类数据库对象。1 启动和关闭 Sql*plus实际上在上面的启动数据库中已经提到了如何在数据库关闭的情况下登录数据库。在数据库已经启动的情况下利用 Sql*plus 登录数据库就更简单了,只需要启动一个终端窗口,然后键入以下命令:sqlplus test/test000o2000e此时将出现提示符 SQL>。用户 t

51、est 已经登录到数据库 o2000e上,可以对其操作了。要关闭 Sql*plus ,只需要在 SQL>提示符下键入 exit 就可以退出 Sql*plus 环境,回到 UNIX 的终端窗口。需要特别注意的是,此时 test 用户虽不再连接到数据库 o2000e 上,但数据库本身仍处于启动状态。此时如果要关闭服务器,一定要再次登录到数据库,然后将其关闭,才能关闭服务器。2Sql*plus 的行编辑命令Sql*plus 的输入区本身是一个简单的文本编辑器, 具有一些基本的行编辑命令:L:列出当前缓冲区中的全部内容L n:列出当前缓冲区中的第n 行内容L n m:列出当前缓冲区中的第n 至

52、m 行内容C/x/y:把当前行中第一次出现的字符x 换成字符 yDEL:删除当前行DEL n:删除第 n 行DEL n m:删除第 n 至 m 行I:在当前行下插入一个新行A text:在当前行的末尾添加文本/:执行缓冲区中的内容如果用户输入的内容不多, 使用上面的命令一般能够满足需要。 否则可以利用 Sql*plus 的 EDIT 命令调用外部文本编辑器来进行编辑工作。 在 UNIX 下的默认编辑器一般为 vi ,Windows 下是写字板。下面以一个实例来说明 EDIT 命令的使用在 SQL>提示符下键入:SQL>edit屏幕显示 Wrote file afiedt.buf ,

53、同时启动 vi 编辑器窗口,此时当前缓冲区的内容显示在 vi 中,如果用户不需要,可以将其删除。17Oracle 基 础 知 识 讲义然后用户就可以利用 vi 来编辑语句,编辑完成之后,保存并退出 vi ,此时用户编辑的内容被装入缓冲区中并显示在屏幕上。最后,用户只需简单键入”/”即可执行编辑好的语句了。利用外部编辑器要比使用行编辑命令方便,尤其适用于长语句的情况。3 输入和执行 SQL 语句当 Sql*plus 遇到以下两种情况时,会认为用户输入的SQL 语句已经结束,可以执行了。i.在一行的结束处使用 ”;”ii.在单独一行的开始使用 ”/”需要注意的是,这两种方式不能一起使用,比如:SQ

54、L> select * from a;和SQL> select * from a2>/是正确的格式,而SQL> select * from a;/则不正确。对于上面利用外部编辑器的情况,因为使用的是第二种方式,所以编辑内容的最后不能加分号。六、Oracle 的用户管理简介Oracle 的用户管理直接关系到数据库的安全,本身是很复杂的,这里只是简单介绍一下一些相关的概念,以及与创建和管理用户有关的常用SQL命令。1 创建新用户创建用户的 SQL 命令是 create user。在创建用户之前,首先要确定以下几点:i. 决定用户的初始口令ii. 给新用户分配一个默认表空间i

55、ii. 给新用户分配一个临时表空间iv. 确定用户能够使用的默认表空间最大容量之后就可以创建新用户了。在数据库已经启动的情况下,在 UNIX 终端窗口下键入sqlplus test/test000o2000e进入 Sql*plus 的命令行界面。在SQL>提示符下输入以下SQL 命令:create user hawk identified by hawkdefault tablespace open_datatemporary tablespace open_temp18Oracle 基 础 知 识 讲义quota 10M on open_data;这条 SQL 语句创建了一个名为haw

56、k 的新用户,关键字 identified by 指定了 hawk 用户的初始密码为hawk,关键字 default tablespace指定了默认表空间为open_data,关键字 temporary tablespace 指定了临时表空间为open_temp,关键字 quota 指定了 hawk 用户在表空间 open_data上的使用限额,关键字 unlimited 表示无限制。只要 open_data上还有剩余空间, hawk 用户就可以使用。2 改变用户设置使用 alter user 命令可以更改现有用户的密码, 默认表空间,临时表空间,空间分配等用户配置。命令Alter user

57、hawk identified by new_hawk;将 hawk 用户的密码更改为 new_hawk。命令Alter user hawk default tablespace system;将 hawk 用户的默认表空间改为 system。命令Alter user hawk temporary tablespace system ;将 hawk 用户的临时表空间改为 system。命令Alter user hawk quota 50M on system ;将 hawk 用户在 system 表空间的配额改为 50M 。3 授予和撤销用户权限给用户授予权限,使用 grant 命令。下面是一些常用的权限列表: create session允许用户同数据库建立连接,是一个最基本的权限 create table允许用户创建表 create view允许用户创建视图 create procedure允许用户创建过程、函数或程序包 create trigger允许用户建立触发器19Oracle 基 础

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!