南大通用 GBase8s 之创建兼容ANSI的数据库

52 阅读4分钟

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

在使用 GBase 8s 数据库时,创建兼容 ANSI 的数据库是一个重要的功能,它可以帮助开发者更好地符合 SQL 语言的 ANSI/ISO 标准。本文将详细介绍如何创建兼容 ANSI 的数据库,并探讨不同模式下的数据库特性及其使用场景。

创建数据库的模式

在 GBase 8s 中,创建数据库时可以选择不同的模式,每种模式都有其特定的用途和特性:

  1. 无日志模式:这种模式下的数据库性能较好,但不支持逻辑恢复操作。
  2. 缓冲式日志模式:支持数据库逻辑恢复,同时避免频繁的 I/O 操作,适合生产系统。
  3. 无缓冲式日志模式:会有频繁的 I/O 操作,但一旦数据库宕机,数据损失较小。
  4.  ANSI 模式:一种特殊的无缓冲式日志模式,符合额外的 ANSI 规则。

创建数据库的语法

创建数据库的基本语法如下:

CREATE DATABASE database [IN dbspace] [WITH LOG | WITH BUFFERED LOG | WITH LOG MODE ANSI] [NLSCASE SENSITIVE | NLSCASE INSENSITIVE];

参数说明

  • database:新数据库的名称,必须在数据库服务器中唯一。
  • dbspace:数据库存储数据的 dbspace,默认为   rootdbs  。
  • WITH LOG:启用日志记录。
  • WITH BUFFERED LOG:启用缓冲日志记录。
  • WITH LOG MODE ANSI:创建兼容 ANSI 的数据库。
  • NLSCASE SENSITIVE:创建区分大小写的数据库。
  • NLSCASE INSENSITIVE:创建不区分大小写的数据库

使用说明

  1. 当前数据库:  CREATE DATABASE   指定的数据库将成为当前数据库。
  2. 权限设置:如果未设置   DBCREATE_PERMISSION   配置参数,则任何用户都可以创建数据库。如果设置了该参数,则只有指定的用户才能创建数据库。  gbasedbt   用户始终具有创建数据库的权限。

示例配置

 DBCREATE_PERMISSION        - Specifies the users who can create
                              databases (by default, any user can).
                              Add a DBCREATE_PERMISSION entry
                              for each user who needs database
                              creation privileges. Ensure user
                              gbasedbt is authorized when you
                              first initialize GBase.
                              Example:
                              DBCREATE_PERMISSION gbasedbt

创建不同模式的数据库

(一)无日志模式

CREATE DATABASE db_no;

这种模式下的数据库不能使用事务日志记录的事务或语句,如   BEGIN WORK  、  COMMIT WORK  、  ROLLBACK WORK   等。

(二)缓冲日志模式

CREATE DATABASE db_buf WITH BUFFERED LOG;

使用缓冲日志可以提高日志记录的性能,但可能面临失败后无法恢复最后几个事务的风险。

(三)无缓冲日志模式

CREATE DATABASE db_unbuf WITH LOG;

在高可用集群的辅助服务器上创建数据库时,必须使用   WITH LOG   选项。

(四)兼容 ANSI 的数据库

CREATE DATABASE db_ansi WITH LOG MODE ANSI;

兼容 ANSI 的数据库具有以下特性:

  • 所有 SQL 语句自动包含在事务中。
  • 使用无缓冲的日志记录。
  • 实施所有者命名,查看表、视图等对象时必须使用所有者名称。
  • 默认隔离级别为   REPEATABLE READ  。
  • 对象上的默认权限与非兼容 ANSI 的数据库不同。
  • 所有的   DECIMAL   数据类型是定点值。

(五)区分大小写的数据库

CREATE DATABASE db_sens1 WITH LOG;
CREATE DATABASE db_sens2 WITH LOG NLSCASE SENSITIVE;

在区分大小写的数据库中,布尔条件   'M' MATCHES 'm'   计算为假。

(六)不区分大小写的数据库

CREATE DATABASE db_insens1 WITH LOG NLSCASE INSENSITIVE;

在不区分大小写的数据库中,NCHAR 和 NVARCHAR 列的字符串处理不考虑字母大小写。

查询数据库属性

可以通过查询   sysmaster:sysdatabases   表来获取数据库的属性信息:

SELECT * FROM sysmaster:sysdatabases WHERE name = 'db_insens2';

属性说明

列名类型描述
name char(128)数据库名称 
partnuminteger数据库的 systables 表的分区编号(tblspace ID)
ownerchar(32) 数据库创建者的用户 ID  
createddate创建日期  
is_logginginteger 如果启用日志记录,则为 1;否则为 0  
is_buff_loginteger如果是缓冲日志记录,则为 1;否则为 0 
is_ansi integer如果 ANSI/ISO 兼容,则为 1;否则为 0  
is_nlsinteger如果启用 GLS,则为 1;否则为 0
is_case_insensinteger如果 NCHAR 和 NVARCHAR 列区分大小写,则为 1;否则为 0  
flagssmallint日志记录标志

                                                                                                
在 GBase 8s 中,创建兼容 ANSI 的数据库可以帮助开发者更好地符合 SQL 语言的 ANSI/ISO 标准。通过本文的介绍,你可以了解不同模式下的数据库特性及其使用场景。希望本文能帮助你在数据库开发中更高效地创建和管理数据库。

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。