<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/update.sgml,v 1.19 2002/04/23 02:07:16 tgl Exp $
PostgreSQL documentation
-->

<refentry id="SQL-UPDATE">
 <refmeta>
  <refentrytitle id="SQL-UPDATE-TITLE">UPDATE</refentrytitle>
  <refmiscinfo>SQL - Language Statements</refmiscinfo>
 </refmeta>
 <refnamediv>
  <refname>
   UPDATE
  </refname>
  <refpurpose>
   update rows of a table
  </refpurpose>
 </refnamediv>
 <refsynopsisdiv>
  <refsynopsisdivinfo>
   <date>1999-07-20</date>
  </refsynopsisdivinfo>
  <synopsis>
UPDATE [ ONLY ] <replaceable class="PARAMETER">table</replaceable> SET <replaceable class="PARAMETER">col</replaceable> = <replaceable class="PARAMETER">expression</replaceable> [, ...]
    [ FROM <replaceable class="PARAMETER">fromlist</replaceable> ]
    [ WHERE <replaceable class="PARAMETER">condition</replaceable> ]
  </synopsis>

  <refsect2 id="R2-SQL-UPDATE-1">
   <refsect2info>
    <date>1998-09-24</date>
   </refsect2info>
   <title>
    Inputs
   </title>
   <para>

    <variablelist>
     <varlistentry>
      <term><replaceable class="PARAMETER">table</replaceable></term>
      <listitem>
       <para>
	The name (optionally schema-qualified) of an existing table.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><replaceable class="PARAMETER">column</replaceable></term>
      <listitem>
       <para>
	The name of a column in <replaceable class="PARAMETER">table</replaceable>.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><replaceable class="PARAMETER">expression</replaceable></term>
      <listitem>
       <para>
	A valid expression or value to assign to column.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><replaceable class="PARAMETER">fromlist</replaceable></term>
      <listitem>
       <para>
	A <productname>PostgreSQL</productname>
	non-standard extension to allow columns
	from other tables to appear in the WHERE condition.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><replaceable class="PARAMETER">condition</replaceable></term>
      <listitem>
       <para>
	Refer to the SELECT statement for a further description
	of the WHERE clause.
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
   </para>
  </refsect2>

  <refsect2 id="R2-SQL-UPDATE-2">
   <refsect2info>
    <date>1998-09-24</date>
   </refsect2info>
   <title>
    Outputs
   </title>

   <para>
    <variablelist>
     <varlistentry>
      <term><computeroutput>
UPDATE <replaceable class="parameter">#</replaceable>
      </computeroutput></term>
      <listitem>
       <para>
	Message returned if successful.
	The <replaceable class="parameter">#</replaceable>
	means the number of rows updated.
	If <replaceable class="parameter">#</replaceable>
	is 0 no rows are updated.
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
   </para>
  </refsect2>
 </refsynopsisdiv>

 <refsect1 id="R1-SQL-UPDATE-1">
  <refsect1info>
   <date>1998-09-24</date>
  </refsect1info>
  <title>
   Description
  </title>
  <para>
   <command>UPDATE</command> changes the values of the columns specified for
   all rows which satisfy condition. Only the columns 
   to be modified need appear as columns in the statement.
  </para>

  <para>
   Array references use the same syntax found in
   <xref linkend="sql-select" endterm="sql-select-title">.
   That is, either single array elements, a range of array
   elements or the entire array may be replaced with a single
   query.
  </para>

  <para>
   You must have write access to the table in order to modify
   it, as well as read access to any table whose values are
   mentioned in the WHERE condition.
  </para>

  <para>
  By default UPDATE will update tuples in the table specified 
  and all its sub-tables. If you wish to only update the
  specific table mentioned, you should use the ONLY clause.
  </para>
 </refsect1>

 <refsect1 id="R1-SQL-UPDATE-2">
  <title>
   Usage
  </title>

  <para>
   Change word <literal>Drama</> with <literal>Dramatic</> on column <structfield>kind</>:

<programlisting>
UPDATE films 
SET kind = 'Dramatic' 
WHERE kind = 'Drama';
SELECT * 
FROM films 
WHERE kind = 'Dramatic' OR kind = 'Drama';

 code  |     title     | did | date_prod  |   kind   | len
-------+---------------+-----+------------+----------+-------
 BL101 | The Third Man | 101 | 1949-12-23 | Dramatic | 01:44
 P_302 | Becket        | 103 | 1964-02-03 | Dramatic | 02:28
 M_401 | War and Peace | 104 | 1967-02-12 | Dramatic | 05:57
 T_601 | Yojimbo       | 106 | 1961-06-16 | Dramatic | 01:50
 DA101 | Das Boot      | 110 | 1981-11-11 | Dramatic | 02:29
</programlisting>
  </para>
 </refsect1>

 <refsect1 id="R1-SQL-UPDATE-3">
  <title>
   Compatibility
  </title>

  <refsect2 id="R2-SQL-UPDATE-4">
   <refsect2info>
    <date>1998-09-24</date>
   </refsect2info>
   <title>
    SQL92
   </title>
   <para>
    <acronym>SQL92</acronym> defines a different syntax for
    the positioned UPDATE statement:

    <synopsis>
UPDATE <replaceable>table</replaceable> SET <replaceable>column</replaceable> = <replaceable>expression</replaceable> [, ...]
    WHERE CURRENT OF <replaceable class="parameter">cursor</replaceable>
    </synopsis>

    where <replaceable class="parameter">cursor</replaceable>
    identifies an open cursor.
   </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:
-->
