Mysql Update文の詳細な使い方


以下の文章は主にMySQL update文の実際の使い方を紹介します.私たちはまず単表のUPDATE文でMySQL update文を実現する実際の方案を引き出します.以下は文章の詳細な内容の説明で、見終わったら収穫があることを望んでいます.
単一テーブルのMySQL UPDATE文:
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 ageage=age+1; 
MySQL UPDATE付与は左から右に評価されます.たとえば、次の文は年齢列を2倍にしてから追加します.
MySQL> UPDATE persondata SET ageage=age*2, ageage=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によって提供され、他のテーブルに対して対応する修正を行うために使用されます.
現在、サブクエリでテーブルを更新しながら、同じテーブルから選択することはできません.