第一章Oracle数据库基础Oracle的SQL*PLUS是设计所有应用系统的基础工具。要想将应用系统设计成一个健壮的、性能优越的系统。最关键的是要理解RDBMS的真正含义和结构,理解OracleSQL*PLUS的特点和核心,弄清关系数据库与桌面数据库的差别。比如理解数据的完整性、一致性、索引、视图等。只有这样才能设计出符合Oracle特点的应用系统。从而保证系统在提供使用后不会出现一致性、性能等问题。§1.1理解关系数据库系统(RDBMS)CODASYL(数据系统语言协会)是数据库任务组(DatabaseTaskGroup,DBTG)创建的一种数据库标准,这是一种基于COBOL的网络数据库标准。§1.1.1关系模型一个描述两个集合的元素如何相互联系或如何一一对应的数学概念,对于数据库来说,关系只是一个带有一些特殊属性的表。所以有:�数据的基础项是关系�在这些表上的操作只产生关系一个关系表必须符合某些特定条件,才能成为关系模型的一部分�储存在单元中的数据必须是原子的。每个单元只能存储一条数据,叫信息原则(InformationPrinciple)。如果存储多条则违反信息原则。特舒情况下可能需要违反信息原则。�储存在列下的数据必须具有相同的数据类型。�每一行是唯一的(没有完全相同的行)。�列没有顺序。�行没有顺序�列有一个唯一性的名称。关系模型的另一个是完整性原则。它包括实体完整性原则(Entityintegrityrule)和引用完整性原则(Referentialintegrityrule),如:�主键(Primarykey)是能唯一标识行的一列或一组列的集合。�由多个列构成的主键称为连接键(Concatenatedkey)、组合键(Compoundkey),或称作为复合键(Compositykey)。另外就是外部键(Foreignkey)是一个表中的一列或一组列,它们在其它表中作为主键而存在。一个表中的外部键被认为是对另外一个表中主键的引用。实体完整性原则简洁地表明主键不能全部或部分地空缺或为空,引用完整性原则简洁地表明一个外键必须为空或者它所引数据库培训教材培训ORACLE请联系-1370509157516用的主键当前存在值相一致。§1.1.2Codd十二法则Oracle数据库系统是一个完美的完全符合数据库技术的关系数据库系统。要想你的应用设计按照数据库原理来进行,最重要的就是理解Oracle的结构、语句和命令。Codd提出的十二条法则在Oracle系统中都可以找到:1)信息法则。2)授权存储法则,每一个数据项都通过“表名+行主键+列名”的组合形成访问。3)必须以一致的方法使用空值。4)一个活跃的、在线数据字典应作为关系型表被储存5)必须提供数据存取语言进行存取访问。6)所有能被更新的视图应当是可被更新的。7)必须有集合级的插入、更新和删除。8)物理数据的独立性。即应用不依赖物理结构。9)逻辑数据的独立性。如果一个表被分成两个部分,则应用视图连接在一起,以便不会对应用产生影响。10)完整性的独立性。完整性规则应该储存在数据字典中。11)分布独立性。一个数据库即使被分布,也应该能工作。12)非破坏性原则。如果允许低级存取,一定不能绕过安全性和完整性原则。§1.2关系数据库系统(RDBMS)的组成RDBMS由两部分组成,即数据库系统内核(软件)和数据字典(内核用于管理数据库系统的数据结构)两部分。§1.2.1RDBMS内核RDBMS就是用来控制数据访问的操作系统。它的任务是按照一定的规则存储数据、检索数据及保护数据。§1.2.2数据字典概念数据自动存放数据库中所有对象(如表,索引,视图等)所需的信息。Oracle8i的数据字典是存放数据库系统信息的一组表,从数据字典中的信息可以确认数据库中数据对象的基本信息及存放位置。数据库培训教材培训ORACLE请联系-1370509157517§1.3SQL、SQL*Plus及PL/SQL下面用简单的语言解释Oracle的常用产品所包含的SQL*PLUS和PL/SQL的关系。§1.3.1SQL和SQL*PLUS的差别SQL是标准结构查询语言,而SQL*PLUS实际是包括标准的SQL和Oracle公司的一些命令组成的产品,因而Oracle公司将其取名为SQL*PLUS。下面是它们的解释。1.SQL(StructuredQueryLanguage)SQL有许多关键字,以下语句是常用于开头的语句:AlterInsertAuditLockCommitNoauditCommentRenameCreateRevokeDeleteSelectDropUpdateGrantValidate注:1.Oracle的SQL缓冲区一次只能存放一条SQL命令;2.Validate(使生效)在oracle中跟Enable一起用,但可以省去Validate,所以许多资料都不介绍Validate的用法。其语法如:Enable{[Validate][Novalidate]}{[UNIQUE][PRIMARYKEY]...}...2.SQL*PLUS除SQL外,SQL*PLUS还包括称为SQL*PLUS命令的附加命令,这些命令主要用于形成复杂报表,编辑SQL命令,提供帮助信息,维护系统等。SQL*PLUS包括的命令如下:@ConnectHostSet#CopyInputShow$DefineListSpool/DelNewpageSqlplusAcceptDescribePauseStartAppendDisconnect数据库培训教材培训ORACLE请联系-1370509157518QuitTimingBreakDocumentRemarkTtitleBtitleEditPromptUndefineChangExecutePrintSaveClearExitRunColumnGetRunformComputeHelp3.DDL(DataDefineLanguage)对于结构查询语言(有时称SQL命令),可以将它们分成两组,一组是数据定义语言(DDL);另一组是数据操纵语言(DML)。其中用于数据定义的语言如下:Alterprocedure重编译过程Altertable修改表的属性Analyze统计数据库对象性能值AltertableaddConstraint对已有的表加约束Createtable建立表结构Createindex建立索引Droptable删除表实体及相关的索引Dropindex删除索引Grant授权给用户或角色Truncate删除表中的所有行Revoke从用户或角色收回权限4.DML(DataManipulationLanguage)对于结构查询语言的另一组是数据操纵语言(DML)。DML其中用于数据操纵的命令如下:InsertDeleteUpdateSelectCommitworkRollback数据库培训教材培训ORACLE请联系-1370509157519§1.3.2PL/SQL语言PL/SQL是OracleRDBMS(Oracle6之后版本)的一个组成部分,PL是“过程化语言(ProcedureLanguage)”的缩写。PL/SQL语言是在SQL语言中结合了结构化过程语言成分的准第四代语言。使用PL/SQL的目的:由于大多数PL/SQL是在服务端来运行,这样可减少由客户端运行程序时所需的网络数据流量。可以使用PL/SQL的地方:�PL/SQL可以单独进行程序的编写,完成一般的处理功能;�在高级语言中可嵌入PL/SQL块;�在4GL中可以嵌入PL/SQL块;�在PL/SQL程序中可以嵌入HTML和XML。§1.4登录到SQL*PLUS我们创建任何对象,如创建表、索引等都需要连接到Oracle中,这里用“登录”主要是Oracle的界面提供的是Login这样的叫法。其实就是连接的意思。在Client/Server结构下,Oracle提供两种方式连接SQL*PLUS,其中SQL*NETV2.x版本(目前版本不再使用SQL*NETV2.x)提供在字符方式下连接到SQL*PLUS,SQL*NETV2.x版本提供在图形方式(Window)使用,目前版本的ORACLE8/8i都使用NET8连接.(NET8不再支持字符终端)§1.4.1UNIX环境在UNIX下,要确保客户端或服务器端与Oracle服务器系统进行连接,必须保证tnsnames.ora和listener.ora两个参数文件的正确配置。详细的配置解释在DBA章节里解释。下面是tnsnames.ora和listener.ora两个参数文件的内容显示。1.tnsnames.ora参数文件:INST1_HTTP=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbsvr)(PORT=1521)))(CONNECT_DATA=(SERVER=SHARED)(SERVICE_NAME=s450)(PRESENTATION=))数据库培训教材培训ORACLE请联系-1370509157520)EXTPROC_CONNECTION_DATA=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))(CONNECT_DATA=(SID=PLSExtProc)(PRESENTATION=RO)))S450=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbsvr)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=s450)))2.listener.ora参数文件:LISTENER=(DESCRIPTION_LIST=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbsvr)(PORT=1521)))(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))))SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME=PLSExtProc)(ORACLE_HOME=/home/oracle/app/oracle/product/8.1.7)(PROGRAM=extproc))(SID_DESC=数据库培训教材培训ORACLE请联系-1370509157521(GLOBAL_DBNAME=s450)(ORACLE_HOME=/home/oracle/app/oracle/product/8.1.7)(SID_NAME=s450)))如果安装后已经正确地对上面的两个参数文件进行配置,则可以按照下面步骤进行登录:1)先启动服务器端监听器:lsnrctlstart2)用下面命令显式登录到SQL*PLUS:$sqlplususername/password或$SQLPLUSusername/password@connect_string3)用下面命令隐式登录到SQL*PLUS:$sqlplus[enter]Enterusername:scottEnterpassword:******§1.4.2WindowsNT和WINDOWS/2000环境在NT/2000环境下,要使客户端能与Oracle服务器进行连接,tnsnames.ora和listener.ora参数文件的配置如下:1.tnsnames.ora参数文件:ORA816.TAIJI.COM.CN=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=zhao)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ora816)))EXTPROC_CONNECTION_DATA.TAIJI.COM.CN=(DESCRIPTION