第六章oracle数据库基本操作•本章内容:•Oracle数据库的数据类型•Sql/plus环境•Oracle数据库基本操作–建立、删除、修改基本表–建立、删除、修改索引–建立、删除、修改视图本节内容•预备知识1:建表之前必须明确用户和模式的关系;•预备知识2:建表之前必须清晰管理表的策略;•Oracle数据库基本操作–建立、删除、修改基本表–建立、删除、修改索引–建立、删除、修改视图预备知识1:用户和模式的关系•Oracle9i数据中用方案(schema)来对逻辑对象进行管理。不同的数据库对象具有各自的特点和用途。•方案或模式、模式对象、用户的定义区别:–Aschema:acollectionofdatabaseobjects(usedbyauser.).被用户使用的数据库对象的集合。–Schemaobjects:thelogicalstructuresthatdirectlyrefertothedatabase’sdata.指向数据库数据的逻辑结构集。–Auser:anamedefinedinthedatabasethatcanconnecttoandaccessobjects.在数据库中为了能够连接和访问对象而定义的名字。•schema为数据库对象的集合,为了区分各个集合,需要给这个集合起个名字,即方案下看到的许多类似用户名的节点•这些类似用户名的节点其实就是一个schema•schema里面包含了各种对象–tables,views,sequences,storedprocedures,synonyms,indexes,clusters,anddatabaselinks。•一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。•Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决•在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。•schema的个数同user的个数相同,而且schema名字同user名字一一对应并且相同(别名,不准确)。•一个用户还可以使用其他的schema。–select*fromemp;–完整写法为select*fromscott.emp。–schema.object,而不属user.object。举个例子:schema作为user的别名的依据•SQLGruantdbatoscottSQLcreatetabletest(namechar(10));Tablecreated.SQLcreatetablesystem.test(namechar(10));Tablecreated.SQLinsertintotestvalues('scott');1rowcreated.SQLinsertintosystem.testvalues('system');1rowcreated.SQLcommit;Commitcomplete.•SQLconnsystem/managerConnected.SQLselect*fromtest;NAME----------systemSQLALTERSESSIONSETCURRENT_SCHEMA=scott;--改变用户缺省schema名Sessionaltered.•SQLselect*fromtest;NAME----------scottSQLselectowner,table_namefromdba_tableswheretable_name=upper(‘test’);OWNERTABLE_NAME------------------------------------------------------------SCOTTTESTSYSTEMTEST--在使用上,shcema与user完全一样。模式(方案、schema)的建立。•是否用户一建立模式同时建立?•必须建立对象才能在模式中显示相应的用户名。以system用户登录创建用户net1并以之登录创建表空间netspace在netspace表空间下创建表nettable预备知识2:管理表的策略•1、设计表–开发数据库应用系统时,数据库管理员负责规划和建立表空间,而规划和建立表则往往是由应用开发人员完成的。–应用开发人员设计表时应考虑以下因素:•1在为表、列、索引的视图、同义词、触发器等与表有关的对象命名时,应该使用权有意义的名称,其格式要有利于区分这些对象。•2为了给用户和其它人员提供有意义的帮助信息,应该使用权Comment命令描述表、列的作用.预备知识2:管理表的策略•3设计表时,应该使用权范式来规划每个表.范式分为第一范式第二范式第三范式范式越高,表的设计越规范.•4定义表列时,应该选择合适的数据类型和长度,为了节省存储空间,应该将可以取Null值的列放在后面.•5确定表中所需的完整性约束。•6在合适的情况下,使用簇表以节省存储空间并提高特定类型的SQL语句的性能.预备知识2:管理表的策略•2、规划表的类型•在Oracle数据库中,存储用户数据可以使用标准表索引表簇表和分区表.–标准表:数据按堆组织,以无序方式存放在单独表的表段中.这种表是最基础最常用的数据库表类型,是默认情况下创建的表.–索引表:数据是以”B-树”结构存放在主键约束所对应的索引段中.使用索引表时,索引叶子节点不仅包含了键列的数据还包含了其他非键列的数据。–簇表:簇由共享相同数据块的一组表组成.在合适的情况下,使用簇表可以节省存储空间并提高SQL语句的性能.–分区表:数据被划分为更小的部分,并且存储到相应的分区段中,每个分构段可以独立管理和操作.预备知识2:管理表的策略•3、规划表的位置–如果要在特定表空间上建表,用户必须在该表空间中具有相应的配额或具有UnlimitedTablespace的系统权限–如果建表时不指定TableSpace选项,Oracle会将表建立在用户的默认表空间中.通过指定TableSpace选项,可以将表建立在其他表空间中.•当规划表的存放位置时,应注意以下事项:–System表空间中应该只包含数据字典和Oracle系统对象.如果将表建立在System表空间,将会影响数据库性能.建议DBA给每个用户指定其它的默认表空间.–设计应用系统时,应该规划存放应用系统的表的表空间,不要随意分散地创建到不同的表空间中,这样会使执行某些数据库管理和维护操作.•使用NoLogging选项建表–在创建表的过程中指定nologging子句,避免在创建表过程中产生过多的重做记录。–nologging子句适合时在创建大表时使用.•使用ComPress选项建表–使用Oracle的表压缩特征(Compress)时,Oracle会将同一个数据块行和列的重复数据放在数据块的头部,压缩了表数据。•4、创建大表时的建议–1将表和它的索引分享存放大表所对应的索引通常比较大,将表和它的索引分别存放在不同的表空间中,这样的重建索引的过程中能够更加容易地获取所需的连续存储空间,并且可以提高查询时的I/O效率.–2分配足够的临时空间–如果如果应用程序员在访问大表时需要执行规模较大的排序操作,就必须在数据库中具有一个较大的临时段,临时段的存储参数设置取决于临表空间的默认存储参数设置,即Storage子句中的各种参数的设置•5、预计和规划表的大小–可以对表的大小进行估计,包括对索引回退段和重做日志文件大小的估计,以决定支持期望的数据库所需的磁盘空间大小.通过这些估计,就可以购买合适的硬件和作其它决定6.3创建基本表•1、创建基本表•基本表是数据库最基本的对象,是实际存放数据的地方。以system登录“创建表”对话框包含了七个选项卡•“一般信息”选项卡,–“名称”文本框:输入新建表的名称,表名在数据库的同一方案中是唯一的。表名最长30个字符,以字母开始,后由数字、下划线、#、$等组成。本例名为customer。–“方案”本例取默认值(SYSTEM)。–“表空间”本例取user。–“表”单选按钮:•“标准”表示建立常规表,表的一列或多列使用一个索引,为表和索引保留两个独立的存储空间;•“按索引组织的表”表示建立非常规表,表的数据保存在该表的索引中,更改表中的数据(如插入、删除或修改行等)将使索引更新。本例取默认值(标准)。创建数据表customer的一般信息使用可编辑的文本区域来创建基于当前表的PL/SQL查询语句。创建使用用户定义的对象类型的对象表表示可以创建XML类型的表“约束条件”选项卡,如下页图所示。该选项卡可以使用可编辑的电子表格编辑表的完整性约束条件。完整性约束条件是一种规则,不占用任何数据库空间,其定义存储在数据字典中,在执行PL/SQL期间使用。该电子表格由以下各列构成:“约束条件”选项卡•“名称”:要定义的完整性约束条件名,它在数据库中应是唯一的。本例定义了一个完整性约束条件:pk_costomer_1(PRIMARY)--cid为主键•另外举两例•xingbie(CHECK)--SSEXIN(‘男’,‘女’),•nianling(CHECK)--SAGEBETWEEN18AND24。•“类型”:约束条件类型,下拉列表中显示了可用的约束条件类型有UNIQUE、PRIMARY、FOREIGN、CHECK。本例选择类型为PRIMARY,表示pk_costomer_1是一个类型为主键的完整性约束条件。•“是否禁用”:表示创建约束条件时是禁用还是启用该约束条件。•“引用方案”:为约束条件中的FOREIGN(外键)引用。数据表customer的约束条件“簇列”选项卡•如果选中“将表定义为簇的一部分”复选框,则表示将表作为簇的一部分。选中后该选项卡的所有选项都可以操作:•簇的的信息显示在一个包含两列的列表框中,描述如下–“表列”:显示了当前表所有已定义的列。–“簇列”:显示了包含在已选簇内的簇关键字列。–本例皆取系统默认值。数据表customer的簇列“分区”选项卡•该选项卡的“范围分区”包含如下设置:•“分区名”:显示分区的名称,但不能编辑该值。•“表空间”:显示存储分区的表空间,但也不能编辑该值。•该选项卡中包括如下按钮:–“编辑”:允许对分区进行编辑。选择一行后该按钮即被启用。–“添加”:允许添加分区。选择最后一行后,该按钮可被启用。–“删除”:允许删除分区。选择一行后,该按钮即被启用。–本例皆取系统默认值。数据表customer的分区“存储”选项卡•“存储”选项卡,可以定义表的存储方式•在“区”选项组内,可以指定下列参数的值:–“初始大小”:指定表的第一个分区的大小。可以输入一个值,但至少为一个数据块的大小,默认值为64KB。–“下一个大小”:指定表的第二个分区的大小。可以输入一个值,但至少为一个数据块的大小,默认值为64KB。–“增量”:指定从第三区开始相对于上一个区的增长百分比。–“最小数量”:指定分配给表的最小区数。默认值为1。–“最大数量”:指定分配给表的最大区数。可以输入一个值,也可以是无限制。•在“空间利用率”选项组内,可以指定下列参数的值:–“保留用于更新的空闲空间的百分比”:指定为以后更新表而保留的空间的百分比,可以输入0~99之间值,默认为10。–“行插入备选对象的使用空间百分比阈值”:指定为该表数据块保留的已用空间的最小百分比,可以输入0~99之间的值,默认值为40。•在“事务处理数量”选项组内,可以指定下列参数的值:–“初始值”:指定该表每个数据块中分配的初始并行处理事务项数,可以输入1~255之间的值。–“最大值”:指定可同时修改表的数据块的最大并行处理事务项数,可以输入1~255之间的值。•在“空闲列表”选项组内,可以指定下列参数的值–“空闲列表”:指定表、簇或索引的每个空闲列表组的数量。可以输入一个值,默认值为1。–“组”:指定表、簇或索引的每个空闲列表组的数量。可以输入一个值,默认值为1。•在“缓冲池”下拉列表中可