BEGIN - Amazon Redshift

BEGIN

开始事务。与 START TRANSACTION 同义。

事务是单一的逻辑工作单元,而无论是包含一个命令还是多个命令。一般来说,事务中的所有命令都是在数据库的快照上执行,其开始时间由为 transaction_snapshot_begin 系统配置参数设置的值决定。

预设情况下,单独的 Amazon Redshift 操作(查询、DDL 语句、加载)自动提交到数据库。如果要暂停操作提交直到后续工作完成,您需要使用 BEGIN 语句打开一个事务,然后运行所需的命令,最后使用 COMMITEND 语句关闭事务。如果需要,您可以使用 ROLLBACK 语句停止正在进行的事务。此行为的一个例外是 TRUNCATE 命令,它在所运行的事务中提交事务,并且无法回滚。

语法

BEGIN [ WORK | TRANSACTION ] [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ] START TRANSACTION [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ] Where option is SERIALIZABLE | READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ Note: READ UNCOMMITTED, READ COMMITTED, and REPEATABLE READ have no operational impact and map to SERIALIZABLE in Amazon Redshift. You can see database isolation levels on your cluster by querying the stv_db_isolation_level table.

参数

WORK

可选关键字。

TRANSACTION

可选关键字;WORK 和 TRANSACTION 同义。

ISOLATION LEVEL SERIALIZABLE

默认情况下支持可序列化隔离,因此无论此语法是否包含在语句中,事务的行为都是相同的。有关更多信息,请参阅 管理并发写入操作。不支持任何其他隔离级别。

注意

SQL 标准定义了四个事务隔离级别,可防止脏读(事务读取并发未提交事务写入的数据)、不可重复读(事务重新读取之前已读取的数据,并发现自初始读取以后,另一个已提交的事务已更改了该数据)以及幻读(事务重新运行查询,返回满足一组搜索条件的行,然后发现这组行由于另一个最近提交的事务而发生了更改):

  • 读取未提交:脏读、不可重复读以及幻读是可能的。

  • 读取已提交:不可重复读和幻读是可能的。

  • 可重复读:幻读是可能的。

  • 可序列化:阻止脏读、不可重复读以及幻读。

虽然您可以使用这四个事务隔离级别中的任意一个,不过 Amazon Redshift 会将所有隔离级别作为可序列化级别处理。

READ WRITE

向事务提供读取和写入权限。

READ ONLY

向事务提供只读权限。

示例

以下示例开始一个可序列化事务块:

begin;

以下示例开始一个具有可序列化隔离级别和读写权限的事务块:

begin read write;