返回首页

gbase数据、南大通用产品文档:GBase8s单个行

更新日期:2024年09月11日

在它的最简单形式中,INSERT 语句从一列值的列表创建一个新行,并将其放置在表中。
下列语句展示如何将一行添加到 stock 表:
INSERT INTO stock
VALUES (115, 'PRC', 'tire pump', 108, 'box', '6/box');
stock 表有下列列:
stock_num
标识商品的种类的编号。
manu_code
manufact 表的外键。
description
该商品的描述。
unit_price
该商品的单价。
unit
计量的单位
unit_descr
说明计量单位的特征。
前一示例中 VALUES 子句中罗列的值与 stock 表的列有一一对应关系。要编写 VALUES
子句,您必须知道表的列以及它们的前后次序。

可能的列值
VALUES 子句仅接受常量值,不接受通用的 SQL 表达式。您可提供下列值:

文字数值

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 165 -

文字 DATETIME 值

文字 INTERVAL 值

带引号的字符串

表示 NULL 的关键字 NULL

表示当前日期的关键字 TODAY

表示当前日期和时间的关键字 CURRENT(或 SYSDATE)

表示您的授权标识符的关键字 USER

表示正在运行数据库服务器的计算机名称的关键字 DBSERVERNAME(或
SITENAME)
注: MERGE 语句可以替代 INSERT 语句,可使用与 INSERT 语句一样的 VALUES 子句语法来
将行插入到表内。MERGE 语句执行源表与目标表的外部链接,然后将连接的结果集中的任何行
插入到目标表内,
这些行的连接谓词求值为 FALSE。
MERGE 语句不更改源表。
除了插入行之外,
MERGE 语句可可选地同时组合 DELETE 与 INSERT 操作,或同时组合 UPDATE 与 INSERT
操作。要获取关于 Insert 合并、Delete 合并和 Update 合并的语法与限制的更多信息,请参
阅《GBase 8s SQL 指南:语法》 中 MERGE 语句的描述。

对列值的限制
表的某些列可能不允许空值。如果您尝试向这样的列插入 NULL,则会拒绝该语句。表中
的其他列可能不允许重复的值。如果您指定与这样的列中已经存在的值重复的值,则会拒
绝该语句。有些列甚至可能限制允许的列值。请使用数据完整性约束来限制列。要获取更
多信息,请参阅 数据完整性。
限制: 请不要为包含货币值的列指定币种符号。请仅指定该金额的数值值。
数据库服务器可在数值与字符数据类型之间进行转换。您可将数值字符的字符串(例如,
'-0075.6')作为数值列的值。数据库服务器将数值字符串转换为数值。仅当该字符串不表示
数值时才会发生错误。
您可指定数值或日期作为字符列的值。数据库服务器将那个值转换为字符串。例如,如果
您指定 TODAY 作为字符列的值,则使用表示当前日期的字符串。(DBDATE 环境变量
指定所使用的格式。)

序列数据类型
表仅可有一个 SERIAL 数据类型的列。它还可有 SERIAL8 列或 BIGSERIAL 列。
当您插入值时,请为序列列指定值零。数据库服务器按次序生成下一个实际值。序列列不
允许 NULL 值。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 166 -
您可为序列列指定非零值(只要它不与那一列中任何现有的值重复),数据库服务器使用
该值。那个非零值可能为数据库服务器生成的值设置新的起始点。(数据库服务器为您生
成的下一个值是比该列中最大值大一的值。)

罗列特定的列名称
您不必为每列都指定值。相反,您可在表名称之后罗列列名称,然后仅为您命名了的那些
列提供值。下列示例展示将新行插入到 stock 表内的语句:
INSERT INTO stock (stock_num, description, unit_price, manu_code)
VALUES (115, 'tyre pump ', 114, 'SHM');
仅提供库存编号、描述、单价和制造商代码的数据。数据库服务器为其余列提供下列值:

它为未列出的序列列生成一个序列数值。

它为与它相关联的有特定缺省值的列生成一个缺省值。

它为任何允许空值的任何列生成 NULL 值,
但它不为指定 NULL 作为缺省值的任
何列指定缺省值。
您必须为未指定缺省值或不允许 NULL 值的所有列罗列并提供值。
您可以任何顺序罗列列,只要这些列的值也以相同的顺序罗列。要获取关于如何为列指定
空值或缺省值的信息,请参阅《GBase 8s 数据库设计和实现指南》。
在执行前一示例中的 INSERT 语句之后,将下列新行插入到 stock 表内:
stock_num manu_code description unit_price unit unit_descr

115 SHM tyre pump 114
unit 和 unit_descr 都为空,表示在那两列中存在 NULL 值。由于 unit 列允许 NULL 值,
因此不知道 114 美元可购买的轮胎充气泵(tire pump)的数目。当然,如果为这一列指定
了 box 缺省值,则计量单位将为 box。在任何情况下,当您将值插入到表的特定的列内时,
请注意那一行需要什么数据。

在 UNIX™ 系统上安装或重新安装数据库服务器时,INF_ROLE_SEP 环境变量会配置角
色分离的安全性功能。角色分离强制根据运行和审计数据库服务器的人员分隔管理任务。
在完成安装后,INF_ROLE_SEP 没有效果。如果未设置 INF_ROLE_SEP,那么用户
gbasedbt(缺省值)可执行所有管理任务。

n 是任意正整数。
如果在 UNIX 平台上安装 GBase 8s 时设置了 INF_ROLE_SEP,那么会实施角色分离
并会指定单独的组来负责以下每项责任:

数据库服务器管理员 (DBSA)

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 186 -

审计分析员 (AAO)

标准用户
在 UNIX 上,您可以通过更改拥有 aaodir、dbsadir 或 etc 目录的组在安装完成后的
任何时间内建立角色分隔。您可以通过将拥有这些目录的组重置为 gbasedbt 来禁用角色
分离。例如:您能对审计分析员 (AAO) 启用角色分离,而不用对数据库服务器管理员
(DBSA) 启用角色分离。
有关角色分离的安全性功能的更多信息,请参阅 GBase 8s 安全指南。要了解如何在
安装数据库服务器时配置角色分离,请参阅《GBase 8s 安装指南》。

使用 IFX_XA_UNIQUEXID_IN_DATABASE 配置参数来启用事务管理器,在相同的数据库服务
器实例中使用相同的 XID 来表示不同数据库上的全局事务。
onconfig.std 值
None
缺省值
0

0 = 禁用
1 = 启用
生效
编辑 onconfig 文件并重启数据库服务器之后。
用法
XID 是分布式 XA 事务的一个全局事务 ID。
如果设置 IFX_XA_UNIQUEXID_IN_DATABASE 配置参数为 1,则数据库服务器允许事务管理
器在相同的数据库服务器实例中使用相同的 XID 来表示不同数据库上的全局事务。因此,
数据库可是域而不是服务器。