模式
📄字数 2.7K
👁️阅读量 加载中...
模式是数据库系统中数据对象的集合。模式可看作一个数据库对象容器,该容器可管理对象包括:表、视图、序列值、包、存储过程、存储函数、触发器、同义词、索引等。
在数据库中,模式是属于用户下的特殊对象。模式和对象的关系是一对多的关系。
不同模式下的对象是可以同名的,分属不同模式,跨模式使用时需显式指定模式名。对象访问时,模式名可以省略,缺省访问当前模式下的对象。
用户在创建时,会自动创建一个与用户名同名的模式名。
一、创建模式
CREATE SCHEMA 语句用于创建新模式,需确定当前用户是否具有创建模式权限。本章将介绍如何创建新模式,以及在系统中查看模式信息。
1.1 语法格式
提示
- 新建模式不能与已存在用户同名,因为创建用户时会默认对其创建同名模式;
- 新建模式不能与已存在角色同名,即使采用双引号引用或大小写区别,也无法创建成功。
1.2 参数说明
schema_name
:新建模式名;AUTHORIZATION user_name
:表示将新建模式属主授予给指定用户,此用户拥有该模式的一切权限(修改与删除),若不指定AUTHORIZATION用户则默认属主为当前用户。
1.3 示例
示例1
在当前库下创建名为
sch_test
的模式,设置该模式属主为GUEST
。sqlSQL> 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
的模式,并切换到该模式,然后切换回连接用户的默认模式。sqlSQL> 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
。sqlSQL> ALTER SCHEMA sch_test RENAME TO sch_test_new;
示例2
将
sch_test_new
模式更换属主为usr_test
。sqlSQL> 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
。sqlSQL> DROP SCHEMA sch_test_new;