UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] [ORDER BY ...] [LIMIT row_count] または UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name ...] SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
UPDATE
は既存のテーブルレコードのカラムを新しい値で更新します。
SET
節は値の変更対象のカラムと値を示します。WHERE
節がある場合、この節は更新するレコードを示します。更新対象のレコードが指定されていない場合は、すべてのレコードが更新されます。ORDER
BY
節が指定されていると、そこに指定された順序でレコードが更新されます。
キーワード LOW_PRIORITY
が指定されていると、他のクライアントによるそのテーブルからの読み取りがなくなるまで、UPDATE
の実行は遅らされます。
キーワード IGNORE
が指定されていると、更新中に重複キーエラーが発生しても更新ステートメントは中断されません。コンフリクトを発生させるレコードは更新されません。
式内の tbl_name
からカラムがアクセスされる場合、UPDATE
はそのカラムの現在の値を使用します。たとえば次のステートメントで、age
カラムの値はこのカラムの現在の値より 1
だけ多い値に設定されます。
mysql> UPDATE persondata SET age=age+1;
UPDATE
は左から右へ評価されます。たとえば、次のステートメントでは、age
カラムの値がまず 2
倍にされ、その後、加算されます。
mysql> UPDATE persondata SET age=age*2, age=age+1;
カラムの値がそのカラムの現在の値に設定される場合、MySQL はそれが現在の値であることを認識し、更新処理を行いません。
UPDATE
は実際に変更されたレコード数を返します。
MySQL バージョン 3.22 以降では、C API 関数
mysql_info()
を使用すると、更新されたレコード数と
UPDATE
の実行中に発生した警告の数が返されます。
NOT NULL
として宣言されたカラムに対して
NULL
値を設定し、このカラムを更新すると、そのカラムにはそのカラム型に対応するデフォルト値が設定され、警告のカウントが加算されます。デフォルト値は数値型では
0
であり、文字列型では空の文字列(''
)であり、日付と時刻型では
``ゼロ'' 値です。
MySQL バージョン 3.23 以降では、LIMIT
row_count
を使用して UPDATE
のスコープを制限することができます。LIMIT
節は次のように機能します。
MySQL 4.0.13
より前のバージョンでは、LIMIT
による制限は影響を受けたレコードに基づいて適用される。
WHERE
節の指定にマッチするレコードが、row_count
に指定された数だけ変更されると、ステートメントは直ちに停止する。
4.0.13 以降では、LIMIT
による制限はマッチしたレコードに基づいて適用される。WHERE
節の指定にマッチするレコードが、row_count
に指定された数だけ検出されると、それらのレコードが実際に変更されたかどうかにかからわず、ステートメントは直ちに終了する。
ORDER BY
が使用されている場合(MySQL 4.0.0
以降で使用可能)、レコードは指定された順序で更新されます。ORDER
BY
節は、実際には、LIMIT
と組み合わせて使用した場合にのみ役立ちます。
MySQL バージョン 4.0.4
以降では、複数のテーブルに対する
UPDATE
操作も実行可能です。
UPDATE items,month SET items.price=month.price WHERE items.id=month.id;
上の例では、カンマ演算子を使用した内部結合を示していますが、複数テーブルの
UPDATE
ステートメントでは、LEFT JOIN
など、SELECT
ステートメントで使用可能な任意の結合型を使用することができます。
注意: 複数テーブルの UPDATE
では、ORDER BY
と
LIMIT
はいずれも使用できません。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.