返回首页

gbase数据、南大通用产品文档:GBase8s在修改时锁定

更新日期:2024年09月11日

当数据库服务器通过更新游标访存行时,它在访存的行上放置可提升锁。如果此操作成功,
则数据库服务器知道没有其他程序可改变那一行。由于可提升锁不是排他的,其他程序可
继续读取该行。
由于访存该行的程序可在它发出 UPDATE 或 DELETE 语句之前花费一些
时间,或它仅可访存下一行,因此,可提升锁可提升性能。当到了修改行时,数据库服务
器获取该行上的排他锁。如果已有可提升锁,则它将那个锁更改为排他的状态。
排他的行锁的持续时间依赖于是否在使用事务。如果未使用事务,则将修改了的行一写到
磁盘就释放该锁。当在使用事务时,保留所有这些锁,直到事务结束为止。此操作防止其
他程序使用那些可能回滚到它们的原始状态的行。
当在使用事务时,每当删除行时,就使用键锁。使用键锁防止发生下列错误:

程序 A 删除一行。

程序 B 插入有相同的键的一行。

程序 A 回滚它的事务,强制数据库服务器恢复它的删除了的行。
如何处理由程序 B 插入的行?
通过锁定索引,数据库服务器防止第二个程序插入行,直到第一个程序提交它的事务为止。

当前的隔离级别控制在数据库服务器读取不同的行时放置的锁,
如下一部分中讨论的那样。

rstod() 函数将以空终止的字符串转换为 double 值。

语法
mint rstod(string, double_val)
char *string;
double *double_val;
string
指向以空终止的字符串的指针。
double_val
指向保存转换了的值的 double 值的指针。

用法
=0
转换成功。
!=0
转换失败。

示例

此样例程序在 demo 目录中的 rstod.ec 文件中。
/*
* rstod.ec *

The following program tries to convert three strings to doubles. It displays the result of each
attempt.
*/

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 899 -


#include

main()
{
mint errnum;
char *string1 = "1234567887654321";
char *string2 = "12345678.87654321";
char *string3 = "zzzzzzzzzzzzzzzz";
double d;

printf("RSTOD Sample ESQL Program running.\n\n");

printf("Converting String 1: %s\n", string1);
if ((errnum = rstod(string1, &d)) == 0)
printf("\tResult = %f\n\n", d);
else
printf("\tError %d in conversion of string 1\n\n", errnum);

printf("Converting String 2: %s\n", string2);
if ((errnum = rstod(string2, &d)) == 0)
printf("\tResult = %.8f\n\n", d);
else
printf("\tError %d in conversion of string 2\n\n", errnum);

printf("Converting String 3: %s\n", string3);
if ((errnum = rstod(string3, &d)) == 0)
printf("\tResult = %.8f\n\n", d);
else
printf("\tError %d in conversion of string 3\n\n", errnum);

printf("\nRSTOD Sample Program over.\n\n");
}

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 900 -

输出
RSTOD Sample ESQL Program running.

Converting String 1: 123456788764321
Result = 1234567887654321.000000

Converting String 2: 12345678.87654321
Result = 12345678.87654321

Converting String 3: zzzzzzzzzzzzzzzz
Error -1213 in conversion of string 3

RSTOD Sample Program over.

功能
这个参数用于设置表的默认存储引擎。
GBase 8a MPP Cluster 使用存储引擎是EXPRESS 引擎。
用户不可以修改这个参数的值。
错误的存储引擎设置,将导致数据库不能正常工作。