返回首页

gbase数据、南大通用产品文档:GBase8s身份鉴别功能

更新日期:2024年09月11日


GBase 8s V8.8 技术白皮书
南大通用数据技术股份有限公司
第27页

事务T1:
START TRANSACTION;
UPDATE test SET address='test1234' WHERE name='test1';
COMMIT;
事务T2:
START TRANSACTION;
UPDATE test SET address='test1234' WHERE name='test2';
COMMIT;

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
335
事务T3:
START TRANSACTION;
UPDATE test SET address='test1234' WHERE name='test1';
COMMIT;
场景1:
开启事务T1,
不提交的同时开启事务T2,
事务T1 开始执行UPDATE,
事务T2 开始执
行UPDATE,事务T1 和事务T2 都执行成功。更新不同行时,更新操作拿的是行级锁,不
会发生冲突,两个事务都可以执行成功。
场景2:
开启事务T1,
不提交的同时开启事务T3,
事务T1 开始执行UPDATE,
事务T3 开始执
行UPDATE,事务T1 执行成功,事务T3 等待超时后会出错。更新相同行时,事务T1 未提
交时,未释放锁,导致事务T3 执行不成功。

语法格式:
MERGE [INTO] [database_name.]table_name
USING table_reference
ON (conditional_exp)
[WHEN MATCHED THEN UPDATE SET col_name1=expr1 [, col_name2=expr2] ...
[WHEN NOT MATCHED THEN INSERT [(col_name3,...)] VALUES (expr3,...)]
参数说明如下:
MERGE [INTO] [database_name.]table_name 部分,table_name 必须是表,不可以是
视图,可以使用别名。
USING table_reference 部分,table_reference 必须是表,只允许有一个,可以使用别
名。
UPDATE 部分不支持DELETE 子句。
UPDATE 部分和INSERT 部分不支持WHERE 子句。
UPDATE 部分和INSERT 部分可以省略,但不可以同时省略,否则报语法错误。
UPDATE 部分和INSERT 部分位置不可以颠倒。
INSERT 的VALUES 部分不允许使用MERGE 表
UPDATE 或INSERT 中的列如果出现多次会报错。
不允许一对多更新:
如果MERGE 表中的一行与USING 表中的多行符合连接条件,
则报错。
不支持跨引擎执行。

Hive 引擎 DML 语句
HIVE 引擎不支持Long 型转化成Boolean 型,
所以语句条件中不能直接出现整型的

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 754
用法。例如a 为数值型,则不支持where a 或者having sum(a)的用法。
HIVE 引擎不支持在where 条件中or 条件加子查询,例如:
select a from s12 where a>1 or b in ( select a from t12 ); -- 不支持
select a from s12 where a>1 and b in ( select a from t12 ); -- 支持
select a from s12 where b in ( select a from t12 ); -- 支持
select a from s12 where a > 2 or a > 1; -- 支持