第六章数据库对象(表,视图,索引)课程目标熟练掌握SQL语言进行表的创建掌握表的约束条件掌握如何创建视图掌握如何常见索引数据库对象简介Oracle数据库对象又称模式对象数据库对象是逻辑结构的集合,最基本的数据库对象是表其他数据库对象包括:数据库对象同义词序列视图索引表空间表空间的概念Oracle数据库的物理文件是指存储在磁盘上的数据文件、控制文件和日志文件的总称。表空间是为了统一Oracle物理和逻辑上的结构而专门建立的,从物理上来说,一个表空间是由具体的一个或多个物理文件构成的,从逻辑上来说一个表空间是由具体的一个或多个用户模式下的表、索引等数据构成。在Oracle中表不可能单独存在,一定隶属于某一个用户,而某用户的数据必定存在于某个表空间中。在Oracle中数据的范围从小到大的顺序依次是:字段值记录值表数据用户表空间OracleOracle中创建表常用的数据类型Oracle中创建表常用的数据类型名称含义CHAR用于描述定长的字符型数据,长度小于等于2000字节。VARCHAR2用于描述变长的字符型数据,长度小于等于4000字节。NCHAR用来存储Unicode字符集的定长字符型数据,长度小于等于1000字节。NUMBER用来存储整型或者浮点型数值。DATE用来存储日期数据。LONG用来存储最大长度为2GB的变长字符数据。RAW用来存储非结构化数据的变长字符数据,长度小于等于2000字节。LONGRAW用来存储非结构化数据的变长字符数据,长度小于等于2GB。BLOB用来存储多达4GB的非结构化的二进制数据。UROWID用来存储表示任何类型列地址的二进制数据。FLOAT用来存储浮点数。表5-1数据类型表建表创建一张表,并往里插入一条数据createtablestu(idnumber(6),namevarchar2(20),sexnumber(1),agenumber(3),sdatedate,gradenumber(2)default1,classnumber(4),emailvarchar(50)--最后没有“,”)修改表的结构修改表结构:已经有一张表了,但是往了某一条字段,使用alter修改现有表的结构添加addr字段---add()altertablestuadd(addrvarchar2(100));删除某一个字段---drop()altertablestudrop(addr);修改某个字段---modify()altertablestumodify(addrvarchar2(50));注意:*修改后的新的精度必须能够容纳原来有的数据表的约束表的约束分为:主键约束(PRIMARYKEY)可以唯一标识整条记录的这样的一个东西非空约束:表明该字段不能为空(notnull)唯一约束--在这个字段里面所有的记录不能取重复的值,每个值必须是唯一的(unique)表的约束外键约束(foreignkey):是建立在两个字段上,某一个字段会参考另外一个字段里面的值,如果另外一个字段里面检查约束(check)约束种类字段级的约束:把约束条件+在字段名的(只有非空约束可以加在字段级别的约束)表级的约束:+在所有字段名的最后面主键约束例1altertablestuaddconstraintstu_keyprimarykey(id);唯一约束例1altertablestuaddconstraintstu_emailunique(email)外键约束例1altertablestuaddconstraintstu_class_fkforeignkey(class)referencesclass(id)检查约束例1Createtableperson(idvarchar2(10),Namevarchar2(10),Genderchar(1),Agenumber,Constraintperson_gender_ckCheck(gender=‘f’),Constraintperson_age_ckCheck(agebetween18and35));如何查看约束通过查看数据字典表USER_CONSTRAINTSC:代表CHECK约束和NOTNULL约束P:代表PRIMARYKEY约束R:代表FOREIGNKEY约束U:代表UNIQUE约束如何去删除约束去掉约束条件---dropconstraint+约束名如何去修改约束修改约束条件:一般很少去修改约束条件,修改的方法是把原来的删掉,然后再添加个新的。视图概念它就是一张虚表,严格意义来讲:视图就是一个子查询,它不是真正意义上的表,是又SQL语句各个字段临时组成的表。视图视图以经过定制的方式显示来自一个或多个表的数据视图可以视为“虚拟表”或“存储的查询”创建视图所依据的表称为“基表”视图的优点有:提供了另外一种级别的表安全性隐藏的数据的复杂性简化的用户的SQL命令隔离基表结构的改变通过重命名列,从另一个角度提供数据创建视图Create(orreplace)view视图名(别名)as子查询语句(withcheckoptionconstraint约束名)(withreadonly)创建视图建立学生表的视图createviewv$_stuasselectid,name,agefromstu;注意:要确定视图必须有用的时候才考虑建视图,视图是可以更新数据的,但是我们很少这么去用它创建视图创建视图的语法:CREATE[ORREPLACE][FORCE]VIEWview_name[(alias[,alias]...)]ASselect_statement[WITHCHECKOPTION][WITHREADONLY];创建视图studnostudnamestudmarkssubnostudcaste1Rob452Open2James334SC3Jesica405OpenStud_detailsStud_viewstudnostudnamesubno1Rob22James43Jesica5创建视图CREATEVIEWstud_viewASSELECTstudno,studname,subnoFROMStud_details;创建视图•使用WITHCHECKOPTION选项创建视图CREATEORREPLACEVIEWpause_viewASSELECT*FROMorder_masterWHEREostatus='p'WITHCHECKOPTIONCONSTRAINTchk_pv;联接视图StudnoStudnameSubmrksSubno1Rob4522James3343Jesica404SubnoSubname2English4Maths5ScienceStud_detailsSub_detailsStudnoStudnameSubmrksSubname1Rob45English2James33Maths3Jesica40MathsCREATEVIEWStud_sub_viewASSELECTStudno,Studname,Submrks,SubnameFROMStud_details,Sub_DetailsWHEREStud_details.Subno=Sub_details.Subno;Stud_sub_view联接视图联接视图创建外联接视图CREATEVIEWven_ord_outj_viewASSELECTvm.vencode,venname,orderno,odate,ostatusFROMvendor_mastervm,order_masteromWHEREvm.vencode=om.vencode(+);SELECTvm.vencode,venname,orderno,odate,ostatusFROMvendor_mastervmLEFTOUTERJOINorder_masteromONvm.vencode=om.vencode;视图上的DML语句在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE视图上的DML语句有如下限制:只能修改一个底层的基表如果修改违反了基表的约束条件,则无法更新视图如果视图包含连接操作符、DISTINCT关键字、集合操作符、聚合函数或GROUPBY子句,则将无法更新视图如果视图包含伪列或表达式,则将无法更新视图如何查看视图通过数据字典表user_views来查看用户视图修改视图ORACLE中没有直接修改视图的办法,一般是重写SQL语句覆盖原来的视图如何删除视图DROPVIEW+视图名称索引概念也是一个新的数据库对象,索引就相当于我们字典里那个索引索引的作用:你为某个字段建立索引,别人访问这个字段的时候效率会更高。注意:是读的时候效率会更高。索引的建立是读起来更快,修改起来更慢了(附加修改索引表)。访问量特别大的时候,而且觉得效率比较低的时候,这个时候可以考虑建立索引,但是,记住一点:不要轻易的建立索引。索引索引是与表相关的一个可选结构用以提高SQL语句执行的性能减少磁盘I/O使用CREATEINDEX语句创建索引在逻辑上和物理上都独立于表的数据Oracle自动维护索引创建索引创建索引:createindexidx_stu_emailonstu(email);注意:当你给表里某个字段加约束的时候,比如主键约束,或者唯一约束,这个时候Oracle会帮你建立查询索引通过数据字典表user_indexesselectindex_namefromuser_indexes;删除索引删除索引:dropindexidx_stu_email;总结熟练掌握SQL语言进行表的创建掌握表的约束条件掌握如何创建视图掌握如何常见索引作业创建一个表stuend(id,stuname,sex,class)?给表student加主键约束,非空约束,检查约束,外键约束?