学习Oracle Concepts-第2章 表和表簇

内容主要来源于Oracle官方文档(官网英文版和网络中文版)
Oracle Database Concepts

1.模式对象简介

数据库模式 是模式对象数据结构的逻辑容器;例如表和索引就是模式对象。
每个用户有一个模式,与用户名同名,模式包含该用户的全部数据;例如hr用户拥有hr模式,此模式包含如employees表之类的模式对象

1.1 模式对象类型

模式对象主要有一下类型:

模式对象类型 描述
数据库最重要的模式对象是表,表以行的形式存储数据
索引 一种模式对象,对于每一个被索引的表行或簇行,索引都包含一个条目,以提供直接快速的数据访问。
分区 大型表和索引的分片,每个分区有它自己的名称和可选择的存储特性。
视图 是对一个或多个表、视图中的数据的自定义表示,可以看作是保存下来的查询语句。视图实际上并不存储数据。
序列 一个由用户创建的对象,可以被多个用户共享,用于生成整数,通常用于主键值。
维度 定义多个列集之间的父子关系,列集中所有的列必须来自同一个表。
同义词 是另一个模式对象的别名,在数据字典中只有定义。
PL/SQL子程序和包 是Oracle对sql过程化的扩展。PL/SQL子程序是可以带参数调用的PL/SQL块。PL/SQL包是将关联的PL/SQL类型,变量和子程序逻辑地组合。

一些其他的不包含在模式中的对象也存储在数据库中,包括:数据库用户、角色、上下文和目录。

1.2 模式对象存储

一些模式对象将数据存储在称为段(segment)的逻辑存储结构中。例如一个未分区的堆表或索引会创建一个段。其他模式对象,例如视图和序列则只包含元数据。
Oracle数据库逻辑上将模式对象存储在表空间中。
模式和表空间没有任何关系:一个表空间可以包含来自不同的模式的对象,一个模式中的对象也可以包含在不同的表空间中。
每个对象的数据在物理上包含在一个或多个数据文件中。
如图:
段、表空间和数据文件:来源官方文档

1.3 模式对象依赖

一些模式对象引用其他对象,造成了模式对象依赖。例如一个视图包含一个引用其他表或视图的查询,或一个PL/SQL子程序调用其他子程序。如果对象A的定义引用了对象B,那么A对B来说是一个依赖对象,B对A来说是一个被引用对象。
数据库提供了一个自动机制以确保依赖对象相对于被引用对象来说一直是最新的。依赖对象被创建后,数据库跟踪依赖对象与被引用对象之间的依赖关系。当被引用对象的更改可能影响依赖对象时,依赖对象被标记为无效。例如一个表被删除,所有基于该表的视图都是不可用的。
在一个无效的依赖对象变成可用之前,必须在被引用对象新定义后被重新编译。当无效依赖对象被引用时,重新编译自动发生。
示例来源与官方文档:
创建表和过程:

CREATE TABLE test_table ( col1 INTEGER, col2 INTEGER );
CREATE OR REPLACE PROCEDURE test_proc
AS
BEGIN
FOR x IN ( SELECT col1, col2 FROM test_table )
LOOP
-- process data
NULL;
END LOOP;
END;

查询过程状态:
SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';

OBJECT_NAME STATUS
TEST_PROC VALID

向测试表添加一列:

ALTER TABLE test_table ADD col3 NUMBER;
SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';
OBJECT_NAME STATUS
TEST_PROC VALID

向被引用对象test_table添加了一列,依赖对象 test_proc依然有效。因为过程不依赖该列。
修改测试表的被引用列数据类型:

ALTER TABLE test_table MODIFY col1 VARCHAR2(20);
SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';
OBJECT_NAME STATUS
TEST_PROC INVALID

修改了被引用对象被引用列col1的数据类型之后,依赖对象test_proc变成无效的。
执行依赖对象test_proc:

BEGIN
test_proc;
END;


SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';
OBJECT_NAME STATUS
TEST_PROC VALID

执行或重新编译依赖对象test_proc之后,对象变为有效。

1.4 SYS和SYSTEM模式

所有数据库都包含的管理账户,拥有很高的特权,仅限数据库管理执行诸如开启关闭数据库、管理内存和存储、创建数据库用户等任务。

管理账户SYS在数据库被创建时自动创建。这个账户能执行所有数据的管理功能。SYS模式存储数据字典表和数据字典视图。这些表和视图对数据库的运行至关重要。SYS模式下的表只能被数据库操作,不能被任何用户修改。

管理账户SYSTEM也在数据库被创建时自动创建。SYSTEM模式存储显示管理信息的额外表和视图,以及被可选数据库选项和工具使用的表和视图。永远不要使用SYSTEM模式存储非管理用户的表。

1.5 示例模式

数据库可能包含示例模式,是一组相互关联的模式,
在Oracle文档和Oracle教学材料中经常用来演示常见的数据库任务。hr模式是一个包含雇员、部门、位置和工作历史等等信息的一个示例模式。
hr示例模式中表的实体关系图如下:
hr模式实体关系图

2.表概述

表是Oracle数据库数据组织的基本单位。
Oracle数据库表可以分为以下几个类别:
关系表:具有简单的列,是最常见的表类型;
对象表:列对应于对象类型的顶层属性;
关系表也可以分为:
堆组织表:不会以任何特定顺序存储行,默认CREATE TABLE 创建的是堆组织表;
索引组织表:按主键值对行进行排序,对于某些应用程序,组织表可以增强性能并有效的使用磁盘空间。
外部表:是一个只读表,它的元数据存储在数据库中,但其数据存储在数据库外。
表不是永久的就是临时的。永久表的定义和数据跨会话存在,临时表的定义与永久表一样,但数据仅在一个事务或会话的持续期间有效,可用于某些应用程序运行过程中生成的中间表。

2.1 列和行

表的定义包括表名和列集。一个列表示描述的实体的一个属性。例如,在employees表中的列employee_id指的是雇员实体中的雇员ID属性。
建表时指定每列的名称、数据类型和长度精度。
表可以包含虚拟列,不占用磁盘空间。数据库通过计算一组用户指定的表达式或函数,按需派生出虚拟列的列值。
创建表之后,可以使用sql插入,查询,删除和更新行。行是表中记录列信息的集合。

2.2 示例:CREATE TABLE 和 ALTER TABLE 语句

CREATE TABLE 示例:

CREATE TABLE employees
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值