事务控制
正如在 SmartEDB 事务控制页面中所解释的那样,事务是与数据库进行操作的一个工作单元,所有数据库操作都必须在事务块内实现。默认情况下,SmartESQL 在单个事务中执行所有语句;即运行时会隐式执行开始事务,然后执行语句,并通过提交事务来关闭事务。这被称为自动提交。
有时可能需要在一个事务中执行多条语句。这可以通过显式地开始和结束(提交或回滚)事务来实现。例如:
XSQL>create table foo(name string primary key);
XSQL>start transaction;
XSQL>insert into foo values ('one');
XSQL>insert into foo values ('two');
XSQL>commit transaction;
XSQL>select * from foo;
name
----------------------------------------------------------------------
one
two
Selected records: 2
在单个事务中执行一系列操作时,可能需要访问当前事务中新插入或修改的数据库对象。这要求更新该对象参与的所有索引。通常情况下,索引是在提交事务操作期间更新的。但在必要时,也可以通过显式调用检查点事务方法在提交事务之前更新索引。例如:
XSQL>start transaction;
XSQL>insert into foo values ('three');
XSQL>select * from foo;
name
----------------------------------------------------------------------
one
two
Selected records: 2
XSQL>checkpoint transaction;
XSQL>select * from foo;
name
----------------------------------------------------------------------
one
two
three
Selected records: 3
XSQL>insert into foo values ('four');
XSQL>commit transaction;
XSQL>select * from foo;
name
----------------------------------------------------------------------
one
two
three
four
Selected records: 4
在某些应用程序编程接口(API)中,可以启用自动检查点功能,以便在提交事务之前隐式更新相应的索引。
检查点
当一个索引字段被事务修改时,该对象将从为该类定义的所有索引中移除,无论修改的字段是否存在于其他索引中。一旦对象从索引中移除,就无法通过任何搜索功能定位该对象。在事务提交时,对象会被重新放入索引中。检查点事务方法是唯一能在事务内将对象放回索引的方法,从而使对象对选择操作可见。请注意,检查点操作仅在 MVCC 事务管理器中有意义。如果 MURSIW 是写事务,则一次只允许一个事务。
自动检查点
自动检查点功能与自动提交不同,它会在每次向数据库对象插入、更新或删除数据时更新所有索引。因此,在同一事务内的其他操作可以获取到数据库的当前状态。这些索引更新以及它们所引用的数据库对象会“临时”应用到数据库中,但如果事务回滚,这些更新就会被“撤销”。 请注意,自动检查点的行为与显式调用检查点事务方法之间存在细微差别。自动检查点功能会影响每次插入、更新或删除操作,而检查点事务方法则会影响事务执行到目前为止的所有插入、更新或删除操作。
本地语言接口
请使用以下链接查看针对您的开发环境的详细说明和示例:
开发语言 | 说明 |
---|---|
C | C 语言中的事务管理 |
C++ | C++ 语言中的事务管理 |
Java | Java 语言中的事务管理 |
C# | C# 语言中的事务管理 |
Python | Python 语言中的事务管理 |