1.概述
模式(schema)可以看着是一个表的集合。
一个模式可以包含视图、索引、数据类型、函数和操作符等。
相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。
2.优势:
- 允许多个用户使用一个数据库并且不会互相干扰。
- 将数据库对象组织成逻辑组以便更容易管理。
- 第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。
3.创建和删除模式
3.1创建模式
```sql —语法 CREATE SCHEMA 模式名称;
—示例 runoobdb=# create schema myschema; CREATE SCHEMA
输出CREATE SCHEMA 即表示创建成功
<a name="GvdxC"></a>
##### 3.1.1在模式下创建表格
```sql
--示例
CREATE TABLE myschema.company(
ID INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(25),
SALARY DECIMAL(18,2),
PRIMARY KEY (ID)
);
3.2删除模式
--删除一个为空的模式(其中的所有对象已经被删除):
DROP SCHEMA schema名称;
--示例
--先创建一个空的SCHEMA;
runoobdb=# create schema testschema;
CREATE SCHEMA
--然后删除
runoobdb=# DROP SCHEMA testschema;
DROP SCHEMA
--删除一个模式以及其中包含的所有对象:
DROP SCHEMA schema名称 CASCADE;
--示例
--先创建一个空的SCHEMA;
runoobdb=# create schema schema2;
CREATE SCHEMA
--在SCHEMA中创建表
runoobdb=# CREATE TABLE schema2.company(
runoobdb(# ID INT NOT NULL,
runoobdb(# NAME VARCHAR(20) NOT NULL,
runoobdb(# AGE INT NOT NULL,
runoobdb(# ADDRESS CHAR(25),
runoobdb(# SALARY DECIMAL(18,2),
runoobdb(# PRIMARY KEY (ID)
runoobdb(# );
CREATE TABLE
--删除
runoobdb=# DROP SCHEMA schema2 CASCADE;
注意: 递归删除 表 schema2.company
DROP SCHEMA
--查看该模式还存不存在
runoobdb=# SELECT * FROM information_schema.schemata
runoobdb-#
发现已经被删除了
4.查看模式
SELECT * FROM information_schema.schemata
--示例
runoobdb=# select * from information_schema.schemata;
catalog_name | schema_name | schema_owner | default_character_set_catalog | default_character_set_schema | default_character_set_name | sql_path
--------------+--------------------+--------------+-------------------------------+------------------------------+----------------------------+----------
runoobdb | myschema | postgres | | | |
runoobdb | information_schema | postgres | | | |
runoobdb | public | postgres | | | |
runoobdb | pg_catalog | postgres | | | |
runoobdb | pg_toast_temp_1 | postgres | | | |
runoobdb | pg_temp_1 | postgres | | | |
runoobdb | pg_toast | postgres | | | |
(7 行记录)
4.1查看某个模式所有表格
--语句
select * from pg_tables where schemaname = 'schema_name';
--示例
runoobdb=# select * from pg_tables where schemaname = 'myschema';
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
------------+-----------+------------+------------+------------+----------+-------------+-------------
myschema | company | postgres | | t | f | f | f
(1 行记录)
4.2查看模式中的某个表格的内容
--语句
select * from 模式名称.表格名称;
--示例,查看myschema模式中company表中的内容
runoobdb=# select * from myschema.company;
id | name | age | address | salary
----+------+-----+---------+--------
(0 行记录)