You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
postgres/doc/src/sgml/ref/begin.sgml

158 lines
4.1 KiB

<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/begin.sgml,v 1.25 2003/08/31 17:32:21 petere Exp $
PostgreSQL documentation
-->
<refentry id="SQL-BEGIN">
<refmeta>
<refentrytitle id="SQL-BEGIN-TITLE">BEGIN</refentrytitle>
<refmiscinfo>SQL - Language Statements</refmiscinfo>
</refmeta>
<refnamediv>
<refname>BEGIN</refname>
<refpurpose>start a transaction block</refpurpose>
</refnamediv>
<indexterm zone="sql-begin">
<primary>BEGIN</primary>
</indexterm>
<refsynopsisdiv>
<synopsis>
BEGIN [ WORK | TRANSACTION ]
</synopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para>
By default, <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).
<command>BEGIN</command> initiates a transaction block, that is,
all statements after <command>BEGIN</command> command will be
executed in a single transaction until an explicit <xref
linkend="sql-commit" endterm="sql-commit-title"> or <xref
linkend="sql-rollback" endterm="sql-rollback-title">. 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 changing several related
tables: other sessions will be unable to see the intermediate states
wherein not all the related updates have been done.
</para>
</refsect1>
<refsect1>
<title>Parameters</title>
<variablelist>
<varlistentry>
<term><literal>WORK</literal></term>
<term><literal>TRANSACTION</literal></term>
<listitem>
<para>
Optional key words. They have no effect.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>Diagnostics</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>WARNING: 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>
</refsect1>
<refsect1>
<title>Notes</title>
<para>
<xref linkend="sql-start-transaction"
endterm="sql-start-transaction-title"> has the same functionality
as <command>BEGIN</>.
</para>
<para>
Use <xref linkend="SQL-COMMIT" endterm="SQL-COMMIT-TITLE"> or
<xref linkend="SQL-ROLLBACK" endterm="SQL-ROLLBACK-TITLE">
to terminate a transaction.
</para>
</refsect1>
<refsect1>
<title>Examples</title>
<para>
To begin a transaction block:
<programlisting>
BEGIN;
</programlisting>
</para>
</refsect1>
<refsect1>
<title>Compatibility</title>
<para>
<command>BEGIN</command> is a <productname>PostgreSQL</productname>
language extension. There is no explicit <command>BEGIN</command>
command in the SQL standard; transaction initiation is
always implicit and it terminates either with a
<command>COMMIT</command> or <command>ROLLBACK</command> statement.
</para>
<para>
Other relational database systems may offer an autocommit feature
as a convenience.
</para>
<para>
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.
</para>
</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:
-->