BEGIN <refpurpose>start a transaction block</refpurpose> — トランザクションブロックを開始する
BEGIN [ WORK | TRANSACTION ] [transaction_mode
[, ...] ] <phrase>where <replaceable class="parameter">transaction_mode</replaceable> is one of:</phrase>transaction_mode
は以下のいずれかです。 ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY [ NOT ] DEFERRABLE
<command>BEGIN</command> initiates a transaction block, that is,
all statements after a <command>BEGIN</command> command will be
executed in a single transaction until an explicit <link
linkend="sql-commit"><command>COMMIT</command></link> or <link
linkend="sql-rollback"><command>ROLLBACK</command></link> is given.
By default (without <command>BEGIN</command>),
<productname>PostgreSQL</productname> executes
transactions in <quote>autocommit</quote> mode, that is, each
statement is executed in its own transaction and a commit is
implicitly performed at the end of the statement (if execution was
successful, otherwise a rollback is done).
BEGIN
はトランザクションブロックを初期化します。
BEGIN
コマンド以降の文は全て、明示的なCOMMIT
もしくはROLLBACK
が与えられるまで、単一のトランザクションの中で実行されます。
デフォルト(BEGIN
がない場合)は、PostgreSQLはトランザクションを「自動コミット」で実行します。
つまり、各文はそれぞれ固有のトランザクションの中で実行され、文の終わりで暗黙的にコミットが実行されます(これは実行が成功した場合です。失敗した場合はロールバックされます)。
Statements are executed more quickly in a transaction block, because transaction start/commit requires significant CPU and disk activity. Execution of multiple statements inside a transaction is also useful to ensure consistency when making several related changes: other sessions will be unable to see the intermediate states wherein not all the related updates have been done. トランザクションブロック内では、文はより迅速に実行されます。 なぜなら、トランザクションの開始やコミットは、CPUとディスクにかなり高い負荷をかけるからです。 また、1つのトランザクションで複数の文を実行することは、複数の関連するテーブルを更新する際、確実に一貫性を保つためにも役立ちます。 関連する更新の中に完了していないものが存在する中間的な状態が、他のセッションから参照できなくなるからです。
If the isolation level, read/write mode, or deferrable mode is specified, the new
transaction has those characteristics, as if
<link linkend="sql-set-transaction"><command>SET TRANSACTION</command></link>
was executed.
分離レベル、読み書きモード、または遅延モードが指定されている場合、新しいトランザクションは、SET TRANSACTION
が実行された時と同様の特性を持ちます。
WORK
TRANSACTION
Optional key words. They have no effect. 省略可能なキーワードです。これらは何も効果がありません。
Refer to <xref linkend="sql-set-transaction"/> for information on the meaning of the other parameters to this statement. BEGIN文のこの他のパラメータについては、SET TRANSACTIONを参照してください。
<link linkend="sql-start-transaction"><command>START TRANSACTION</command></link> has the same functionality
as <command>BEGIN</command>.
START TRANSACTION
にはBEGIN
と同じ機能があります。
Use <link linkend="sql-commit"><command>COMMIT</command></link> or
<link linkend="sql-rollback"><command>ROLLBACK</command></link>
to terminate a transaction block.
トランザクションを終了させるにはCOMMIT
またはROLLBACK
を使用してください。
Issuing <command>BEGIN</command> when already inside a transaction block will
provoke a warning message. The state of the transaction is not affected.
To nest transactions within a transaction block, use savepoints
(see <xref linkend="sql-savepoint"/>).
トランザクションブロック内でBEGIN
を発行すると、警告メッセージが表示されます。
ただし、トランザクションの状態には影響ありません。
トランザクションブロック内でトランザクションを入れ子にするには、セーブポイントを使用してください
(詳しくはSAVEPOINTを参照してください)。
For reasons of backwards compatibility, the commas between successive
<replaceable class="parameter">transaction_modes</replaceable> can be
omitted.
後方互換性の保持のため、連続するtransaction_modes
間のカンマは省略することができます。
To begin a transaction block: トランザクションブロックを開始します。
BEGIN;
<command>BEGIN</command> is a <productname>PostgreSQL</productname>
language extension. It is equivalent to the SQL-standard command
<link linkend="sql-start-transaction"><command>START TRANSACTION</command></link>, whose reference page
contains additional compatibility information.
BEGIN
はPostgreSQLの拡張です。
標準SQLのSTART TRANSACTION
コマンドと等価です。
そのマニュアルページには互換性に関する詳細な情報が含まれます。
The <literal>DEFERRABLE</literal>
<replaceable class="parameter">transaction_mode</replaceable>
is a <productname>PostgreSQL</productname> language extension.
DEFERRABLE
transaction_mode
はPostgreSQLの言語拡張です。
Incidentally, the <literal>BEGIN</literal> key word is used for a
different purpose in embedded SQL. You are advised to be careful
about the transaction semantics when porting database applications.
埋め込みSQLでは、BEGIN
というキーワードを異なった目的に使用しています。
データベースアプリケーションを移植する時は、トランザクションの意味で使用されているのかどうかに注意してください。