分类: Oracle
2014-12-02 16:49:08
一、Oracle的schema
A schema is a collection of database objects (used by a user.).
Schema objects are the logical structures that directly refer to the database’s data.
A user is a name defined in the database that can connect to and access objects.
Schemas and users help database administrators manage database security.
从定义中我们可以看出schema为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名字,这些名字就是我们在企业管理器的方案下看到的许多类似用户名的节点,这些类似用户名的节点其实就是一个schema,schema里面包含了各种对象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。
一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。这也就是我们在企业管理器的方案下看到schema名都为数据库用户名的原因。Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决(Oracle中虽然有create schema语句,但是它并不是用来创建一个schema的),在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同,所有我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解一些。
一个用户有一个缺省的schema,其schema名就等于用户名,当然一个用户还可以使用其他的schema。如果我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的sheman名。比如我们在访问数据库时,访问scott用户下的emp表,通过select * from emp; 其实,这sql语句的完整写法为select * from scott.emp。在数据库中一个对象的完整名称为schema.object,而不属user.object。类似如果我们在创建对象时不指定该对象的schema,在该对象的schema为用户的缺省schema。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。
二、PostgreSQL的schema
一个数据库包含一个或多个定名的模式,模式包含其他数据库对象。
每当我们创建一个新的数据库时,PostgreSQL都为我们主动创建public模式。当登录到该数据库时,若是没有特别的指定,我们将以public操纵各类对象。
因此,Oracle一个数据库的默认schema是和用户名同名的schema;而PostgreSOL的一个数据库的默认schema是名为public的schema。假设Oracle和PostgreSQL都是一个数据库名为SCOTT,则Oracle中该库的默认schema名为SCOTT,而PostgreSQL中该库的默认schema名为public。对于“select * from dept”,在Oracle中相当于“select * from scott.dept”,而在PostgreSQL中相当于“select * from public.dept”。
三、两者操作schema语句的区别
Oracle虽然也有create schema语句,但不是创建一个新的schema,基本上没用。
CREATE SCHEMA
Purpose:Use the CREATE SCHEMA to create multiple tables and views and perform multiple grants in a single transaction.
To execute a CREATE SCHEMA statement, Oracle executes each included statement. If all statements execute successfully, Oracle commits the transaction. If any statement results in an error, Oracle rolls back all the statements.
Note:This statement does not actually create a schema. Oracle automatically creates a schema when you create a user (see CREATE USER). This statement lets you populate your schema with tables and views and grant privileges on those objects without having to issue multiple SQL statements in multiple transactions.
在PostgreSQL的TestDb1中已有public schema,可以通过create schema创建其他schema,并且可以和数据库名相同:
例如:create schema "TestSchema";
create schema "TestDb1";
可以使用alter schema改变schema的属性:
例如:alter schema "TestSchema" rename to "TestSchema1";
可以用drop schema删除schema:
例如:drop schema "TestSchema1"