oracle数据库基础 (2).ppt
Oracle数据库基础,2,目标,Oracle 简介Oracle 数据库组件Oracle 的结构化查询工具Oracle主要数据类型Oracle的数据完整性SQL 语言SQL 命令的类别,3,Oracle 简介,关系数据库:是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据。目前主流的关系数据库有oracle、sqlserver、mysql、access、db2、sybase等。Oracle是一种对象关系数据库管理系统(ORDBMS)。Oracle提供了关系数据库系统和面向对象数据库系统这二者的功能Oracle产品基于一种称为“客户机/服务器技术”的概念客户机-用户和数据库之间的接口服务器-存储和管理数据使用 Internet 文件系统该系统是一种基于Java的应用程序,它可以使数据库成为基于Internet的开发平台,4,Oracle 数据库组件,数据库由下列组件构成:Database File 数据库文件(*.dbf)Control File 控制文件(*.ctl)Redo Log Files 恢复日志文件(*.log)Tablespaces 表空间Segments 段Extents 扩展区上面的组件可以分类如下:物理组件逻辑组件,物理组件,物理组件是数据实际所在的操作系统的文件。而用户无法直接访问这些文件中的信息,用户需要使用逻辑组件访问这些信息。物理组件是构成数据库的操作系统文件物理组件为数据库信息提供了实际的物理存储器 操作系统文件有三种类型:数据库文件或数据文件(*.dbf)包括所有数据库数据,如用户数据、系统数据和Overhead数据的数据已创建好的数据库至少包括一个数据文件,数据文件只可属于一个数据库数据文件中的数据以块为单位一个或多个数据文件形成了数据库的一个逻辑单位,这些逻辑单位称为表空间。数据文件可与一个而且只能与一个表空间相关。控制文件(*.ctl)创建数据库时,就创建了控制文件 已建好的数据库具有一个控件文件。控件文件是存储在硬盘上的物理文件。它存储数据库的物理结构,即与数据库相关的所有文件的信息。该信息包括:数据库的名称、数据文件和恢复日志文件的名称及其位置、时间戳只要数据库实例启动,控件文件将用于查找和定位数据库组件。在出错及恢复数据库的过程中也将使用控件文件。恢复日志文件(*.log)恢复日志文件是操作系统文件集,由RDBMS用于记录对数据库所做的更改。如果数据库出现故障,则可从恢复日志中访问并重新应用对数据库所做的更改,这样即可保护已完成的工作不受损失恢复日志以循环方式工作。恢复日志的功能受数据库运行运行的模式控制:NOARCHIVELOG MODE(不归档模式)、ARCHIVELOG MODE(归档模式),逻辑组件,逻辑组件决定数据库中物理空间的使用。数据库有下列逻辑组件:Tablespace(表空间)Segments(段)Extents(扩展区)Schema Object(架构对象)表空间、段和扩展区是逻辑结构,它们决定模式对象存储空间的使用情况。,表空间1,数据库由称为表空间的逻辑单位组成一个数据库为可以包含一个或多个表空间表空间包含一组相关的数据库对象逻辑表空间具有一个或多个与之相关的物理数据库文件,但是一个数据文件只能与一个表空间相关联。Oracle 数据库中的典型表空间是:SYSTEM 表空间 用于存储数据库管理自身所需的所有信息,即数据词典信息DATA 表空间用于存储实际数据USER 表空间用于存储关于用户的信息TOOLS 表空间用于存储不同工具所需的数据库对象TEMP 表空间用于存储在大型排序操作过程中所创建存储的所有临时表。它一般在处理过程中用作缓冲空间,表空间2,上图阐明了如下情况:每个数据库都在逻辑上分成一个或多个表空间将为每个表空间显式创建一个或多个数据文件,以将所有物理结构的数据存储在一个表空间之内表空间数据文件的组合大小是表空间的总的存储容量(SYSTEM表空间具有2MB存储容量,USER表空间有4MB)数据库表空间的组合存储容量是数据库的总的存储容量(6M),表空间3,表空间可以用于:控制数据库对象的空间分配,如表和索引设置数据库用户的空间配额通过使单个表空间联机或脱机来控制数据的可用性备份或恢复数据,10,段,表空间中的逻辑单位形式上为段表空间中的数据存储在分配的数据库空间中,称为段段被定义成给逻辑数据库结构分配的扩展区集合不同类型的段:数据段索引段回滚段临时段,扩展区1,扩展区由一定数目的相邻数据块组成,段是扩展区的集合增量扩展区是与上次该段中分配的扩展区大小相同或更大的后续扩展区 Oracle 使用独立的算法搜索整个自由空间查找第一个具有与增量扩展区具有相同的或更大容量的自由、临近数据块集合,扩展区2,一旦 Oracle 在表空间中找到并分配了必需的可用空间,则它将分配一部分与新增扩展区大小相对应的可用空间Oracle 更新段标题和数据词典,以显示新的扩展区已经被分配而且分配的空间不再可用,13,数据块,数据块代表数据库存储粒度的最细级别。数据块大小定义为一定数目的字节数,此数目通常取决于操作系统。,14,Oracle 的结构化查询工具,主要的SQL工具包括:SQL*Plus 它是一个可以接受和执行 SQL 命令以及 PL/SQL 块的工具,它可以用于:输入、编辑、存储、检索和运行SQL命令以及PL/SQL块为任意表列出列定义在SQL数据库之间访问和复制数据向用户发送消息,并从用户接受响应iSQL*Plus与 SQL*Plus 类似,但它主要用在Web的工作方式上,也就是说,它可以通过浏览器进行访问它还提供了可以修改SQL语句的联机编辑功能还可以使用 iSQL*Plus 将查询结果格式化为基本报告iSQL*Plus既可以访问远程数据库,也可以访问本地数据库。PL/SQL是 SQL 的扩展,它将 SQL 的数据操纵能力和过程语言的数据处理能力结合到了一起,SQL 语言,15,SQL:即为Structured Query Language(结构化查询语言)SQL的优点:它是一种非过程语言,因为可以同时访问多个记录,而不是一次只能访问一个记录它是所有关系数据库的公用语言。也就是说,它是可以移植的,只需对它作极少的修改即可用于其它的数据库用于查询、插入、删除以及修改数据和对象的命令非常简单,SQL 命令的类别,SQL命令的分类,数据定义语言(DDL),数据定义语言:用于创建对象(如:表)、修改对象的结构以及删除所创建的对象。表:是以行和列的形式存储数据的存储单元。用于定义表的数据定义语言可以被归类为下列的四个命令:CREATE 命令ALTER 命令TRUNCATE 命令DROP 命令,数据定义语言CREATE TABLE 命令1,CREATE TABLE 命令创建表的语法如下所示:CREATE TABLE schema.table(column datatype DEFAULT expr,);其中关键字 schema 表示对象所有者的名字。如果我们在自己的方案中创建表,则不需要指定所有者的姓名。table表示该表的名称。DEFAULT 则用于在 INSERT 语句中省略了列值时为其指定默认值。column 表示列的名称。datatype 表示列的数据类型以及长度。创建表时,应指定下列内容:表的唯一名称表中各列的唯一名称列的数据类型及宽度,数据定义语言 CREATE TABLE 命令2,表名的命名规则,应该严格遵循下列准则在对表进行命名时,第一个字母应该是字母表中的字母Oracle保留字不能用来对表命名表名的最大长度应=30个字符两个不同的表不能有相同的名称可以使用下划线、数字和字母,但不能使用空格和单引号如果用户使用了双引号对表进行命名,如“inf”,则要区分大小写。例如:“inf”,“INF”,和“inF”并不相同,Oracle主要数据类型 1,Character 数据类型Number 数据类型Date 数据类型Raw 和 Long Raw 数据类型LOB 数据类型,Oracle主要数据类型 2,Character 数据类型,Oracle主要数据类型3,Character 数据类型,Oracle主要数据类型 4,Number 数据类型,Oracle主要数据类型 5,浮点数据类型:BINARY_DOUBLE、BINARY_FLOAT 这两种类型是 oracle 10g 新引进的数值类型。在 oracle 10g 之前是没有这两种类型的,这两种数据类型是在硬盘上执行运算,因而它们的运算速度要快很多,但它们的精度却很小。,Oracle主要数据类型 6,Date 数据类型,Oracle主要数据类型 7,RAW 和 LONG RAW 数据类型:用于存储二进制数据的数据类型。,Oracle主要数据类型 8,LOB 数据类型:LOB也称为 Large Object数据类型。此数据类型可以存储非结构化的信息,如:声音剪辑、视频文件等,它是最大大小为4GB。此数据类型允许有效、随机、分段地访问数据。,约束条件,表的框架是有一些规则的,约束条件就是对列定义的一种规则,一列中每个数据都必须遵循这种规则主键外键非空唯一默认值其他条件,Oracle的数据完整性,完整性约束:数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。数据完整性分为四类:实体完整性(Entity Integrity)域完整性(Domain Integrity)参照完整性(Referential Integrity)用户定义的完整性(User-definedIntegrity),实体完整性,实体完整性(Entity Integrity):实体完整性规定表的每一行在表中是唯一的实体。在数据表中可以对相应字段进行如下约束来实现实体完整性:UNIQUE(唯一约束):保证在指定的列中没有重复值,在该表中每一个值或者每一组值都将是唯一的。PRIMARY KEY(主键约束):用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束,主键可以由一个列或多个列组成。IDENTITY(自增标识列):自动增长的列,域完整性,域完整性(Domain Integrity):是指数据库表中的列必须满足某种特定的数据类型或约束。域完整性有以下几种约束:CHECK(检查约束):检查在约束中指定的条件是否得到了满足。FOREIGN KEY(外键约束):通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键。DEFAULT(默认值约束):如果增加一行的数据时,不为这个列设置值,则通过这个默认值来填充该列的值。NOT NULL(不为空值约束):防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值,参照完整性,参照完整性(Referential Integrity):是指两个表的主关键字和外关键字的数据应对应一致。参照完整性作用表现在如下几个方面:禁止在从表中插入主表中不存在的关键字的数据行禁止会导致从表中的相应值孤立的主表中的外关键字值改变禁止删除在从表中的有对应记录的主表记录,用户定义的完整性,用户定义的完整性(User-defined Integrity):是针对某个特定关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。数据库系统提供了定义和检验这类完整性的机制,以便用统一的系统方法来处理它们,而不是用应用程序来承担这一功能。其它的完整性类型都支持用户定义的完整性。,数据定义语言ALTER TABLE 命令,有时根据情况,可能需要修改表的结构。这种修改可能是修改现有属性的特性,也可能是添加新属性。用于修改表名的语法如下:ALTER TABLE RENAME TO 新表名;用于修改现有列定义的语法如下:ALTER TABLE MODIFY(column definition,CONSTRAINT definition);用于向现有表中添加新的列的语法如下:ALTER TABLE ADD(column definition,CONSTRAINT definition);用于从现有表中删除列的语法如下:格式1:ALTER TABLE DROP COLUMN 列名;格式2:ALTER TABLE DROP(列名1,列名2,.);用于从现有表中删除约束的语法如下:ALTER TABLE DROP CONSTRAINT 约束名称;用于将现有表中的列设置为不可用的语法如下:ALTER TABLE SET UNUSED(列名1,列名2.);删除大型的表中的列可能要花费相当长的时间。一种较快的替代方法就是使用 ALTER TABLE 命令的 SET UNUSED 选项将此列标记为不可用。在这种情况下,该列的数据还仍然保留在表中,但是它不再可用,未使用的列可以在以后需要收回些列数据所占用的空间时进行删除。ALTER TABLE 命令在下列情况下使用:用户要添加新的列要修改数据类型的宽度或数据类型本身要包括或删除完整性约束条件 假如表为空,可以减小现有列数据类型的长度。要增加现在列的长度时,没有这些限制。,数据定义语言TRUNCATE TABLE 命令,如果只想删除表的记录,而不删除表的结构,并释放此表使用的存储空间,可以使用 TRUNCATE TABLE 命令来操作,语法如下:TRUNCATE TABLE;如果将“REUSE STORAGE”子句添加到上述命令中,则表示保留被删除的行所使用的空间,语法如下:TRUNCATE TABLE REUSE STORAGE;在命令行窗口,输入以下语法,可以查看表结构:DESC;,数据定义语言DROP TABLE 命令,DROP TABLE 命令用于从数据库中删除表,此操作即删除了表中的数据,又删除表的结构,语法如下:DROP TABLE;,数据操纵语言(DML),数据操纵语言是使用最频繁的SQL命令。它们用于查询和操纵现有表中的数据。DML命令如下:INSERTSELECTUPDATEDELETE,数据操纵语言(DML)INSERT 命令,一旦完成了创建表的第一步,必须使用数据填充表。INSERT 命令用于向表中添加一个或多个行。使用此命令时,需用逗号对值进行分隔,具有 VARCHAR2、CHAR、RAW、LONG 和 DATE 等数据类型的列的值用单引号括起来。插入单条记录的 INSERT 语句的语法如下:INSERT INTO(column,column)VALUES(value,value);将一个查询结果的记录插入到表中的 INSERT 语句的语法如下:INSERT INTO(column,column.)SELECT column,column.FROM;其中 object table name 是目标表,source table name 是数据源表。插入多条记录的 INSERT 语句的语法如下:INSERT INTO VALUES(其中 column 是列名,执行此命令时,Oracle会提示用户为表的所有列输入值,当输入完值后,要对输入的数据做提交,也就是执行 COMMIT 命令。,数据定义语言 CREATE SEQUENCE 命令,CREATE SEQUENCE 命令:将向当前数据库里增加一个新的序列号生成器。创建序列的语法如下所示:CREATE SEQUENCE schema.sequenceNameINCREMENT BY 1-设置每次步长为1START WITH 1-设置从1开始计数MINVALUE 1-设置最小计数为1MAXVALUE 999999999-设置最大计数为999999999NOCYCLE-一直累加,不循环,也可以设置 为 CYCLE(循环)CACHE 10;-设置缓存cache个序列,如果系统宕掉了或者其它情况将会导致序列不连续也可以设置为 NOCACHE(不缓存)其中关键字 schema 表示对象所有者的名字。如果我们在自己的方案中创建序列,则不需要指定所有者的姓名。sequenceName 表示该序列的名称。,数据操纵语言(DML)SELECT 命令,通过 SELECT 命令可以请求存储在表中的信息。这通常称为“查询”表。SELECT 是使用最频繁的命令。SELECT 语句的语法如下:SELECT*|DISTINCT column|expression alias,FROM;其中,“*”代表查询表中所有的列值;“DISTINCT”过滤掉指定列重复的数据;“expression”表示对列的值可以进行表达式运算;“alias”表示可以对列指定一个别名;“table name”表示要查询的表名。带有 WHERE 子句和 ORDER BY 子句的 SELECT 命令的语法如下:SELECT*|DISTINCT column|expression alias,FROM WHERE conditionORDER BY column|alias ASC|DESC,column|alias ASC|DESC,;其中,condition 是一个条件表达式;column 表示列名;alias 表示列的别名;ORDER BY 子句表示指定的排序规则;ASC 表示升序;DESC 表示降序。在 SELECT 命令中 ORDER BY 子句应该是最后一个子句。WHERE 子句还可以用于 DELETE 和 UPDATE 命令中。在这些情况下,Oracle 会根据在 WHERE 子句中指定的条件删除或更新表中的一行或多行。,数据操纵语言(DML)UPDATE 命令,有时可能需要修改存储在数据库表中的值。这时就可以对表中的现有记录使用 UPDATE 命令,来更新表中的行。使用此命令可以更新零个或多个行。如果要限定对特定的行进行更新,可以使用 WHERE 子句。UPDATE 命令的语法如下:UPDATE SET column=value,column=value,WHERE condition;在上述语法中,WHERE 子句和 SET 子句还可以包含查询。如果满足 WHERE 子句的条件,UPDATE 语句将使用所提供的值设置每一个字段。,数据操纵语言(DML)DELETE 命令,在表中插入行后,如果不再需要该数据,可以删除这些行。DELETE 命令用于从表中删除行。DELETE 命令的语法如下:DELETE FROM WHERE condition;使用 DELETE 命令可以删除零行或多行。另外,还可以删除表的所有行,而表的结构保持不变。要删除表的特定行,可以将 DELETE 命令与 WHERE 子句一起使用。WHERE 子句还可以包含查询。删除表中所有行的 DELETE 命令的语法如下:DELETE FROM;,事务处理控制语言(TCL),事务处理是作业的逻辑单元。对数据库所做的所有修改都称为事务处理。只有将事务处理修改提交后,才能执行对数据库的永久修改。事务处理以可执行的 SQL 语句开头,并以 ROLLBACK 或 COMMIT 语句明确地结束,如果使用 DDL 语句,则隐式(即自动)地结束。,事务处理控制语言(TCL)COMMIT 命令,此命令用于结束事务处理。只有借助于 COMMIT 命令,才能对数据库执行永久的事务处理修改。COMMIT 命令的语法如下:COMMIT;或COMMIT work;以上两种写法是等价的。,事务处理控制语言(TCL)SAVEPOINT 命令,保存点类似于标记,它将很长的事务处理划分为较小的事务处理。保存点用于标识以后可以回退到的事务处理中的点。这样,SAVEPOINT 与 ROLLBACK 语句联合使用,可以回退当前的部份事务处理。SAVEPOINT 的语法如下:SAVEPOINT savepoint_id;,事务处理控制语言(TCL)ROLLBACK 命令,ROLLBACK 命令用于撤消在当前事务处理中所执行的操作。可以回退整个事务处理,以便撤消由 SQL 语句执行的所有修改,也可以将事务处理回退到某个保存点,以便回退该保存点之后的 SQL 语句。要回退整个事务处理的 ROLLBACK 命令的语法如下:ROLLBACK;或ROLLBACK work;要回退到事务处理中特定的阶段,即保存点的 ROLLBACK 命令的语法如下:ROLLBACK TO SAVEPOINT savepoint_id;其中,savepoint_id 是保存点的名称,数据控制语言(DCL),数据控制语言为用户提供权限命令。数据库对象(如:表)的所有者对这些对象拥有独有的权限。所有者可以根据自己的意愿决定是否允许其他数据库用户访问对象。将权限(INSERT、SELECT)授予其他用户,将允许他们在自己的权限范围内执行操作。,数据控制语言(DCL)GRANT 命令,如果一个用户创建了一个表,则没有必要为此用户授予使用此表的任何权限。作为表的创建者,此用户继承了对表的权限。如果此用户要与其它用户共享某个对象,可以将对此特定对象的适当权限授予其它用户。对象是表、视图、序列、索引、同义词等逻辑数据存储结构。使用 SQL 命令 GRANT 可以将对象权限授予其它用户,语法如下:GRANT privileges ON object-name TO username;其中,privileges 表示权限;object-name 表示对象名称;username 表示用户名称。对部份列进行权限的 GRANT 语法如下:GRANT privileges(column,column)ON object-name TO username;如果向用户授予权限时使用了“WITH GRANT OPTION”,则获取此权限的用户反过来又可以将此权限授予其他用户,其语法如下:GRANT privileges ON object-name TO username WITH GRANT OPTION;,数据控制语言(DCL)REVOKE 命令,要撤消已授予某个用户的权限,可以使用 REVOKE 命令。此命令与 GRANT 命令的格式非常相似。GRANT 语法如下:REVOKE privilege ON object-name FROM username;,