表是用来存储、管理数据的基本单元(二维表:有行和列组成)。
表的类型
- 堆表(heap table):数据存储时,行是无序的,对它的访问采用全表扫描(HWM以下)或者通过索引检索。
- 分区表
- 索引组织表(IOT)
- 临时表
- 压缩表
- 簇表
- 嵌套表
表名和列名的命名规则
Table names and column names must:
• Begin with a letter
• Be 1–30 characters long
• Contain only A–Z, a–z, 0–9, _, $, and #
• Not duplicate the name of another object owned by the same user
• Not be an Oracle server reserved word
通过将名称括在双引号内,所有这些规则(除长度外)都可以打破,但在后面引用对象时,也一定要用双引号指定它。同样的限制也适用于列名称。
比如,我们可以去创建一个中文的表名:
SQL> create table "表1" (id int);
SQL> insert into "表1" values(1);
SQL> select * from "表1";
SQL> drop table "表1";
另外,对象名称总是区分大小写的:
create table t1(emp_id number(5));
create table "t1"(emp_id number(5));
模式(Schema)
模式(Schema)是一种逻辑结构,它对应于用户,每建一个用户就有一套模式与之对应。
我们通常说对象的唯一标识符是前缀为模式名加上对象名称,如 hr.emp。
同一模式下的同类对象是不可以重名的。比如在 hr 模式里,表 emp 是唯一的,但在不同模式下可以重名。
更进一步:名称空间
Oracle通过namespace来管理schema object的名字,namespace中对象所有名称都必须由模式和名称唯一标识。不同名称空间中的对象可以共享相同的名称。名称空间定义了一组对象类型,同一个名称空间里的不同对象不能同名,而不同的名称空间中的不同对象可以共享相同的名称。
1)表,视图,序列,同义词是不同类型的对象,但它们属于同一名称空间, 因此在同一模式下也是不可以重名的,比如 hr 下不可以让一个表名和一个视图名同名。
2)索引、约束有自己的名称空间,所以在 hr 模式下,可以有表 A,索引 A 和约束 A 共存。
考点:在同一个模式中,表、视图和同义词不能同名。
以下类型的对象使用同一个namespace,即同一用户的这些对象不能重名:
Tables • Views • Sequences • Private synonyms • Stand-alone procedures • Stand-alone stored functions • Packages • Materialized views • User-defined types
以下类型的对象使用自己的namespace:
Indexes • Constraints • Clusters • Database triggers • Private database links • Dimensions(维度)
因此,即使是在同样的模式中,索引的名称也可能与表相同。
以下Non schema objects使用自己的namespace:
User roles • Public synonyms • Public database links • Tablespaces • Profiles • Parameter files (PFILEs) and server parameter files (SPFILEs)