模式
Schema又称作模式。
通过管理Schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的Schema下而不引起冲突。
每个数据库包含一个或多个Schema,数据库中的每个Schema包含表和其他类型的对象。
数据库创建初始,默认具有一个名为public的Schema,且所有用户都拥有此Schema的usage权限,只有系统管理员和初始化用户可以在public Schema下创建函数、存储过程和同义词对象,其他用户即使赋予create权限后也不可以创建上述三种对象。
可以通过Schema分组数据库对象。
相同的数据库对象名称可以应用在同一数据库的不同Schema中,而没有冲突。
具有所需权限的用户可以访问数据库的多个Schema中的对象。
CREATE USER创建用户的同时,系统会在执行该命令的数据库中,为该用户创建一个同名的SCHEMA。
创建模式的语法格式
--根据指定的名称创建模式
CREATE SCHEMA schema_name [ AUTHORIZATION user_name ] [WITH BLOCKCHAIN] [ schema_element [ ... ] ];
--根据用户名创建模式
CREATE SCHEMA AUTHORIZATION user_name [ schema_element [ ... ] ];
参数说明
schema_name:模式名称。
AUTHORIZATION user_name:指定模式的所有者。当不指定schema_name时,把user_name当作模式名,此时user_name只能是角色名。
WITH BLOCKCHAIN:指定模式的防篡改属性,防篡改模式下的行存普通用户表将自动扩展为防篡改用户表。
schema_element:在模式里创建对象的SQL语句。
----创建一个角色role1
create role role1 identified by 'role1@123456';
---- 为用户role1创建一个同名schema,子命令创建的表films和winners的拥有者为role1
create schema authorization role1
create table films (title text, release date, awards text[])
create view winners as select title,release from films where awards is not null;


修改模式的语法格式
--修改模式的防篡改属性
ALTER SCHEMA schema_name { WITH | WITHOUT } BLOCKCHAIN
--修改模式的名称
ALTER SCHEMA schema_name RENAME TO new_name;
--修改模式的所有者
ALTER SCHEMA schema_name OWNER TO new_owner;
----将当前模式role1更名为role_new
alter schema role1 rename to role_new;
----新建用户并更改 role_new 的所有
create user lvzz password 'lvzz@123456';
alter schema role_new owner to lvzz;

删除模式的语法格式
DROP SCHEMA [ IF EXISTS ] schema_name [, ...] [ CASCADE | RESTRICT ];
----删除schema
drop schema role_new cascade;

课后作业
1、创建一个名为tpcds的模式
create schema tpcds;
\dn+

2、创建一个用户tim, 并将tpcds的owner修改为tim,且修改owner前后分别使用\dn+查看模式信息
create user tim password 'tim@123456';
\dn+
alter schema tpcds owner to tim;
\dn+

3、重命名tpcds为tpcds1
alter schema tpcds rename to tpcds1;
\dn+

4、在模式tpcds1中建表customer、插入记录和查询记录
create table tpcds1.lvzz(id int, name varchar(20));
insert into tpcds1.lvzz values(1,'lvzz');
select * from tpcds1.lvzz;

5、删除模式tpcds1
drop schema tpcds1 cascade;
drop user tim;





