説明
トランザクション分離レベルを設定します。
OceanBaseデータベースのMySQLモードは、読み取りコミットとリピータブルリードの2種類の分離レベルをサポートしています。デフォルトの分離レベルは読み取りコミットです。
トランザクション実行中に分離レベルを設定することはできません。そうするとエラーが発生します。
ERROR:OBE-01453: SET TRANSACTION must be first statement of transactionシリアライズ可能な分離レベルを有効にする場合は、グローバルタイムスタンプサービス(Global Timestamp Service、GTS)が有効であることを確認する必要があります。
セッションはセッションレベルのトランザクション分離レベルを維持し、トランザクション開始時にセッションレベルのトランザクション分離レベルを取得します。この分離レベルは、トランザクションレベルの分離レベルによって上書きされる可能性があります。
構文
SET [GLOBAL | SESSION | LOCAL] TRANSACTION trans_opt;
trans_opt:
transaction_access_mode
| isolation_level
| transaction_access_mode, isolation_level
| isolation_level, transaction_access_mode
transaction_access_mode:
[READ ONLY | READ WRITE]
isolation_level:
ISOLATION LEVEL {
READ UNCOMMITED
| READ COMMITED
| REPEATABLE READ
| SERIALIZABLE
}
パラメータの説明
| パラメータ | 説明 |
|---|---|
| GLOBAL | SESSION | LOCAL | トランザクション分離レベルの適用範囲を宣言します。デフォルトは空です。
|
| READ ONLY | READ WRITE | トランザクションの読み書きモードを指定します。 |
| READ UNCOMMITED | トランザクション分離レベルを読み取り未コミットと指定します。 説明 現在のバージョンでは、トランザクション分離レベルを読み取り未コミットに設定することはサポートされていません。 |
| READ COMMITED | トランザクション分離レベルを読み取りコミットと指定します。 |
| REPEATABLE READ | トランザクション分離レベルをリピータブルリードに設定します。 |
| SERIALIZABLE | トランザクション分離レベルをシリアライゼーション可能に設定します。 説明 OceanBaseデータベースは、sysテナントのトランザクション分離レベルをシリアライゼーション可能に設定することをサポートしていません。これは、sysテナントでグローバルタイムスタンプ(GTS)を有効にできないためです。 |
例
現在のセッションにおける次のトランザクションのトランザクション分離レベルを、読み取りコミットに設定します。
obclient> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;現在のセッションのトランザクション分離レベルを、リピータブルリードに設定します。
obclient> SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;