Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


模式

📄字数 2.7K
👁️阅读量 加载中...

模式是数据库系统中数据对象的集合。模式可看作一个数据库对象容器,该容器可管理对象包括:表、视图、序列值、包、存储过程、存储函数、触发器、同义词、索引等。

在数据库中,模式是属于用户下的特殊对象。模式和对象的关系是一对多的关系。

不同模式下的对象是可以同名的,分属不同模式,跨模式使用时需显式指定模式名。对象访问时,模式名可以省略,缺省访问当前模式下的对象。

用户在创建时,会自动创建一个与用户名同名的模式名。

一、创建模式

CREATE SCHEMA 语句用于创建新模式,需确定当前用户是否具有创建模式权限。本章将介绍如何创建新模式,以及在系统中查看模式信息。

1.1 语法格式

提示

  • 新建模式不能与已存在用户同名,因为创建用户时会默认对其创建同名模式;
  • 新建模式不能与已存在角色同名,即使采用双引号引用或大小写区别,也无法创建成功。

1.2 参数说明

  • schema_name:新建模式名;
  • AUTHORIZATION user_name:表示将新建模式属主授予给指定用户,此用户拥有该模式的一切权限(修改与删除),若不指定AUTHORIZATION用户则默认属主为当前用户。

1.3 示例

  • 示例1

    在当前库下创建名为sch_test的模式,设置该模式属主为GUEST

    sql
    SQL> CREATE SCHEMA sch_test AUTHORIZATION GUEST;
         -- 模式相关信息可通过连接查询系统视图dba_users,dba_schemas查看其所属关系
    SQL> SELECT du.user_name,ds.SCHEMA_ID,ds.USER_ID,ds.SCHEMA_NAME FROM dba_users du,dba_schemas ds where du.user_id = ds.user_id and ds.SCHEMA_NAME='SCH_TEST';
    +-----------+-----------+---------+-------------+
    | USER_NAME | SCHEMA_ID | USER_ID | SCHEMA_NAME |
    +-----------+-----------+---------+-------------+
    | GUEST     | 107       | 4       | SCH_TEST    |
    +-----------+-----------+---------+-------------+
    • 示例2

    创建用户时会默认对其创建同名模式。

    sql
    -- 创建测试用户
    SQL> CREATE USER usr_test1  IDENTIFIED BY '123QWEasd!@';
    -- 切换到新建用户,查询默认schema
    SQL>  select current_schema;
    +-----------+
    |   EXPR1   |
    +-----------+
    | USR_TEST1 |
    +-----------+
    -- 查询与用户同名的模式信息
    SQL> select SCHEMA_NAME, USER_ID from dba_schemas where schema_name = 'USR_TEST1';
    
    +-------------+---------+
    | SCHEMA_NAME | USER_ID |
    +-------------+---------+
    | USR_TEST1   | 110     |
    +-------------+---------+

二、切换模式

SET SCHEMA 语句用于切换当前会话的模式,可跨用户切换模式,但此语句不会改变当前会话的连接用户。

2.1 语法格式

2.2 参数说明

  • schema_name:切换模式名,可用单引号包裹;
  • DEFAULT:切换到当前会话所登录用户的默认同名模式下。

2.3 示例

  • 示例1

    在当前库下创建名为sch_test的模式,并切换到该模式,然后切换回连接用户的默认模式。

    sql
    SQL> CREATE SCHEMA sch_test AUTHORIZATION GUEST;
     -- 查询当前模式
    SQL> SELECT CURRENT_SCHEMA();
    
    +--------+
    | EXPR1  |
    +--------+
    | SYSDBA |
    +--------+
    -- 切换模式
    SQL> SET CURRENT SCHEMA sch_test;
    -- 会切换回SYSDBA模式,即SYSDBA用户的默认同名模式
    SQL> SET SCHEMA DEFAULT;

三、查看模式

创建的模式信息保存在数据库的字典中,几个常用的字典及视图如下:

  • SYS_SCHEMAS:该系统表用于存储、管理系统库和用户库中所有创建的模式,查看需在系统库下有管理员权限。

  • ALL_SCHEMAS:该系统视图用于查看当前登录用户下的模式相关信息。

  • DBA_SCHEMAS:该系统视图用于查看当前库中所有模式,查看需要在当前库下有DBA权限。

  • USER_SCHEMAS:该系统视图用于查看当前登录用户下的模式相关信息。

可根据当前权限按需使用对应的系统表及视图,查看模式名、模式ID、属主的用户ID等信息,与USER信息表连接查询,可查看所属关系,综合示例见第一章示例

四、修改模式

ALTER SCHEMA 语句用于修改模式,需确定当前用户是否具有修改模式权限。可对模式进行重命名或修改模式的属主。

4.1 语法格式

提示

仅用户创建的非同名模式允许修改模式名,默认的同名模式不允许修改。

4.2 参数说明

  • schema_name:要修改的模式名;
  • RENAME TO new_name:重命名模式,new_name为重命名后的新模式名;
  • OWNER TO user_name:更改模式的属主,user_name为模式新属主的名称。

4.3 示例

  • 示例1

    sch_test模式重命名为sch_test_new

    sql
    SQL> ALTER SCHEMA sch_test RENAME TO sch_test_new;
  • 示例2

    sch_test_new模式更换属主为usr_test

    sql
    SQL> CREATE USER usr_test IDENTIFIED BY '123QWEasd!@';
    SQL> ALTER SCHEMA sch_test_new OWNER TO usr_test;

五、删除模式

DROP SCHEMA 语句用于删除模式,需确定当前用户是否具有删除模式权限。删除模式操作不可逆,删除前请确认是否不再使用,以及权限依赖等问题。

5.1 语法格式

提示

  • 仅用户创建的非同名模式允许单独删除,默认的同名模式不允许单独删除(只能与用户一同删除)。
  • 删除用户时,同时删除创建用户时默认创建的模式和属主为该用户的所有模式。

5.2 参数说明

  • schema_name:删除的模式名称;
  • AlterBehavior:可选关键字RESTRICT(默认值)或CASCADE(同CASCADE CONSTRAINTS);
    • CASCADE:强制删除模式,无论该模式及其对象是否被其他用户或模式对象依赖,都强制删除模式,删除后受依赖关系影响的对象将置为无效状态;
    • RESTRICT:删除模式时,只有在该模式及其对象没有被其他用户或模式对象依赖,才能成功删除;如果模式拥有其他被依赖对象,数据库返回错误,提示无法删除模式。

5.3 示例

  • 示例1

    删除模式sch_test_new

    sql
    SQL> DROP SCHEMA sch_test_new;