管理模式对象_第1页
管理模式对象_第2页
管理模式对象_第3页
管理模式对象_第4页
管理模式对象_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

管理模式对象第一页,共一百零七页,2022年,8月28日内容提纲模式(Schemas)表(Tables)索引(Indexes)约束(Constraints)视图(Views)序列(Sequences)同义词(Synonyms)第二页,共一百零七页,2022年,8月28日模式(Schemas)

第三页,共一百零七页,2022年,8月28日模式(Schema)第四页,共一百零七页,2022年,8月28日模式(Schema)模式是表、视图、索引和其他数据库对象的集合可以认为“模式”与“用户账户”是等同的内容只有一点微小的区别:用户账户保存着用户所拥有的对象,而模式则是在那里保存的对象的集合所有数据库对象可以划分为两大类模式对象:可以被用户账户所拥有的对象如:表、约束、索引、视图、序列、私有同义词、PL/SQL包、存储过程等非模式对象:不能被用户账户所拥有的对象如:表空间、用户、角色、公有同义词等第五页,共一百零七页,2022年,8月28日模式(Schema)在创建数据库时,将自动创建很多用户及其相关联的模式用户如:SYS、SYSTEMSYS模式:用户SYS拥有数据字典,SYS模式中的这组表定义数据库及其内容;SYS还拥有数百个PL/SQL包,是为数据库管理员和开发人员提供的代码SYSTEM模式:存储各种用于管理和监视的附加对象第六页,共一百零七页,2022年,8月28日模式(Schema)模式与用户的关系模式与用户相对应,一个模式只能被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同通常情况下,用户所创建数据库对象都保存在与自己同名的模式中同一模式中数据库对象的名称必须唯一,而在不同模式中的数据库对象可以同名默认情况下,用户引用的对象是与自己同名模式中的对象,如果要引用其他模式中的对象,需要在该对象名之前指明对象所属模式

第七页,共一百零七页,2022年,8月28日模式(Schema)模式选择与切换如果用户以NORMAL身份登录,则进入同名模式若以SYSDBA身份登录,则进入SYS模式如果以SYSOPER身份登录,则进入PUBLIC模式conn/assysoper模式的创建创建用户时,就创建了同名的模式,不用另外创建例如:CREATEUSERgdinIDENTIFIEDBYgdin;(创建用户)GRANTCONNECT,RESOURCETOgdin;(赋权限)第八页,共一百零七页,2022年,8月28日模式(Schema)举例:HR模式第九页,共一百零七页,2022年,8月28日表(Tables)

第十页,共一百零七页,2022年,8月28日创建表CREATETABLE语法:column_level_constraint:列级约束table_level_constraint:表级约束parameter_list:表的参数CREATETABLEtable_name(

column_namedatatype[column_level_constraint][,column_namedatatype[column_level_constraint]…][,

table_level_constraint])[parameter_list];第十一页,共一百零七页,2022年,8月28日创建表举例:CREATETABLEemployees(employee_id NUMBER(6),first_name VARCHAR2(20), last_name VARCHAR2(25),email VARCHAR2(25),phone_number VARCHAR2(20),hire_date DATE,job_id VARCHAR2(10),salary NUMBER(8,2),commission_pct NUMBER(2,2),manager_id NUMBER(6),department_id NUMBER(4));第十二页,共一百零七页,2022年,8月28日查看表结构语法:DESCRIBEtable_nameDESCtable_name第十三页,共一百零七页,2022年,8月28日Oracle内置数据类型CHAR(N),NCHAR(N)

VARCHAR2(N),

NVARCHAR2(N)NUMBER(P,S)DATE

TIMESTAMPRAW(N)

BLOB,CLOB,NCLOB,BFILELONG,LONGRAWROWID,UROWIDVARRAY

TABLEREFDatatypeBuilt-in(内置)User-definedScalar(标量)Relationship(关系)Collection(集合)第十四页,共一百零七页,2022年,8月28日字符数据类型字符数据可以作为长度固定或长度可变的字符串存储在数据库中CHAR(n)、NCHAR(n)Character的缩写定长字符串,n的取值范围为1~2000字节用空格填满空白内容VARCHAR2(n)、NVARCHAR2(n)Variablecharacter的缩写可变字符串,n取值范围为1~4000字节自动调整数据长度,仅使用存储实际列值所需要的字节数,每行的大小可以不同第十五页,共一百零七页,2022年,8月28日数字数据类型数字始终以长度可变的数据存储,最多可以存储38个有效数位NUMBER(p,s)用于存储整数和实数p表示数值的总位数(精度,Precision),取值范围为1~38,默认为38s表示小数位数(Scale),若为负数则表示把数据向小数点左边舍入,默认值为0例如:NUMBER(5,2):当输入值为4.5678时,保存为4.57NUMBER(5,-2):当输入值为1056.34时,保存为1100第十六页,共一百零七页,2022年,8月28日浮点数据类型BINARY_FLOATBINARY_DOUBLE保存的是近似值用于科学计算,它们的特点与Java等编程语言中的float和double类似第十七页,共一百零七页,2022年,8月28日日期数据类型DATE存储日期和时间保存的域包括世纪、年、月、日、时、分、秒(7个字节)Oracle内部以数字的形式保存DATE类型数据默认日期显示格式由参数NLS_DATE_FORMAT所定义TIMESTAMP[(n)]存储日期和时间表示时间戳,是DATE的扩展,允许存储小数形式的秒值n表示秒的小数位数,取值范围为1~9,默认值为6第十八页,共一百零七页,2022年,8月28日RAW数据类型可以使用此数据类型存储小型二进制数据在网络中的计算机之间传输RAW数据时,或者使用Oracle实用程序将RAW数据从一个数据库移到另一个数据库时,Oracle服务器不执行字符集转换存储实际列值所需要的字节数大小随每行大小而异,最多为2000字节第十九页,共一百零七页,2022年,8月28日LOB数据类型(大型对象)Oracle为存储LOB提供六种数据类型:CLOB和LONG用于存储大型的、可变长度的字符数据,如文本文件等,最大数据量为4GBNCLOB用于存储大型的、可变长度的国家字符集数据,最大数据量为4GBBLOB和LONGRAW用于存储大型的、非结构化的可变长度的二进制数据(如二进制文件、图片文件、音频和视频等非文本文件),最大数据量为4GBBFILE用于存储操作系统文件中的非结构化数据注:LONG和LONGRAW已由CLOB和BLOG取代,保留它们主要用于向后兼容,它们的最大数据量为2G当数据量大于4000字节时,LOB在表中存储一个定位器,而将数据存储在另一位置。LOB允许将数据存储在单独的段和表空间中,或者存储在主机文件中第二十页,共一百零七页,2022年,8月28日ROWID和UROWID数据类型ROWIDROWID是数据库中每行的唯一标识符ROWID并不显式地作为一个列值存储(伪列)ROWID并不直接给出一行的物理地址,但它可以用来定位行ROWID为访问表中的行提供了最快的方法ROWID存储在索引中来指定具有一组给定的键值的行ROWID类型可以作为表中某个列的数据类型UROWID(通用ROWID)它支持外表(非Oracle表)的ROWID,并且可存储各种类型的ROWID第二十一页,共一百零七页,2022年,8月28日集合数据类型VARRAY(变化数组)变化数组对于存储包含少量组成元素的列表(如客户的电话号码)非常有用VARRAY具有以下特征:数组即一组有序的数据组成元素一个给定数组的所有组成元素的数据类型相同每个组成元素都有索引,即与数组中组成元素的位置相对应的编号数组中组成元素的数目决定了数组的大小Oracle服务器允许数组的大小可以变化,这就是它们被称为VARRAY(意为变化数组)的原因,但在声明数组类型时必须指定最大大小第二十二页,共一百零七页,2022年,8月28日集合数据类型TABLE(嵌套表)嵌套表提供一种将一个表定义为另一个表内一列的方法。嵌套表可用来存储可能包含大量记录的集合(比如一个订单中的若干条目)嵌套表一般具有以下特征:嵌套表是一组无次序的记录或行嵌套表中的各行结构相同嵌套表中的行与父表分别存储,并且父表中的对应行有一个指针嵌套表的存储特点可由数据库管理员来定义嵌套表没有预先确定的最大大小第二十三页,共一百零七页,2022年,8月28日关系数据类型REF关系类型在数据库内用作指针使用这些类型需要“对象”(Objects)选项。(比如:订单的每一项都可以指向或引用PRODUCTS表中的一行,而不必存储产品代码)第二十四页,共一百零七页,2022年,8月28日用户定义的数据类型Oracle允许用户定义抽象的数据类型并在应用程序内使用这些数据类型第二十五页,共一百零七页,2022年,8月28日ROWID格式扩展的ROWID在磁盘上需要10个字节的存储空间,并使用18个字符来显示它包含下列组成元素:数据对象编号:每个数据对象(如表或索引)在创建时都分配有此编号,并且此编号在数据库中是唯一的相关文件编号:此编号对于表空间中的每个文件是唯一的块编号:表示包含此行的块在文件中的位置行编号:标识块头中行目录位置的位置OOOOOOBBBBBBFFFRRRDataobjectnumberRelativefilenumberRownumberBlocknumber第二十六页,共一百零七页,2022年,8月28日ROWID格式例如:AAAS13是数据对象编号AAE是相关文件编号AAAACV是块编号AAA是员工号为7369的行的行编号第二十七页,共一百零七页,2022年,8月28日使用ROWID定位行ROWID可以用来定位一个数据库中的任意行因为一个段只能驻留在一个表空间中,所以,Oracle服务器可以使用数据对象编号来确定包含某一行的表空间表空间中的相关文件编号用来定位文件,块编号用来定位包含该行的块,行编号用来定位该行的行目录条目行目录条目可以用来定位行首第二十八页,共一百零七页,2022年,8月28日使用ROWID定位行ROWID是伪列,计算出来的,表中并没有存储ROWID,每一行的ROWID是根据该行的物理位置计算出来的,我们根据ROWID可以获得该行的所在的物理位置第二十九页,共一百零七页,2022年,8月28日行的结构行数据作为长度可变的记录存储在数据库块中。通常,一个行的各列按其定义时的顺序存储,并且不存储尾随的NULL列注:对于非尾随的NULL列,列长度需占用一个字节表中的每行具有:行头:用来存储行中的列数、链接信息和行锁定状态行数据:对于每一列,Oracle服务器存储列的长度和值,列值在紧靠列长度字节后面存储相邻的行之间不需要任何空格块中的每一行在行目录中都有一个位置,目录位置指向行首第三十页,共一百零七页,2022年,8月28日行的结构DatabaseblockRowheaderColumnlengthColumnvalue第三十一页,共一百零七页,2022年,8月28日创建表时使用的参数TABLESPACE子句指定将要在其中创建表的表空间如果省略TABLESPACE参数,则Oracle在包含该表的模式的所有者的缺省表空间中创建表STORAGE子句指定表的存储特性。若不指定,则继承表空间的存储参数设置INITIAL:初始分配区的大小NEXT:下一个分配区的大小MINEXTENTS:分配的最小区数MAXEXTENTS:分配的最大区数PCTINCREASE:NEXT区及以后的区有关区大小增长的百分比例如:STORAGE(INITIAL200KNEXT200KPCTINCREASE0MINEXTENTS1MAXEXTENTS5)第三十二页,共一百零七页,2022年,8月28日利用子查询创建表语法:通过该方法创建表时,可以修改表中列的名称,但是不能修改列的数据类型和长度源表中的约束条件和列的默认值都不会复制到新表中当子查询条件为真时,新表中包含查询到的数据;当子查询条件为假时,则创建一个空表CREATETABLEtable_name(column_name[column_level_constraint][,column_name[column_level_constraint]…][,table_level_constraint])[parameter_list]ASsubquery;第三十三页,共一百零七页,2022年,8月28日利用子查询创建表例如:创建一个表,保存工资高于15000元的员工的员工号、员工姓名和部门号。注:employees表在HR模式中第三十四页,共一百零七页,2022年,8月28日修改表修改表的基本语法:SETUNUSED:标记列为“未用”DROPUNUSEDCOLUMNS:永久删除标记为“未用”的列ALTERTABLEtable_nameADDcolumn_namedatatype[column_level_constraint]MODIFYcolumn_namedatatypeRENAME

COLUMNoldnameTOnewnameDROP

COLUMNcolumn_nameDROP(column_name1,column_name2,...)SETUNUSEDCOLUMNcolumn_nameSETUNUSED(column_name1,column_name2,...)DROPUNUSEDCOLUMNS第三十五页,共一百零七页,2022年,8月28日删除表语法:删除一个表的同时,Oracle将执行下列操作:删除该表中所有记录从数据字典中删除该表定义删除与该表相关的所有索引和触发器回收为该表分配的存储空间依赖于该表的数据库对象处于INVALID状态如果该表是外键关系中的父表,就必须使用CASCADECONSTRAINTS选项使用PURGE选项将彻底删除表,不放入回收站DROPTABLEtable_name[CASCADECONSTRAINTS][PURGE]第三十六页,共一百零七页,2022年,8月28日截断表语法:截断一个表将删除表中所有行,释放已使用的空间不会生成任何还原数据对应的索引将被截断不能截断某个外键正在引用的表使用此命令时不会触发删除触发器TRUNCATETABLEtable_name[{DROP|REUSE}STORAGE]第三十七页,共一百零七页,2022年,8月28日查询表的数据字典DBA_TABLES、ALL_TABLES、USER_TABLESDBA_TAB_COLUMNS、ALL_TAB_COLUMNS、USER_TAB_COLUMNSDBA_OBJECTS、ALL_OBJECTS、USER_OBJECTS第三十八页,共一百零七页,2022年,8月28日索引(Indexes)第三十九页,共一百零七页,2022年,8月28日索引表的数据是无序的,因为数据是随机存储的,所以在查询的时候需要全表扫描。索引就是将无序的数据有序化,这样就可以在查询数据的时候减少数据块的读取,实现快速定位数据索引是一种允许对表中的行进行直接访问的树型结构B树索引(平衡树索引)(默认是B树索引)位图索引索引的作用:快速定位数据,减少磁盘I/O第四十页,共一百零七页,2022年,8月28日索引Oracle自动使用和维护索引在表上执行DML操作时,Oracle服务器将维护所有的索引插入操作导致在适当的块中插入索引项删除行只导致逻辑删除索引项更新键列将导致逻辑删除和向索引插入项索引的缺点:占用硬盘和内存空间会减慢数据更新的速度索引不能盲目建立第四十一页,共一百零七页,2022年,8月28日B树索引B树占用空间多,适合索引值基数高、重复率低的应用IndexentryheaderKeycolumnlengthKeycolumnvalueROWID根节点分支节点叶节点Indexentry第四十二页,共一百零七页,2022年,8月28日B树索引根和枝干中存放键值范围的导引指针叶子中存放的是条目条目中存放的是索引的键值和该数据行的ROWID叶子间有双重链接,有助于按键值的升序和降序扫描索引第四十三页,共一百零七页,2022年,8月28日位图索引位图占用空间少,适合索引值基数少、重复率高的应用<Blue,10.0.3,12.8.3,1000100100010010100><Green,10.0.3,12.8.3,0001010000100100000><Red,10.0.3,12.8.3,0100000011000001001><Yellow,10.0.3,12.8.3,0010001000001000010>keystartROWIDendROWID

bitmap(位图)TableIndexBlock10Block11Block12File3第四十四页,共一百零七页,2022年,8月28日位图索引可以将位图索引组织为B树,但叶节点存储每个键值的位图而非ROWID。位图中的每一位对应一个可能的ROWID,如果设置了位,则意味着具有相应ROWID的行包含键值位图索引的结构StartROWID例如:文件号3、块号10、行号0EndROWID例如:文件号3、块号12、行号8位图段由位串组成(对应的行包含键值时设置位;不包含键值时不设置位)第四十五页,共一百零七页,2022年,8月28日B树索引vs.位图索引B树位图适用于高基数列适用于低基数列更新键列的成本相对较低更新键列的成本非常高使用OR谓词进行查询时效率较低使用OR谓词进行查询时效率较高对OLTP很有用对数据仓库很有用第四十六页,共一百零七页,2022年,8月28日索引使用原则在大表上建立索引在WHERE子句或连接条件上经常使用的列上建立索引对于取值范围很大的列应当创建B树索引对于取值范围很小的列应当创建位图索引Oracle会自动在PRIMARYKEY和UNIQUE约束的列上创建唯一性索引限制表中索引的数目

第四十七页,共一百零七页,2022年,8月28日创建索引语法UNIQUE表示建立惟一性索引BITMAP表示建立位图索引ASC/DESC用于指定索引值的排列顺序,ASC表示按升序排序,DESC表示按降序排序,缺省值为ASCREVERSE表示建立反键索引parameter_list用于指定索引的存放位置、存储空间分配和数据块参数设置CREATE[UNIQUE]|[BITMAP]INDEX

index_nameON

table_name([column_name[ASC|DESC],…]|[expression])[REVERSE][parameter_list];第四十八页,共一百零七页,2022年,8月28日隐式创建索引如果在一个表上创建了一个PRIMARYKEY或UNIQUE类型的约束,SQL将自动创建一个索引来支持列上的约束第四十九页,共一百零七页,2022年,8月28日显式创建索引单列索引CREATEINDEXix_inv_dateONinvoices(invoice_date)复合索引CREATEINDEXix_inv_invoice_vendor_idONinvoices(vendor_id,invoice_date)唯一索引CREATEUNIQUEINDEXix_emp_ssnONemployees(ssn)第五十页,共一百零七页,2022年,8月28日重建索引使用ALTERINDEX命令执行以下操作:将索引移到另一个表空间中通过移除已删除的项,提高空间的使用率ALTERINDEXorders_id_idxREBUILDTABLESPACEindex2第五十一页,共一百零七页,2022年,8月28日合并索引遇到索引碎片时,可以重建或合并索引ALTERINDEXorders_id_idxCOALESCE合并前合并后第五十二页,共一百零七页,2022年,8月28日检查索引及其有效性ANALYZEINDEXorders_id_idxVALIDATESTRUCTURE;INDEX_STATS第五十三页,共一百零七页,2022年,8月28日检查索引及其有效性HEIGHT:索引的层数BLOCKS:索引总块数BR_BLKS:枝干块数LF_BLKS:叶子块数LF_ROWS:叶子内行数DEL_LF_ROWS:叶子中被删除的行数如果索引中已删除行的比例很高,请重新组织该索引例如:当DEL_LF_ROWS占LF_ROWS的比率超过30%时第五十四页,共一百零七页,2022年,8月28日删除索引语法:在下面几种情况下,可以考虑删除索引该索引不再使用通过一段时间监视,发现几乎没有查询或只有极少数查询会使用该索引由于索引中包含损坏的数据块或包含过多的存储碎片等,需要删除该索引,然后重建索引由于移动了表数据而导致索引失效DROPINDEXindex_name第五十五页,共一百零七页,2022年,8月28日标识未用索引开始监视索引的使用停止监视索引的使用查看数据字典V$OBJECT_USAGEALTERINDEXindex_nameMONITORINGUSAGEALTERINDEXindex_nameNOMONITORINGUSAGE第五十六页,共一百零七页,2022年,8月28日查询索引的数据字典DBA_INDEXES、ALL_INDEXES、USER_INDEXESDBA_IND_COLUMNS、ALL_IND_COLUMNS、USER_IND_COLUMNSV$OBJECT_USAGE提供有关索引使用情况的信息第五十七页,共一百零七页,2022年,8月28日约束(Constraints)

第五十八页,共一百零七页,2022年,8月28日数据完整性(DataIntegrity)应用程序代码Table数据完整性约束数据库触发器第五十九页,共一百零七页,2022年,8月28日约束(Constraint)约束的作用是在表中定义的用于维护数据库完整性的一些规则。通过对表中列定义约束,可以防止在执行DML操作时,将不符合要求的数据插入到表中。约束类型PRIMARYKEY(主键约束)UNIQUE(唯一性约束)CHECK(检查约束)FOREIGNKEY(外键约束)NULL/NOTNULL(空/非空约束)第六十页,共一百零七页,2022年,8月28日主键约束(PRIMARYKEY)主键的特点起惟一标识作用,其值不能为NULL,也不能重复一个表中只能定义一个主键约束建立主键约束的同时,在该列上建立一个惟一性索引第六十一页,共一百零七页,2022年,8月28日UNIQUE(唯一性约束)唯一性约束的特点定义为惟一性约束的某一列或多个列的组合的取值必须惟一如果某一列或多个列仅定义惟一性约束,而没有定义非空约束,则该约束列可以包含多个空值Oracle自动在惟一性约束列上建立一个惟一性索引第六十二页,共一百零七页,2022年,8月28日PRIMARYKEY

vs.UNIQUE在一个基本表中只能定义一个PRIMARYKEY约束,但可定义多个UNIQUE约束对于指定为PRIMARYKEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARYKEY约束第六十三页,共一百零七页,2022年,8月28日CHECK(检查约束)检查约束的特点检查约束用来限制列值所允许的取值范围,其表达式中必须引用相应列,并且表达式的计算结果必须是一个布尔值约束表达式中不能包含子查询,也不能包含SYSDATE、USER等SQL函数,以及ROWID、ROWNUM等伪列一个列可以定义多个检查约束第六十四页,共一百零七页,2022年,8月28日FOREIGNKEY(外键约束)外键约束的概念FOREIGNKEY约束指定某一个列或一组列作为外部键,其中,包含外部键的表称为从表,包含外部键所引用的主键或唯一键的表称主表系统保证从表在外部键上的取值要么是主表中某一个主键值或唯一键值,要么取空值。以此保证两个表之间的连接,确保了实体的参照完整性第六十五页,共一百零七页,2022年,8月28日FOREIGNKEY(外键约束)外键约束的特点定义外键约束的列的取值要么是主表参照列的值,要么为空外键列只能参照于主表中的主键约束列或惟一性约束列可以在一列或多列组合上定义外键约束第六十六页,共一百零七页,2022年,8月28日NULL/NOTNULL(空/非空约束)空/非空约束的特点在同一个表中可以定义多个NOTNULL约束只能是列级约束第六十七页,共一百零七页,2022年,8月28日DEFAULT(默认值约束)如果用户在插入新行时没有显示为列提供数据,系统将默认值赋给该列语法:[CONSTRAINT<约束名>]DEFAULT

表达式第六十八页,共一百零七页,2022年,8月28日定义约束列级约束对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名定义列级约束的语法为:[CONSTRAINTconstraint_name]constraint_type[conditioin];第六十九页,共一百零七页,2022年,8月28日定义约束表级约束与列定义相互独立,不包括在列定义中。通常用于对多个列一起进行约束,与列定义用逗号分隔。定义表约束时必须指出要约束的那些列的名称定义表级约束的语法为:[CONSTRAINTconstraint_name]constraint_type([column1_name,column2_name,…]|[condition]);第七十页,共一百零七页,2022年,8月28日定义约束注意Oracle约束通过名称进行标识。在定义时可以通过CONSTRAINT关键字为约束命名。如果用户没有为约束命名,Oracle将自动为约束命名。第七十一页,共一百零七页,2022年,8月28日添加和删除约束添加约束语法:删除约束语法:可以通过直接指定约束的名称来删除约束,或指定约束的内容来删除约束ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]constraint_type(column1_name,column2_name,…)[condition];ALTERTABLEtable_nameDROP……第七十二页,共一百零七页,2022年,8月28日在CREATETABLE中创建约束列级约束在PORT_ID列上创建PRIMARYKEY约束在STATUS列上创建NOTNULL约束第七十三页,共一百零七页,2022年,8月28日在CREATETABLE中创建约束表级约束在PORT_ID列上创建PRIMARYKEY约束第七十四页,共一百零七页,2022年,8月28日在CREATETABLE中创建约束例:UNIQUE约束第七十五页,共一百零七页,2022年,8月28日在CREATETABLE中创建约束例:FOREIGNKEY约束第七十六页,共一百零七页,2022年,8月28日在CREATETABLE中创建约束例:CHECK约束第七十七页,共一百零七页,2022年,8月28日在CREATETABLE中创建约束例:创建表是同时声明多个约束第七十八页,共一百零七页,2022年,8月28日修改约束语法:ALTERTABLEtable_name[ADD[CONSTRAINTconstraint_name]constraint_type(column1,…)[condition]]|[MODIFYcolumn[NOTNULL]|[NULL]]|[DROP[CONSTRAINTconstraint_name]|[PRIMARYKEY]|[UNIQUE(column)]]第七十九页,共一百零七页,2022年,8月28日通过ALTERTABLE创建约束先建表,然后修改列的声明,增加主键约束第八十页,共一百零七页,2022年,8月28日通过ALTERTABLE创建约束先建表,然后为列增加主键约束第八十一页,共一百零七页,2022年,8月28日查询约束信息通过查询以下视图获取有关约束的信息:DBA_CONSTRAINTS、ALL_CONSTRAINTS、USER_CONSTRAINTSCONSTRAINT_TYPE列的值:如果为主键约束,则约束类型为P;如果为唯一性约束,则为U;如果为外键约束,则为R;如果为检查约束,则为C。NOTNULL约束存储为检查约束。DBA_CONS_COLUMNS、ALL_CONS_COLUMNS、USER_CONS_COLUMNS第八十二页,共一百零七页,2022年,8月28日视图(Views)第八十三页,共一百零七页,2022年,8月28日视图视图是从一个或多个表或视图中提取出来的数据的一种逻辑表现形式使用视图具有下列优点:可以限制对基表数据的访问,只允许用户通过视图看到表中的一部分数据可以使复杂的查询简单化提供了数据的透明性,用户并不知道数据来自于何处提供了对相同数据的不同显示第八十四页,共一百零七页,2022年,8月28日视图HR.EMPLOYEES表第八十五页,共一百零七页,2022年,8月28日CREATEVIEW创建视图语法:FORCE:不管基表是否存在都创建视图NOFORCE:仅当基表存在时才创建视图(默认)subquery为子查询,决定了视图中数据的来源WITH

READ

ONLY指明视图为只读视图,不能修改WITH

CHECK

OPTION指明在使用视图时,检查数据是否符合子查询中的约束条件CONSTRAINT

constraint为使用WITHCHECKOPTION选项时指定的约束命名CREATE[ORREPLACE][FORCE|NOFORCE]VIEW

[schema.]view_name[(column1,column2,…)]AS

subquery[WITHREADONLY]|[WITHCHECKOPTION][CONSTRIANTconstraint]第八十六页,共一百零七页,2022年,8月28日CREATEVIEW创建视图创建简单视图简单视图的子查询只从一个基表中导出数据,并且不包含连接、组函数等例如:(注:使用HR模式中的employees表)第八十七页,共一百零七页,2022年,8月28日CREATEVIEW创建视图创建复杂视图复杂视图的子查询从一个或多个表中导出数据,也可以是经过运算得到的数据例如:创建一个视图,包含各个员工的员工号、员工名及其部门名称(注:使用SCOTT模式中的表)第八十八页,共一百零七页,2022年,8月28日CREATEVIEW创建视图内嵌视图在FROM子句中使用的子查询,习惯上又称为内嵌视图。内嵌视图可以将复杂的连接查询简单化,可以将多个查询压缩成一个简单查询,因此通常用于简化复杂的查询例如:查询各个部门的部门名、部门的最高工资和最低工资(注:使用SCOTT模式中的表)第八十九页,共一百零七页,2022年,8月28日视图操作数据查询、DML操作(数据的插入、删除、修改)等因为视图是“虚表”,因此对视图的操作最终转换为对基本表的操作对视图执行DML操作时需要注意,如果视图定义包括下列任何一项,则不可直接对视图进行DML操作,需要通过触发器来实现集合操作符、聚集函数、GROUPBY、CONNECTBY或STARTWITH子句、DISTINCT操作符、由表达式定义的列、伪列ROWNUM、(部分)连接操作第九十页,共一百零七页,2022年,8月28日修改视图可以采用CREATEORREPLACEVIEW语句修改视图,实质是删除原视图并重建该视图,但是会保留该视图上授予的各种权限例如:修改视图CREATEVIEWemp_dept_view,添加员工工资信息第九十一页,共一百零七页,2022年,8月28日删除视图可以使用DROPVIEW语句删除视图删除视图后,对数据库表没有任何影响例如:删除视图emp_dept_viewDROPVIEWemp_dept_view第九十二页,共一百零七页,2022年,8月28日视图的查询DBA_VIEWS、ALL_VIEWS、USER_VIEWS第九十三页,共一百零七页,2022年,8月28日序列(Sequences)第九十四页,共一百零七页,2022年,8月28日序列序列是一种用于产生唯一数字序号的数据库对象序列具有下列特点:可以为表中的记录自动产生唯一序号由用户创建并且可以被多个用户共享典型应用是生成主键值,用于标识记录的唯一性允许同时生成多个序列号,而每一个序列号是唯一的使用缓存可以加速序列的访问速度第九十五页,共一百零七页,2022年,8月28日CREATESEQUENCE创建序列语法:START

WITH:设置序列初始值,默认值为1INCREMENT

BY

温馨提示

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

评论

0/150

提交评论