
金仓数据库的逻辑存储结构主要是指数据库中的各种数据库对象,包括:数据库集群、数据库、表、索引、视图等等。所有数据库对象都有各自的对象标识符oid(object identifiers),它是一个无符号的四字节整数,相关对象的oid都存放在相关的系统目录表中,比如数据库的oid和表的oid分别存放在sys_database,sys_class表中。下图展示了金仓数据库的逻辑存储结构。

当创建一个数据库时,会为其自动创建一个名为"public"的默认Schema。Schema是数据库中的命名空间,在数据库中创建的所有对象都是在Schema中创建。一个用户可以从同一个客户端连接中访问不同的Schema。而不同的Schema中可以有多个同名的表、索引、视图、序列、函数等等各种不同的数据库对象。
| 视频讲解如下 |
|---|
| 【赵渝强老师】国产金仓数据库的模式 |
可以通过下面的方式来查看当前数据库的Schema。
powershell
kingbase=# \dn
# 输出的信息如下:
架构模式列表
名称 | 拥有者
------------------+--------
anon | system
dbms_job | system
dbms_scheduler | system
dbms_sql | system
kdb_schedule | system
perf | system
public | system
src_restrict | system
sys_hm | system
sysaudit | system
sysmac | system
wmsys | system
xlog_record_read | system
(13 行记录)
使用命令create schema可以创建一个新的模式,下面展示了该命令的格式:
sql
CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ]
CREATE SCHEMA AUTHORIZATION role_specification [ schema_element [ ... ] ]
CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION role_specification ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role_specification
其中 role_specification 可以是:
| user_name
| CURRENT_USER
| SESSION_USER
在了解到模式的概念后,下面通过具体的操作来演示如何创建和使用它。
(1)创建一个新的数据库dbtest。
sql
scott=# create database dbtest;
(2)查看已存在的数据库列表。
sql
scott=# \l
# 输出的信息如下:
数据库列表
名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | ICU 排序 | 存取权限
-----------+--------+----------+-------------+-------------+----------+-------------------
dbtest | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | |
kingbase | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | |
scott | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | |
security | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | |
template0 | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | =c/system +
| | | | | | system=CTc/system
template1 | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | =c/system +
| | | | | | system=CTc/system
test | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | |
(7 行记录)
(3)切换到数据库dbtest。
sql
scott=# \c dbtest
您现在以用户名"system"连接到数据库"dbtest"。
(4)查看数据库dbtest中的模式。
sql
dbtest=# \dn
# 输出的信息如下:
架构模式列表
名称 | 拥有者
------------------+--------
anon | system
dbms_job | system
dbms_scheduler | system
dbms_sql | system
kdb_schedule | system
perf | system
public | system
src_restrict | system
sys_hm | system
sysaudit | system
sysmac | system
wmsys | system
xlog_record_read | system
(13 行记录)
# 这里的public的模式是创建数据库对象的默认模式。
(5)创建一个新的模式。
sql
dbtest=# create schema firstschema;
(6)重新查看数据库dbtest中的模式。
sql
dbtest=# \dn
# 输出的信息如下:
架构模式列表
名称 | 拥有者
------------------+--------
anon | system
dbms_job | system
dbms_scheduler | system
dbms_sql | system
firstschema | system
kdb_schedule | system
perf | system
public | system
src_restrict | system
sys_hm | system
sysaudit | system
sysmac | system
wmsys | system
xlog_record_read | system
(14 行记录)

(7)在firstschema模式上创建一张表。
sql
dbtest=# create table firstschema.testtable1(tid int,tname varchar(10));