ファイヤープロジェクト
UPDATE
2003-12-23T20:30+09:00   matsu
DBのレコードの更新にはUPDATEを使用する.
UPDATEの基本形は以下である.
UPDATE テーブル名 SET 属性=値, 属性=値,... WHERE ...
指定したテーブルのレコードのうち,WHEREで指定した条件にあうものに対して,SETで指定した属性=値で更新する.以下はテーブルclusterからname='fuga'のレコードを選択してcpunumを256に更新している.
benchmark=> SELECT * FROM cluster;
 id | name | cpunum | cpuclock | memory |   network   
----+------+--------+----------+--------+-------------
  1 | hoge |    256 |        2 |   1024 | 1000BASE-TX
  2 | fuga |        |          |        | 
  3 | foo  |        |          |    256 | 
  4 | var  |    512 |        3 |   2048 | 
(4 rows)

benchmark=> UPDATE cluster 
benchmark-> SET cpunum=256
benchmark-> WHERE name='fuga';
UPDATE 1

benchmark=> SELECT * FROM cluster;
 id | name | cpunum | cpuclock | memory |   network   
----+------+--------+----------+--------+-------------
  1 | hoge |    256 |        2 |   1024 | 1000BASE-TX
  2 | fuga |    256 |          |        | 
  3 | foo  |        |          |    256 | 
  4 | var  |    512 |        3 |   2048 | 
(4 rows)
SELECTの場合と同様,WHERE句ではサブクエリを使用できる.
benchmark=> SELECT * FROM cluster;
 id | name | cpunum | cpuclock | memory |   network   
----+------+--------+----------+--------+-------------
  1 | hoge |    256 |        2 |   1024 | 1000BASE-TX
  2 | fuga |    256 |          |        | 
  3 | foo  |        |          |    256 | 
  4 | var  |    512 |        3 |   2048 | 
(4 rows)

benchmark=> UPDATE cluster
benchmark-> SET cpuclock=1
benchmark-> WHERE cpunum=(SELECT cpunum FROM cluster WHERE name='fuga');
UPDATE 2
benchmark=> SELECT * FROM cluster;
 id | name | cpunum | cpuclock | memory |   network   
----+------+--------+----------+--------+-------------
  1 | hoge |    256 |        1 |   1024 | 1000BASE-TX
  3 | foo  |        |          |    256 | 
  4 | var  |    512 |        3 |   2048 | 
  2 | fuga |    256 |        1 |        | 
(4 rows)
また,SET句でもサブクエリを使用できる.
benchmark=> SELECT * FROM cluster;
 id | name | cpunum | cpuclock | memory |   network   
----+------+--------+----------+--------+-------------
  1 | hoge |    256 |        1 |   1024 | 1000BASE-TX
  3 | foo  |        |          |    256 | 
  4 | var  |    512 |        3 |   2048 | 
  2 | fuga |    256 |        1 |        | 
(4 rows)

benchmark=> UPDATE cluster
benchmark-> SET network=(SELECT network FROM cluster WHERE name='hoge')
benchmark-> WHERE name='fuga';
UPDATE 1

benchmark=> SELECT * FROM cluster;
 id | name | cpunum | cpuclock | memory |   network   
----+------+--------+----------+--------+-------------
  1 | hoge |    256 |        1 |   1024 | 1000BASE-TX
  3 | foo  |        |          |    256 | 
  4 | var  |    512 |        3 |   2048 | 
  2 | fuga |    256 |        1 |        | 1000BASE-TX
(4 rows)
matsu(C)
Since 2002
Mail to matsu