管理事务
所有 SmartEDB 数据库访问都在事务中执行,以确保数据库的 ACID 特性(详情参见 SmartEDB 用户指南)。使用 SmartESQL API 时,事务处理是隐式的:运行时会自动管理事务,无需显式调用函数。具体来说,execute() 方法在执行 SELECT 语句时会启动并关闭只读事务(除非指定了 FOR UPDATE),而在执行 INSERT、UPDATE 或 DELETE 语句时会启动并关闭读写事务。
对于大多数操作,应用程序开发人员无需关注事务管理。然而,某些应用需要跨多个 SQL 语句的事务控制。在这种情况下,可以通过 Python 使用 SQL 的开始事务、提交事务和回滚事务语句来手动管理事务。例如:
cursor = conn.cursor()
cursor.execute("START TRANSACTION");
cursor.execute("UPDATE MyTable SET b=5 WHERE a=4");
cursor.execute("CHECKPOINT TRANSACTION");
cursor.execute("INSERT INTO MyTable VALUES(1,2)");
cursor.execute("COMMIT TRANSACTION");
检查点和自动检查点
正如 SmartESQL 事务控制页面中所解释的那样,在复杂的事务中,可能需要执行检查点操作,以便在事务提交之前更新索引。例如:
cursor = conn.cursor()
cursor.execute("START TRANSACTION");
cursor.execute("UPDATE MyTable SET b=5 WHERE a=4");
cursor.execute("CHECKPOINT TRANSACTION");
cursor.execute("SELECT * FROM MyTable WHERE a=4");
...
cursor.execute("COMMIT TRANSACTION");
要启用自动检查点功能,请调用 SQL 函数 autocheckpoint() 并将参数值设为 1;若要禁用,则将参数值设为 0。例如:
cursor = conn.cursor()
cursor.execute("select autocheckpoint(1)")
cursor.execute("START TRANSACTION");
cursor.execute("UPDATE MyTable SET b=5 WHERE a=4");
cursor.execute("SELECT * FROM MyTable WHERE a=4");
...
cursor.execute("COMMIT TRANSACTION");