MYSQLでUPDATE文を利用する場合の構文

単一テーブル構文:


UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

単一テーブル構文には、UPDATE ステートメントは新しい値を利用して tbl_name 内に既存行のカラムを
更新します。SET 条項は、どのカラムを変更し、それらにはどの値が与えられるべきかという事を指示します。
もし WHERE 条項が与えられたら、それはどの行を更新するべきかを決定します。WHERE 条項が無ければ、
全ての行が更新されます。もし ORDER BY 条項が指定されると、指定された順に行が更新されます。
LIMIT 条項は、更新できる行数に制限を設定します。

update_single_table

複合テーブル構文:


UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_condition]

複合テーブル構文には、UPDATE が、条件を満たす table_references
で名づけられたそれぞれのテーブルの行を更新します。この場合、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 ステートメントで使用可能な任意
の結合型を使用することができます。


mysql> update MYSQLIMP,MYSQLIMP2 set MYSQLIMP.n = MYSQLIMP2.n
-> where MYSQLIMP.id = MYSQLIMP2.id
-> and MYSQLIMP.id = 100;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

update_multi_tables

UPDATE ステートメントは次の修飾因子をサポートします。

もし LOW_PRIORITY キーワードを利用すると、別のクライアントがテーブルからの
読み込みをしなくなるまで、UPDATE の実行が遅れます。

もし IGNORE キーワードを利用すると、更新中にエラーが発生しても更新ステートメントは異常終了しません。
複製キーの矛盾が起きた行は更新されません。データ変換エラーを起こす値にカラムが更新された行は、
代わりに一番近い有効値に更新されます。

単一テーブル UPDATE 割り当ては通常左から右に評価されます。複合テーブルの更新に関しては、
割り当てが特定の順番で行われるという保証はありません。

NULL に設定する事で NOT NULL を宣言されたカラムを更新すると、カラムはそのデータ タイプに
適切なデフォルト値に設定され、警告カウントはインクリメントされます。
数値タイプ、文字列タイプの空の文字列(”)、そして日付と時刻タイプの「ゼロ」 値のデフォルト値は 0 です。

UPDATE の領域を制限する為に LIMIT row_count を利用する事ができます。
LIMIT 条項は行に一致した制限です。ステートメントは、実際に変更されたかどうかに関わらず、
WHERE 条項の条件を満たす row_count 行を見付けるとすぐに止まります。

もし UPDATE ステートメントが ORDER BY 条項を含むなら、行は条項に指示された順番で更新されます。
これは、エラーが起こるかもしれない特定の場合に有効です。
複合テーブルをカバーする UPDATE 演算を行う事もできます。
.しかし、複合テーブル UPDATE と共に ORDER BY や LIMIT を利用する事はできません。

Comments are closed.

Post Navigation