SET TRANSACTION 隔离级别 | SET ISOLATION 隔离级别 |
---|---|
Read Uncommitted | Dirty Read |
Read Committed | Committed Read |
[不支持] | Cursor Stability |
(ANSI) Repeatable Read | ( GBase 8s ) Repeatable Read |
Serializable | ( GBase 8s ) Repeatable Read |
SET TRANSACTION 与 SET ISOLATION 之间的另一差异是在事务内的隔离级别的行为。对于事务您仅可发出 SET TRANSACTION 一次。在那个事务期间打开的任何游标都要保证那个隔离级别(或访问模式,如果您正在定义访问模式的话)。在启动事务之后,你可以 SET ISOLATION 在该事务内多次更改隔离级别。
EXEC SQL BEGIN WORK; EXEC SQL SET ISOLATION TO DIRTY READ; EXEC SQL SELECT ... ; EXEC SQL SET ISOLATION TO REPEATABLE READ; EXEC SQL INSERT ... ; EXEC SQL COMMIT WORK; -- Executes without error
EXEC SQL BEGIN WORK; EXEC SQL SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; EXEC SQL SELECT ... ; EXEC SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED; -- Produces error 876: Cannot issue SET TRANSACTION -- in an active transaction.
SET ISOLATION 与 SET TRANSACTION 之间另一差异是隔离级别的持续时间。由于 SET ISOLATION 支持完整连接级别设置,因此通过 SET ISOLATION 指定的隔离级别保持生效,直到发出另一 SET ISOLATION 语句为止。通过 SET TRANSACTION 设置的隔离级别仅在事务终止之前保持生效。然后,隔离级别重置为数据库类型的缺省值。