SQL文MySQL updateの正しい使い方を詳しく理解する
2208 ワード
単一テーブルのMySQL UPDATE文:
マルチテーブルのUPDATE文:
UPDATE構文では、既存のテーブル行の各列を新しい値で更新できます.SET句は、どのカラムを変更するか、どの値を与えるかを示します.WHERE句は、更新すべきローを指定します.WHERE句がない場合は、すべてのローが更新されます.ORDER BY句が指定されている場合、指定された順序で行が更新されます.LIMIT句は、更新可能なローの数を制限する制限値を指定するために使用されます.MySQL UPDATE文では、LOW_を使用している場合は、次の修飾子がサポートされています.PRIORITYキーワードは、UPDATEの実行が他のクライアントがテーブルから読み込まないまで遅延される.IGNOREキーワードを使用すると、更新中にエラーが発生しても更新文は中断されません.重複キーワードの競合が発生した場合、ローは更新されません.カラムが更新されると、新しい値がデータ変換エラーを引き起こす場合、ローは最も近い合法的な値に更新されます.1つの式でtbl_を通過する場合nameがカラムにアクセスすると、UPDATEはカラムの現在の値を使用します.たとえば、以下の文は年齢列を現在の値より多く設定します:MySQL>UPDATE persondata SET age=age+1;MySQL UPDATE付与は左から右に評価されます.たとえば、以下の文は年齢列を2倍にしてから増加します:MySQL>UPDATE persondata SET age=age*2、age=age+1;カラムを現在含まれている値に設定すると、MySQLはそれに気づきますが、更新されません.NOT NULLとして定義されたカラムをNULLに更新すると、カラムタイプに対応するデフォルト値に設定され、警告数が加算されます.数値タイプの場合、デフォルト値は0です.文字列タイプの場合、デフォルト値は空の文字列(')です.日付と時刻のタイプでは、デフォルト値は「ゼロ」です.UPDATEは、実際に変更されたローの数を返します.MySQL_info()C API関数は、一致および更新されたローの数、およびUPDATEプロセス中に生成された警告の数を返すことができる.LIMIT row_をご利用いただけますcountはUPDATEの範囲を限定します.LIMIT句は行に一致する限定です.WHERE句を満たすrow_を見つけたらcount行の場合、文は変更されたかどうかにかかわらず中止されます.UPDATE文にORDER BY文が含まれている場合は、文によって指定された順序でローが更新されます.複数のテーブルを含むUPDATE操作も実行できます.table_references句には、コンビネーションに含まれるテーブルがリストされます.以下に例を示す:SQL>UPDATE items,month SET items.price=month.price WHERE items.id=month.id; 以上の例では、カンマオペレータを使用した内部結合を示していますが、multiple-table UPDATE文は、SELECT文で許可されている任意のタイプの結合、例えばLEFTJOINを使用することができます.注記:ORDER BYまたはLIMITをmultiple-table UPDATEと同時に使用することはできません.変更されたmultiple-table UPDATEでは、一部のカラムが参照されます.これらのカラムのMySQL UPDATE権限のみが必要です.一部のカラムは読み込まれましたが、変更されていません.これらの列のSELECT権限のみが必要です.Multiple-table UPDATE文に外部キー制限のあるInnoDBテーブルが含まれている場合は、MySQLオプティマイザがテーブルを処理する順序が上下レベルの関係の順序と異なる場合があります.この場合、文は無効でロールバックされます.同時に、単一テーブルを更新し、ON UPDATE機能に依存します.この機能はInnoDBによって提供され、他のテーブルに対して対応する修正を行うために使用されます.現在、サブクエリでテーブルを更新しながら、同じテーブルから選択することはできません.
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]
マルチテーブルのUPDATE文:
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
UPDATE構文では、既存のテーブル行の各列を新しい値で更新できます.SET句は、どのカラムを変更するか、どの値を与えるかを示します.WHERE句は、更新すべきローを指定します.WHERE句がない場合は、すべてのローが更新されます.ORDER BY句が指定されている場合、指定された順序で行が更新されます.LIMIT句は、更新可能なローの数を制限する制限値を指定するために使用されます.MySQL UPDATE文では、LOW_を使用している場合は、次の修飾子がサポートされています.PRIORITYキーワードは、UPDATEの実行が他のクライアントがテーブルから読み込まないまで遅延される.IGNOREキーワードを使用すると、更新中にエラーが発生しても更新文は中断されません.重複キーワードの競合が発生した場合、ローは更新されません.カラムが更新されると、新しい値がデータ変換エラーを引き起こす場合、ローは最も近い合法的な値に更新されます.1つの式でtbl_を通過する場合nameがカラムにアクセスすると、UPDATEはカラムの現在の値を使用します.たとえば、以下の文は年齢列を現在の値より多く設定します:MySQL>UPDATE persondata SET age=age+1;MySQL UPDATE付与は左から右に評価されます.たとえば、以下の文は年齢列を2倍にしてから増加します:MySQL>UPDATE persondata SET age=age*2、age=age+1;カラムを現在含まれている値に設定すると、MySQLはそれに気づきますが、更新されません.NOT NULLとして定義されたカラムをNULLに更新すると、カラムタイプに対応するデフォルト値に設定され、警告数が加算されます.数値タイプの場合、デフォルト値は0です.文字列タイプの場合、デフォルト値は空の文字列(')です.日付と時刻のタイプでは、デフォルト値は「ゼロ」です.UPDATEは、実際に変更されたローの数を返します.MySQL_info()C API関数は、一致および更新されたローの数、およびUPDATEプロセス中に生成された警告の数を返すことができる.LIMIT row_をご利用いただけますcountはUPDATEの範囲を限定します.LIMIT句は行に一致する限定です.WHERE句を満たすrow_を見つけたらcount行の場合、文は変更されたかどうかにかかわらず中止されます.UPDATE文にORDER BY文が含まれている場合は、文によって指定された順序でローが更新されます.複数のテーブルを含むUPDATE操作も実行できます.table_references句には、コンビネーションに含まれるテーブルがリストされます.以下に例を示す:SQL>UPDATE items,month SET items.price=month.price WHERE items.id=month.id; 以上の例では、カンマオペレータを使用した内部結合を示していますが、multiple-table UPDATE文は、SELECT文で許可されている任意のタイプの結合、例えばLEFTJOINを使用することができます.注記:ORDER BYまたはLIMITをmultiple-table UPDATEと同時に使用することはできません.変更されたmultiple-table UPDATEでは、一部のカラムが参照されます.これらのカラムのMySQL UPDATE権限のみが必要です.一部のカラムは読み込まれましたが、変更されていません.これらの列のSELECT権限のみが必要です.Multiple-table UPDATE文に外部キー制限のあるInnoDBテーブルが含まれている場合は、MySQLオプティマイザがテーブルを処理する順序が上下レベルの関係の順序と異なる場合があります.この場合、文は無効でロールバックされます.同時に、単一テーブルを更新し、ON UPDATE機能に依存します.この機能はInnoDBによって提供され、他のテーブルに対して対応する修正を行うために使用されます.現在、サブクエリでテーブルを更新しながら、同じテーブルから選択することはできません.