返回首页

gbase数据、南大通用产品文档:GBase8cSET TRANSACTION

更新日期:2024年09月11日

功能描述
为事务设置特性。事务特性包括事务隔离级别、事务访问模式(读/写或者只读)。可以设
置当前事务的特性(LOCAL),也可以设置会话的默认事务特性(SESSION)。
注意事项

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1259
设置当前事务特性需要在事务中执行(即执行SET TRANSACTION 之前需要执行
START TRANSACTION 或者BEGIN),否则设置不生效。
语法格式
设置事务的隔离级别、读写模式。
{SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS
TRANSACTION}
{ ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED }
| { READ WRITE | READ ONLY | SERIALIZABLE | REPEATABLE READ }
} [, ...]
SET TRANSACTION SNAPSHOT snapshot_id;
参数说明

LOCAL
声明该命令只在当前事务中有效。

SESSION
声明这个命令只对当前会话起作用。
取值范围:字符串,要符合标识符的命名规范。

ISOLATION_LEVEL
指定事务隔离级别,
该参数决定当一个事务中存在其他并发运行事务时能够看到什么数
据。
说明:在事务中第一个数据修改语句(SELECT、INSERT、DELETE、UPDATE、
FETCH、COPY)执行之后,当前事务的隔离级别就不能再次设置。
取值范围:
READ COMMITTED:
读已提交隔离级别,
只能读到已经提交的数据,
而不会读到未提
交的数据。这是缺省值。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1260
REPEATABLE READ:可重复读隔离级别,仅仅能看到事务开始之前提交的数据,不
能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。
SERIALIZABLE:GBase 8c 目前功能上不支持此隔离级别,等价于REPEATABLE
READ。

READ WRITE | READ ONLY
指定事务访问模式(读/写或者只读)。
示例
--开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ
ONLY。
gbase=#START TRANSACTION;
gbase=#SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ
ONLY;
gbase=#COMMIT;

写入和读写操作
关于写入和读写操作的命令:

INSERT,可向表中插入一行或多行数据。

UPDATE,可修改表中现有数据。

DELETE,可删除表中现有数据。

COPY,导入数据。
INSERT 和COPY 是纯写入的操作。并发写入操作,需要等待,对同一个表的操作,当
事务T1 的INSERT 或COPY 未解除锁定时,事务T2 的INSERT 或COPY 需等待,事务T1
解除锁定时,事务T2 正常继续。
UPDATE 和DELETE 是读写操作(先查询出要操作的行)。UPDATE 和DELETE 执行
前需要先查询数据,由于并发事务彼此不可见,所以UPDATE 和DELETE 操作是读取事务
发生前提交的数据的快照。
写入操作,
是行级锁,
当事务T1 和事务T2 并发更新同一行时,
后发生的事务T2 会等待,
根据设置的等待时长,
若超时事务T1 未提交则事务T2 执行失败;
当事务T1 和事务T2 并发更新的行不同时,事务T1 和事务2 都会执行成功。

UDT field name or field type was not set in UDTMetaData
应用程序调用了 UDTManager.createUDTClass(),但是没有先为数据结构中定义不透明类型
的每个字段指定字段名称和数据类型。
通过调用 UDTMetaData.setFieldName() 指定字段名称;
调用 UDTMetaData.setFieldType() 指
定字段类型。