事务
数据库中的事务是指由一个或多个数据库操作组成的逻辑工作单元。事务是一连串的数据库操作符,如读取(查询)和写入(更新或插入),它们被视为一个不可分割且一致的单元。事务的主要目的是确保数据完整性和维护数据库的 ACID(原子性、一致性、隔离性、持久性)属性。
只读事务
RisingWave 支持只读事务,事务中的所有读取都针对一致的 Hummock 快照执行。Hummock 是 RisingWave 中基于 LSM-Tree 的存储引擎,专门针对流式工作负载进行了优化。
要启动事务,可使用 START TRANSACTION READ ONLY
或 BEGIN READ ONLY
命令。随后可以执行查询,从一致快照中读取数据。要最终完成事务并将查询作为单个单元提交,可使用 COMMIT
命令。
请注意,在事务启动但尚未提交时,不允许修改数据。事务中不允许使用下列语句:
- 所有 DDL 语句(
CREATE
、ALTER
和DROP
) - 大多数 DML 语句(
INSERT
、UPDATE
和DELETE
) - 与
USER
有关的语句。这类语句可能与 DDL 语句重叠。 - 所有与权限相关的语句,包括
GRANT
和REVOKE
。
CDC 表内的事务
创建表格用于摄取 CDC 数据流时,可通过在 CREATE TABLE
语句的 WITH 子句中将 transactional
设置为 true
来启用此功能。请注意,只有在使用本地 MySQL CDC、PostgreSQL CDC 或 Citus CDC 连接器时,此功能才可用。
出于性能考虑,无法保证涉及更改超过 4096 行的事务。