您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Oracle数据库培训_2
1.OracleSQL基础RainnyZhong138265865711.1.OracleSQL简介Dr.E.F.Coddpublishedthepaper,ARelationalModelofDataforLargeSharedDataBanks,inJune1970intheAssociationofComputerMachinery(ACM)journal,CommunicationsoftheACM.Codd'smodelisnowacceptedasthedefinitivemodelforrelationaldatabasemanagementsystems(RDBMS).Thelanguage,StructuredEnglishQueryLanguage(SEQUEL)wasdevelopedbyIBMCorporation,Inc.,touseCodd'smodel.SEQUELlaterbecameSQL(stillpronouncedsequel).In1979,RelationalSoftware,Inc.(nowOracleCorporation)introducedthefirstcommerciallyavailableimplementationofSQL.Today,SQLisacceptedasthestandardRDBMSlanguage.SQLStandardsOracleCorporationstrivestocomplywithindustry-acceptedstandardsandparticipatesactivelyinSQLstandardscommittees.Industry-acceptedcommitteesaretheAmericanNationalStandardsInstitute(ANSI)andtheInternationalStandardsOrganization(ISO),whichisaffiliatedwiththeInternationalElectrotechnicalCommission(IEC).BothANSIandtheISO/IEChaveacceptedSQLasthestandardlanguageforrelationaldatabases.WhenanewSQLstandardissimultaneouslypublishedbytheseorganizations,thenamesofthestandardsconformtoconventionsusedbytheorganization,butthestandardsaretechnicallyidentical.ThelatestSQLstandardwasadoptedinJuly1999andisoftencalledSQL:99.Theformalnamesofthisstandardare:•ANSIX3.135-1999,DatabaseLanguageSQL,Parts1(Framework),2(Foundation),and5(Bindings)•ISO/IEC9075:1999,DatabaseLanguageSQL,Parts1(Framework),2(Foundation),and5(Bindings)1.1.1.OracleSQL的处理过程1.1.1.OracleSQL的处理过程处理SQL语句处理查询:•语法分析:–搜索同一语句–检查语法、对象名和权限–锁定语法分析过程中使用的对象–创建和存储执行计划•绑定:获取变量值•执行:处理语句•提取:将结果行返回用户进程处理DML语句:•语法分析:与处理查询时的语法分析阶段相同。•绑定:与处理查询时的绑定阶段相同。•执行:–如果数据库缓冲区高速缓存中不存在某些数据块和还原块,服务器进程就从数据文件将它们读入数据库缓冲区高速缓存。–服务器进程锁定要进行修改的行。还原块用于存储数据的前像,以便在需要时回退DML语句。–数据块记录数据的新值。–服务器进程将数据的前像记录到回退块中,并更新数据块。这两种更改都是在数据库缓冲区高速缓存中进行的。数据库缓冲区高速缓存中所有已更改的块都标记为灰数据缓冲区,即与磁盘中相应的块不同的缓冲区。–DELETE或INSERT命令的处理使用类似的步骤。DELETE命令的前像包含已删除行中的列值,而INSERT命令的前像中包含行的位置信息。处理DDL语句:DDL(数据定义语言)语句的执行与DML(数据操纵语言)语句和查询的执行不尽相同,因为成功执行DDL语句需要对数据字典具有写权限。对于这些语句,语法分析阶段实际上包括分析、数据字典查找和执行。事务处理管理SQL语句、会话管理SQL语句和系统管理SQL语句在语法分析和执行阶段处理。要重新执行这些语句,再次进入执行阶段即可。1.2.OracleSQL基本元素•Datatypes•Literals•FormatModels•Nulls•Pseudocolumns1.2.1.OracleSQL数据类型•OracleBuilt-inDatatypes•ANSI,DB2,andSQL/DSDatatypes•User-DefinedTypes•Oracle-SuppliedTypes1.2.1.2.Oracle内置数据类型1.2.1.2.Oracle内置的数据类型概览•CharacterDatatypes------CHARDatatype------NCHARDatatype------NVARCHAR2Datatype------VARCHAR2Datatype•NUMBERDatatype•LONGDatatype•DatetimeandIntervalDatatypes------DATE------TIMESTAMP------TIMESTAMPWITHTIMEZONE------TIMESTAMPWITHLOCALTIMEZONE•RAWandLONGRAWDatatypes•LOB------BLOB------CLOB------NCLOB•ROWIDDatatype•BFILEDatatype1.2.2.OracleSQL伪列•CURRVALandNEXTVAL---sequence.CURRVAL---sequence.NEXTVAL•LEVELSELECTemployee_id,last_nameFROMemployeesWHERE(employee_id,LEVEL)IN(SELECTemployee_id,2FROMemployees)STARTWITHemployee_id=2CONNECTBYPRIORemployee_id=manager_id;•ROWIDSELECTROWID,last_nameFROMemployeesWHEREdepartment_id=20;•ROWNUMSELECT*FROMemployeesWHEREROWNUM10;1.3.约束1.3.1.数据完整性1.3.1.数据完整性数据完整性是指数据库中的数据符合业务规则。维护数据完整性共有三种主要方法:•应用程序代码•数据库触发器•声明完整性约束具体使用上述哪种方法映射业务规则是设计时应考虑的问题。而数据库管理员主要关心的是实施设计人员选择的方法,并在完整性需求和性能要求之间取得平衡。应用程序代码既可作为数据库中的存储过程实现,也可作为在客户端上运行的应用程序实现。本课着重讲述完整性约束的使用。数据库触发器:数据库触发器是PL/SQL程序,在表上发生事件(如插入或更新列)时执行。可以启用或禁用触发器,即可以设置触发器在事件发生时执行,或者将触发器设置为不执行(即使已定义)。通常情况下,创建数据库触发器只是为了强制应用不能定义为完整性约束的复杂业务规则。注:数据库触发器在其它Oracle课程中讲述。完整性约束:完整性约束是执行业务规则的首选机制,这是因为它可以:•改善性能•易于声明和修改,不需要进行大量编码•集中管理规则•使用灵活(启用或禁用)•在数据字典中完全文档化以下部分解释完整性约束的行为,并论述Oracle服务器如何执行这些完整性约束。1.3.2.约束的类型约束说明------------------------------------------------------------------------------------------NOTNULL指示出列不能包含空值UNIQUE指示一个列或列的组合是唯一的PRIMARYKEY指示一个列或列的组合作为表的主键FOREIGNKEY指示一个列或列的组合在引用完整性约束中作为外键CHECK指定表中的每一行必须满足的条件缺省情况下,表中的所有列均可以为空。空意味着没有值。NOTNULL约束要求表列必须包含值。UNIQUE关键字约束要求某列或一组列(关键字)中的值必须是唯一的。表中的任何两行在指定的一列或一组列中不能有重复的值。数据库中的每个表至多有一个PRIMARYKEY约束。PRIMARYKEY约束确保以下两种情况均为真:•表中的任何两行在指定列中没有重复的值。•主键列不包含NULL值•某列或一组列上的CHECK完整性约束要求,对于表的每一行,指定的条件必须为真或未知。虽然NOTNULL和CHECK约束并不直接要求DBA关注,但PRIMARYKEY、UNIQUE和FOREIGNKEY约束仍须进行管理,以确保高可用性和性能水平可接受。1.3.3.约束的状态1.3.3.约束的状态可以启用(ENABLE)或禁用(DISABLE)完整性约束。如果启用某个约束,则在数据库中输入或更新数据时,就会对数据进行检查。禁止输入不符合约束规则的数据。如果禁用某个约束,则可以在数据库中输入不符合约束规则的数据。完整性约束可处于以下状态之一:•DISABLENOVALIDATE•DISABLEVALIDATE•ENABLENOVALIDATE•ENABLEVALIDATEDISABLENOVALIDATE:不检查处于DISABLENOVALIDATE状态的约束。表中的数据(包括输入或更新的新数据)可以不符合约束所定义的规则。DISABLEVALIDATE:当约束处于此状态时,不允许对受约束的列进行任何修改。另外,约束上的索引将被删除并且禁用约束。注:如果约束可延迟,则不删除索引。ENABLENOVALIDATE:如果约束处于此状态,则不能输入违反约束的新数据。但是,表可能包含无效的数据,即数据违反约束。启用处于NOVALIDATE状态的约束对正在上载有效OLTP数据的数据仓库配置是非常有用的。ENABLEVALIDATE:如果约束处于此状态,则不能将违反约束的行插入到表中。但是,禁用该约束时,可以插入此类行。此类行称为该约束的例外。如果约束处于ENABLENOVALIDATE状态,则在禁用约束时输入的数据所引起的违反情况仍然存在。要将约束置于已验证状态,必须更新或删除违反约束的行。当某一约束由禁用状态更改为ENABLEVALIDATE时,将锁定表并对表中的所有数据进行一致性检查。这可能会引起DML操作(如等待数据加载),因此,建议先从禁用状态转为ENABLENOVALIDATE,然后再转为ENABLEVALIDATE。这些状态之间的转换须符合以下规则:•除非指定NOVALIDATE,否则ENABLE表示VALIDATE。•除非指定VALIDATE,否则DISABLE表示NOVALIDATE。•VALIDATE和NOVALIDATE没有缺省的ENABLE和DISABLE状态。•当唯一键或主键从DISABLE状态转为ENABLE状态且没有现有索引时,将自动创建唯一索引。(如果索引可延迟,则将存在异常。)与此类似,当唯一键或主键从ENABLE转为DISABLE且是使用唯一索引启用时,则删除该唯一索引。•当任何约束从NOVALIDATE状态转为VALIDATE状态时,必须检查所有的数据。但是
本文标题:Oracle数据库培训_2
链接地址:https://www.777doc.com/doc-12341 .html