CREATE SCHEMA¶
说明¶
定义一个新的模式
参数¶
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;