博客 / 詳情

返回

【趙渝強老師】國產金倉數據庫的模式

金倉數據庫的邏輯存儲結構主要是指數據庫中的各種數據庫對象,包括:數據庫集羣、數據庫、表、索引、視圖等等。所有數據庫對象都有各自的對象標識符oid(object identifiers),它是一個無符號的四字節整數,相關對象的oid都存放在相關的系統目錄表中,比如數據庫的oid和表的oid分別存放在sys_database,sys_class表中。下圖展示了金倉數據庫的邏輯存儲結構。

image.png

當創建一個數據庫時,會為其自動創建一個名為“public”的默認Schema。Schema是數據庫中的命名空間,在數據庫中創建的所有對象都是在Schema中創建。一個用户可以從同一個客户端連接中訪問不同的Schema。而不同的Schema中可以有多個同名的表、索引、視圖、序列、函數等等各種不同的數據庫對象。視頻講解如下:

https://www.bilibili.com/video/BV1i4iyBgEur/?aid=115852598974...

可以通過下面的方式來查看當前數據庫的Schema。

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可以創建一個新的模式,下面展示了該命令的格式:

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。

scott=# create database dbtest;

(2)查看已存在的數據庫列表。

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。

scott=# \c dbtest 

您現在以用户名"system"連接到數據庫"dbtest"。

(4)查看數據庫dbtest中的模式。

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)創建一個新的模式。

dbtest=# create schema firstschema;

(6)重新查看數據庫dbtest中的模式。

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模式上創建一張表。

dbtest=# create table firstschema.testtable1(tid int,tname varchar(10));
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.