返回首页

gbase数据、南大通用产品文档:GBase8sSET CONSTRAINTS 语句

更新日期:2024年09月11日

使用 SET CONSTRAINTS 语句来更改处理表上的某些或所有现有的约束的方
式。
语法
仅 SQL 的 CREATE TABLE、CREATE TEMP TABLE 和 ALTER TABLE ADD
CONSTRAINT 语句可创建新的约束。SET CONSTRAINTS 语句支持下列语法,
用于修改数据库服务器强制(或不理会)单个表上的一个或多个现有的约束的方
式:

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 969

约束模式

元素
描述
限制
语法
constraint 要重置其模式的约束 必须存在,且必须都在同
一表上定义
标识符
owner
table 的所有者
必须拥有表
所有者名称
table
对于所有约束,要重
置其约束模式的表
必须在数据库中存在
标识符
用法
SET CONSTRAINTS 语句的 Constraint-mode 关键字选项包括这些:

是在语句级(IMMEDIATE)还是在事务级(DEFERRED)检查约束

是启用(ENABLED)还是禁用(DISABLED)约束

带有违反表的表上的约束的过滤模式应为 FILTERING WITH ERROR 还
是 FILTERING WITHOUT ERROR

是否要启用引用约束,而不验证(NOVALIDATE)每行中的外键值是否与
被引用的表中的主键值相匹配。
SET Transaction Mode 语句可以 SET CONSTRAINTS 关键字开始,在 SET
Transaction Mode 语句 中对此描述。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 970
SET Database Object Mode 语句的特殊情况也可以 SET CONSTRAINTS 关键字开
始,这是对 SQL 的 ANSI/ISO 标准的扩展。除了约束之外,SET Database Object
Mode 语句还可启用或禁用触发器或索引,或更改唯一索引的过滤模式。要获取
那个语句的完整语法和语义,请参阅 SET Database Object Mode 语句。
要获取关于使用 SET CONSTRAINTS 语句来启用或禁用通过 PRIMARY KEY
和 FOREIGN KEY 约束定义隐式地创建的系统定义的索引的信息,请参阅主题
SET INDEXES 语句。
约束模式的保持
您对约束的模式的任何更改都保持,直到再次修改那个约束模式的设置,或直到
删除那个约束或它的表为止。
然而,引用约束的 NOVALIDATE 模式是例外,因为这些模式在指定
NOVALIDATE 模式的 SET CONSTRAINTS 语句之外(或 ALTER TABLE ADD
CONSTRAINT 语句之外)不保持。
也就是说,当指定 NOVALIDATE 模式的 DDL 语句完成时,该约束模式转化为
sysobjstate 系统目录表为这三种可能的模式之中的外键约束记录的任何一种模
式:

ENABLED NOVALIDATE 成为 ENABLED

FILTERING WITH ERROR NOVALIDATE 成为 FILTERING WITH
ERROR

FILTERING WITHOUT ERROR NOVALIDATE 成为 FILTERING
WITHOUT ERROR.
在所有对该表的后续 DML 操作中,诸如 SQL 的 DELETE、INSERT、MERGE
或 UPDATE 语句,数据库服务器在通过它的 IMMEDIATE 或 DEFERRED 设置确定
的时间点,强制启用的外键约束,但不理会任何先前的 NOVALIDATE 模式。
在辅助服务器上的约束
在集群环境中,在可更新的辅助服务器上,不支持 SET CONSTRAINTS
ENABLED 和 SET CONSTRAINTS DISABLED 语句。(更一般地,SET
Database Object Mode 语句指定的会话级索引、触发器和约束模式不会为辅助服务
器的数据库中表对象上的 UPDATE 操作被重定向。)

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 971

功能说明
列出在GBase 8a MPP Cluster 服务器主机上的engines 信息。
语法格式
SHOW ENGINES;
示例
gbase> SHOW ENGINES\G
*************************** 1. row ***************************
Engine: MRG_GSSYS
Support: YES
Comment: Collection of identical GsSYS tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: EXPRESS
Support: DEFAULT
Comment: Express storage engine
Transactions: YES
XA: YES
Savepoints: NO
*************************** 4. row ***************************
Engine: GsSYS
Support: YES
Comment: GsSYS engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 5. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1115
Transactions: NO
XA: NO
Savepoints: NO
5 rows in set (Elapsed: 00:00:00.00)


对long long 和double 函数,主函数func()的返回值即是函数返回值。

对字符串函数,字符串可以在result 和length 参数中被返回。

result 是255 个字节长的一个缓冲区,如果返回结果不超过255,就可以把返
回结果放到result 中,
这样做的一个好处就是不用去管理result 的内存。
例如:
memcpy(result, "result value", 12);
*length = 12;

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1389
return result;

如果返回结果超过255 个字节,
就需要在func_init()或func()中申请空间并在
func_deinit()中释放了,注意不要产生内存泄露。例如在func_init 中:
在func_init 中:
initid->ptr = (char *) malloc(MAX_LEN);
在func_deinit 中:
free(initid->ptr);

为了在主函数中表明一个NULL 返回值,设定is_null 为1:
*is_null = 1;

为了在函数中表明一个错误返回,设定error 参数为1:
*error = 1;

如果,某一行func()设置*error 为1,则当前行函数值是NULL,但是并不影
响后续行的结果,func ()将继续被调用。