BEGIN
开始事务。与 START TRANSACTION 同义。
事务是单一的逻辑工作单元,而无论是包含一个命令还是多个命令。一般来说,事务中的所有命令都是在数据库的快照上执行,其开始时间由为 transaction_snapshot_begin
系统配置参数设置的值决定。
预设情况下,单独的 Amazon Redshift 操作(查询、DDL 语句、加载)自动提交到数据库。如果要暂停操作提交直到后续工作完成,您需要使用 BEGIN 语句打开一个事务,然后运行所需的命令,最后使用 COMMIT 或 END 语句关闭事务。如果需要,您可以使用 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.
参数
- WORK
-
可选关键字。
- TRANSACTION
-
可选关键字;WORK 和 TRANSACTION 同义。
- ISOLATION LEVEL SERIALIZABLE
-
默认情况下支持可序列化隔离,因此无论此语法是否包含在语句中,事务的行为都是相同的。有关更多信息,请参阅 管理并发写入操作。不支持任何其他隔离级别。
注意 SQL 标准定义了四个事务隔离级别,可防止脏读(事务读取并发未提交事务写入的数据)、不可重复读(事务重新读取之前已读取的数据,并发现自初始读取以后,另一个已提交的事务已更改了该数据)以及幻读(事务重新运行查询,返回满足一组搜索条件的行,然后发现这组行由于另一个最近提交的事务而发生了更改):
-
读取未提交:脏读、不可重复读以及幻读是可能的。
-
读取已提交:不可重复读和幻读是可能的。
-
可重复读:幻读是可能的。
-
可序列化:阻止脏读、不可重复读以及幻读。
虽然您可以使用这四个事务隔离级别中的任意一个,不过 Amazon Redshift 会将所有隔离级别作为可序列化级别处理。
-
- READ WRITE
-
向事务提供读取和写入权限。
- READ ONLY
-
向事务提供只读权限。
示例
以下示例开始一个可序列化事务块:
begin;
以下示例开始一个具有可序列化隔离级别和读写权限的事务块:
begin read write;