返回首页

gbase数据、南大通用产品文档:GBase8s更新游标

更新日期:2024年09月11日

更新游标是一种特殊的游标,当可能潜在地更新行时,应用程序可使用它。要使用更新游
标,请在您的应用程序中执行 SELECT FOR UPDATE。更新游标使用可提升锁;即,当应
用程序访存行时,数据库服务器放置更新锁(意味着其他用户仍可查看该行),但当应用
程序使用更新游标和 UPDATE...WHERE CURRENT OF 更新该行时,将锁更改为排他锁。


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

使用更新游标的优势在于,您可查看该行,并确信在您查看它时以及您更新它之前,其他
用户不可使用更新游标来更改它或查看它。
提示: 在符合 ANSI 的数据库中,由于任何选择游标的行为都与更新游标一样,因此更新游标
不是必需的。
下图中的伪代码展现数据库服务器何时使用游标来放置和释放锁。
图: 为更新放置的锁


除了在 SELECT 的 WHERE 子句中的子查询,还可以在其它数据操纵语言(DML)语句
中使用子查询,包括 DELETE 和 UPDATE 的 WHERE 子句。
适用某些限制。如果子查询的 FROM 子句返回多行,并且该子句指定与其它 DML 语句
正在修改相同的表或视图,那么处于下列情况下的 DML 语句会成功。

DML 语句不能是 INSERT 语句。

子查询中的 SPL 例程没有引用正在被修改的表。

子查询不包括相关列名。

该子查询使用 DELETE 和 UPDATE 的 WHERE 子句中的子查询语法的条件指
定。
如果这些条件中的任何条件都不符合,那么 DML 操作发生错误 -360。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 144 -
以下示例修改 stock 表,通过增加价格子集的 10 % 来增加 unit_price 值。WHERE 子句通
过将 IN 运算符应用到从 stock 表查找到 unit_price 值少于 75 而返回的行来增加价格。
UPDATE stock SET unit_price = unit_price * 1.1
WHERE unit_price IN
(SELECT unit_price FROM stock WHERE unit_price < 75);

连接8aMPP 集群和UP 集群字符集是GBK 的数据库乱码..... 383