CREATE SCHEMA

说明

定义一个新的模式

语法

create_schema ::=

schema_element ::=

参数

schemaname

要创建的模式名字.如果省略,则使用用户名作为模式名.

IF NOT EXISTS

当不存在一个同名的关系时会创建模式,否则不会创建模式,且会打印NOTICE提示信息

owner

将拥有该模式的用户名.如果省略,缺省为执行该命令的用户名.只有管理员用户才能创建不属于自己的模式.

domain_definition

指定在模式内创建域的 CREATE DOMAIN 语句。

table_definition

指定在模式内创建表的 CREATE TABLE 语句。

view_definition

指定在模式内创建视图的 CREATE VIEW 语句。

grant_statement

指定授予用户或角色权限的GRANT 语句。

AUTHORIZATION

使用该关键字可指定将模式创建在哪个用户下。

  • 当不指定 AUTHORIZATION 关键字时,模式创建在当前用户下

  • 当指定 AUTHORIZATION 关键字时
    • 指定模式名:该模式会创建到指定的用户下

    • 不指定模式名,且后面没有任何子句:
      • owner 不存在,直接报错
      • owner 存在,可执行成功,但会报警告(因为不指定模式名,此时会创建与当前 owner 同名的模式,而在创建 owner 时已经创建过该模式了)

注解

CREATE SCHEMA 提供了在单个语句中创建域、表、视图以及授予对象权限的方法。如果在创建任何对象或授予任何权限(这些是在 CREATE SCHEMA 语句中指定的)时发生错误,则不会创建任何对象。

创建的对象不必按逻辑顺序出现,但引用其它视图的视图除外。例如,GRANT 语句可以在创建某个对象之前授予该对象的权限,CREATE TABLE语句可以出现在创建该表所使用域的CREATE DOMAIN之前,CREATE VIEW 语句也可以出现在创建该视图所引用表的 CREATE TABLE 语句之前。同样,CREATE TABLE 语句中声明的外键可以指向后面指定的表。例外情况是,如果一个视图的选择语句引用另一个视图,则必须在指定引用视图之前指定被引用的视图。CREATE SCHEMA语句符合SQL标准。并与ORALCE的SCHEMA兼容,每一个数据库用户都默认拥有同名SCHEMA。

示例

示例1: 创建模式、表、视图

--  清理环境
DROP SCHEMA schm1 CASCADE;


--  创建模式
CREATE SCHEMA schm1;

--  新建模式下创建表
CREATE TABLE schm1.tab1 (a INT, b INT);

--  新建模式下创建视图
CREATE VIEW schm1.view1 AS SELECT a FROM schm1.tab1;


--  删除视图、表和模式
DROP VIEW schm1.view1;
DROP TABLE schm1.tab1;
DROP SCHEMA schm1;

示例2: 创建模式(授权给指定用户)

--  清理环境
DROP SCHEMA user_schm2 CASCADE;
DROP USER user_schm2_user;


--  创建用户
CREATE USER user_schm2_user;

--  创建模式
CREATE SCHEMA user_schm2 AUTHORIZATION user_schm2_user;

--  新建模式下创建表
CREATE TABLE user_schm2.tab2 (a INT, b INT);

--  新建模式下创建视图
CREATE VIEW user_schm2.view2 AS SELECT a FROM user_schm2.tab2;


--  删除视图、表、模式和用户
DROP VIEW user_schm2.view2;
DROP TABLE user_schm2.tab2;
DROP SCHEMA user_schm2;
DROP USER user_schm2_user;

示例3: 创建模式、域类型、表

--  清理环境
DROP SCHEMA schm3 CASCADE;


--  创建模式
CREATE SCHEMA schm3;

--  创建模式(使用 IF NOT EXISTS)(不会创建)
CREATE SCHEMA IF NOT EXISTS schm3;

--  新建模式下创建域类型
CREATE DOMAIN schm3.dm3 INT NOT NULL;

--  新建模式下创建表
CREATE TABLE schm3.tab3 (a schm3.dm3);


--  删除表、域类型和模式
DROP TABLE schm3.tab3;
DROP DOMAIN schm3.dm3;
DROP SCHEMA schm3;