<!--
$Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/ref/begin.sgml,v 1.5 2001/09/03 05:07:12 i-kaori Exp $
Postgres documentation
-->

<refentry id="SQL-BEGIN">
 <refmeta>
  <refentrytitle id="SQL-BEGIN-TITLE">
   BEGIN
  </refentrytitle>
  <refmiscinfo>SQL<!-- Language Statements -->言語</refmiscinfo>
 </refmeta>
 <refnamediv>
  <refname>
   BEGIN
  </refname>
  <refpurpose>
   <!-- Begins a transaction in chained mode -->
   連鎖モードでトランザクションを開始します。<indexterm><primary>BEGIN</primary></indexterm><indexterm><primary>SQL</primary><secondary>BEGIN</secondary></indexterm><indexterm><primary sortas="とらんざくしょん">トランザクション</primary><secondary sortas="かいし">開始</secondary></indexterm><indexterm><primary sortas="とらんざくしょん">トランザクション</primary><secondary sortas="れんさもーど">連鎖モード</secondary></indexterm>
  </refpurpose>
  
  </refnamediv>
 <refsynopsisdiv>
  <refsynopsisdivinfo>
   <date>1999-07-20</date>
  </refsynopsisdivinfo>
<synopsis>  
BEGIN [ WORK | TRANSACTION ]
</synopsis>
  
  <refsect2 id="R2-SQL-BEGIN-1">
   <refsect2info>
    <date>1999-06-11</date>
   </refsect2info>
   <title>
    <!-- Inputs -->入力
   </title>

    <variablelist>
     <varlistentry>
      <term>WORK</term>
      <term>TRANSACTION</term>
      <listitem>
       <para>
	<!-- Optional keywords. They have no effect. -->
        オプションのキーワードです。何も影響がありません。
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
  </refsect2>
  
  <refsect2 id="R2-SQL-BEGIN-2">
   <refsect2info>
    <date>1999-06-11</date>
   </refsect2info>
   <title>
    <!-- Outputs -->出力
   </title>

    <variablelist>
     <varlistentry>
      <term><computeroutput>
BEGIN
       </computeroutput></term>
      <listitem>
       <para>
	<!-- This signifies that a new transaction has been started. -->
        新しいトランザクションが始まったことを表します。
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><computeroutput>
NOTICE:  BEGIN: already a transaction in progress
       </computeroutput></term>
      <listitem>
       <para>
        <!--  
	This indicates that a transaction was already in progress.
	The current transaction is not affected. -->

        トランザクションがすでに進行中であることを示します。現在のトランザクションには影響を与えません。

       </para>
      </listitem>
     </varlistentry>
    </variablelist>
  </refsect2>
 </refsynopsisdiv>
 
 <refsect1 id="R1-SQL-BEGIN-1">
  <refsect1info>
   <date>1999-06-11</date>
  </refsect1info>
  <title>
   <!-- Description -->説明
  </title>

  <para>
   <!-- 
   By default, <productname>Postgres</productname> executes transactions
   in <firstterm>unchained mode</firstterm>
   (also known as <quote>autocommit</quote> in other database
   systems).
   In other words, each user 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).
   <command>BEGIN</command> initiates a user transaction in chained mode,
   i.e., all user statements after <command>BEGIN</command> command will
   be executed in a single transaction until an explicit 
   <xref linkend="sql-commit" endterm="sql-commit-title">,
   <xref linkend="sql-rollback" endterm="sql-rollback-title">,
   or execution abort. Statements in chained mode are executed much faster, 
   because transaction start/commit requires significant CPU and disk 
   activity. Execution of multiple statements inside a transaction
   is also required for consistency when changing several
   related tables. -->

   デフォルトでは、<productname>Postgres</productname>はトランザクションを<firstterm>非連鎖モード</firstterm>（他のデータベースシステムでは<quote>自動コミット</quote>としても知られています）で実行します。言い換えると、それぞれのユーザーの文はそれ固有のトランザクションの中で実行され、コミットはその文の終わりに暗黙的に実行されます（実行が成功した場合。そうでない場合はロールバックされます）。<command>BEGIN</command>はユーザーのトランザクションを連鎖モードで開始します。すなわち、<command>BEGIN</command>コマンド以降のすべてのユーザーの文は、明示的な<xref linkend="sql-commit" endterm="sql-commit-title">、<xref linkend="sql-rollback" endterm="sql-rollback-title">もしくは実行の中止までの単一のトランザクションにおいて実行されます。連鎖モードにおける文はとても迅速に実行されます。なぜならトランザクションの開始/コミットはCPUとディスクにかなり高いを要求するからです。トランザクション中の複数の文の実行はまた、複数の関連するテーブルを更新するときに一貫性が要求されます。<indexterm><primary sortas="とらんざくしょん">トランザクション</primary><secondary sortas="じどうこみっと">自動コミット</secondary></indexterm><indexterm><primary sortas="とらんざくしょん">トランザクション</primary><secondary sortas="ひれんさもーど">非連鎖モード</secondary></indexterm>
  </para>

  <para>
   <!-- The default transaction isolation level in
   <productname>Postgres</productname>
   is READ COMMITTED, where queries inside the transaction see only changes
   committed before query execution. So, you have to use 
   <command>SET TRANSACTION ISOLATION LEVEL SERIALIZABLE</command>
   just after <command>BEGIN</command> if you need more rigorous transaction 
   isolation. 
   In SERIALIZABLE mode queries will see only changes committed before
   the entire
   transaction began (actually, before execution of the first DML statement
   in a serializable transaction). -->

   <productname>Postgres</productname>におけるデフォルトのトランザクション隔離レベルは、トランザクション内の問い合わせが問い合わせ実行前にコミットされた変更のみが参照できるREAD COMMITTEDです。したがって、より厳密なトランザクションの隔離を必要とするならば、<command>BEGIN</command>のすぐ後に<command>SET TRANSACTION ISOLATION LEVEL SERIALIZABLE</command>を使わなければなりません。SERIALIZABLEモードでは、問い合わせはトランザクションの全体が開始される以前にコミットされた変更のみを参照します（実際には、シリアライザブルなトランザクション中の最初のDML文の実行以前です）。

  </para>

  <para>
   <!-- 
   If the transaction is committed, <productname>Postgres</productname> 
   will ensure either that all updates are done or else that none of
   them are done. Transactions have the standard <acronym>ACID</acronym>
   (atomic, consistent, isolatable, and durable) property. -->

   もしトランザクションがコミットされたら、<productname>Postgres</productname>はすべての更新を行うか、もしくはまったく更新を行わないかのどちらかです。トランザクションには、標準の<acronym>ACID</acronym>性（Atomic：原子性、Consistent：一貫性、Isolatable：隔離性、Durable：耐久性の頭文字）があります。<indexterm><primary sortas="ACIDせい">ACID性</primary></indexterm>

  </para>
  
  <refsect2 id="R2-SQL-BEGIN-3">
   <refsect2info>
    <date>1999-06-11</date>
   </refsect2info>
   <title>
    <!-- Notes -->注釈
   </title>
   <para>
    <!-- 
    Refer to <xref linkend="sql-lock" endterm="sql-lock-title">
    for further information
    about locking tables inside a transaction. -->

    トランザクション内のテーブルのロックに関するさらに詳しい情報は<xref linkend="sql-lock" endterm="sql-lock-title">を参照してください。

   </para>
   
   <para>
    <!-- 
    Use <xref linkend="SQL-COMMIT" endterm="SQL-COMMIT-TITLE">
    or
    <xref linkend="SQL-ROLLBACK" endterm="SQL-ROLLBACK-TITLE">
    to terminate a transaction. -->

    トランザクションを終了させるには<xref linkend="SQL-COMMIT" endterm="SQL-COMMIT-TITLE">か<xref linkend="SQL-ROLLBACK" endterm="SQL-ROLLBACK-TITLE">を使用します。

   </para>
  </refsect2>
 </refsect1>

 <refsect1 id="R1-SQL-BEGIN-2">
  <title>
   <!-- Usage -->使用方法
  </title>

  <para>
   <!-- To begin a user transaction: -->
   ユーザートランザクションを始めるためには下記のようにします。
</para>

<programlisting>
BEGIN WORK;
</programlisting>
 </refsect1>
 
 <refsect1 id="R1-SQL-BEGIN-3">
  <title>
   <!-- Compatibility -->互換性
  </title>

  <refsect2 id="R2-SQL-BEGIN-4">
     <refsect2info>
    <date>1999-06-11</date>
   </refsect2info>
   <title>
    SQL92
   </title>

   <para>
    <!-- <command>BEGIN</command>
    is a <productname>Postgres</productname> language extension.
    There is no explicit <command>BEGIN</command>
    command in <acronym>SQL92</acronym>;
    transaction initiation is always implicit and it terminates either 
    with a <command>COMMIT</command> or <command>ROLLBACK</command> statement.
    -->
 
    <command>BEGIN</command>は<productname>Postgres</productname>の言語拡張です。<acronym>SQL92</acronym>には明示的な<command>BEGIN</command>コマンドはありません。トランザクションの開始は常に暗黙的で、<command>COMMIT</command>または<command>ROLLBACK</command>文で終了します。
</para>

    <note>
     <para>
      <!-- 
      Many relational database systems offer an autocommit feature as a
      convenience. -->

     利便性のために、多くのリレーショナルデータベースシステムは、自動コミット機能を提供しています。

     </para>
    </note>

   <para>
    <!-- 
    Incidentally, the <literal>BEGIN</literal> keyword is used for a different
    purpose in embedded SQL. You are advised to be careful about the transaction
    semantics when porting database applications. -->

    キーワード<literal>BEGIN</literal>は埋め込みSQLでは異なった目的に使われます。データベースアプリケーションを移植するときはトランザクションの意味で使用されているのかどうか注意するべきでしょう。<indexterm><primary>BEGIN</primary><secondary sortas="うめこみSQL">埋め込みSQL</secondary></indexterm>

   </para>

   <para>
    <!-- 
    <acronym>SQL92</acronym> also requires SERIALIZABLE to be the default
    transaction isolation level. -->

    <acronym>SQL92</acronym>では、SEREALIZABLEがデフォルトトランザクション隔離レベルであることを要求しています。

   </para>
  </refsect2>
 </refsect1>
</refentry>
 
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:"/usr/lib/sgml/catalog"
sgml-local-ecat-files:nil
End:
-->
