mysql update statement tutorial update query syntax examples
このチュートリアルでは、MySQLUPDATEステートメントとクエリの構文および例について説明します。また、MySQL UpdateTableコマンドのさまざまなバリエーションについても学習します。
他のデータベースと同様に、テーブル内の既存のデータを常に更新、変更、または変更する必要があります。 MySQLには、テーブル内のデータを更新または変更するために使用できるUPDATEステートメントがあります。
このコマンドを使用して、1つまたは複数のフィールドを更新できます。特定のテーブルの値を一度に更新できます。 WHERE句を使用することで、特にテーブルから特定の行を更新する必要がある場合に使用される条件を指定できます。
先に進む前に、MySQLバージョン8.0を使用していることに注意してください。あなたはそれをからダウンロードすることができます ここに。
学習内容:
MySQLUPDATEテーブルの構文
UPDATE table_name SET column1 = new_value1, column2 = new_value2, ... WHERE condition;
構文の説明:
- 構文はキーワード「UPDATE」で始まり、それによって実行されるアクティビティのタイプについてMySQLサーバーに通知します。これは必須のキーワードであり、省略できません。
- 次に、更新アクションを実行する必要があるテーブルの名前を示します。これは必須であり、省略できません。
- 第三に、これもキーワード–SETです。このキーワードは、列名の更新される値についてMySQLサーバーに通知します。これは必須のキーワードであり、省略できません。
- 次に、更新される列名とそれに対応する値が表示されます。これも必須であり、省略できません。
- 次に、WHERE条件が発生します。これは、UPDATEアクションを適用する必要のあるターゲット行の数を制限またはフィルタリングします。 WHEREもキーワードですが、オプションです。
ただし、WHERE句は重要です。言及されていない場合、または条件が正しく設定されていない場合、テーブルも不要な行も更新されません。
UPDATEテーブルステートメントの修飾子
以下にリストされているのは、UPDATEステートメントの修飾子です。
バブルソートコードc ++
LOW_PRIORITY: この修飾子は、テーブルからの接続の読み取りがなくなるまで更新を遅らせるようにMySQLエンジンに通知します。
無視: この修飾子は、エラーが発生した場合でもUPDATE操作を続行するようにMySQLEngineに通知します。エラーの原因となった行に対して更新アクションは実行されません。
MySQLUPDATEの例
以下に、MySQLで作成されたサンプルテーブルを示します。
スキーマ名: パシフィック
テーブル名: 従業員
列名:
- empNum –従業員番号の整数値を保持します。
- lastName –従業員の姓のvarchar値を保持します。
- firstName –従業員の名のvarchar値を保持します。
- email –従業員の電子メールIDのvarchar値を保持します。
- deptNum –従業員が属する部門IDのvarcharを保持します。
- salary –各従業員の給与の10進値を保持します。
スキーマ名: パシフィック
テーブル名: 部門
列名:
- deptNum –組織内の部門IDのvarcharを保持します。
- city –部門が所属する都市の名前を保持します。
- 国–都市に対応する国の名前を保持します。
- ボーナス–ボーナスのパーセンテージ値を保持します。
MySQLUPDATEテーブルコマンド
#1)MySQLが単一列を更新する
それでは、更新したいレコードを見つけましょう。最初に、UPDATEキーワードを使用して単一の列を更新する必要があるシナリオを見ていきます。
これは、従業員番号が1008の従業員です。
クエリとそれに対応する結果は次のとおりです。
UPDATEキーワードを使用して、この従業員のメールIDをob@gmail.comからoliver.bailey@gmail.comに更新しましょう。
更新: キーワードは、ステートメントがテーブルの更新に関するものであることをMySQLエンジンに通知します。
セットする: この句は、このキーワードの後に記載されている列名の値を新しい値に設定します。
どこ: この句は、更新する必要がある特定の行を指定します。
UPDATEステートメントの実行後、出力にはステートメントの実行に関連する統計が表示されます。
表示される詳細は次のとおりです。
- 実行されたステートメント。
- 更新された行数と警告があったかどうかを示すメッセージ。
UPDATEステートメントの出力を確認するために、SELECTステートメントを再実行して、電子メールIDの変更を確認しましょう。
前のテーブルスナップショット:
empNum | ファーストネーム | 苗字 | Eメール | deptNum |
---|---|---|---|---|
7 | ローマ | イタリア | ||
1008 | オリバー | ベイリー | ob@gmail.com | 3 |
クエリ:
UPDATE employees SET email = “oliver.bailey@gmail.com” WHERE empNum = 1008 AND email = “ob@gmail.com” ;
後のテーブルスナップショット:
empNum | ファーストネーム | 苗字 | Eメール | deptNum |
---|---|---|---|---|
1008 | オリバー | ベイリー | Oliver.bailey@gmail.com | 3 |
#2)MySQLが複数の列を更新する
UPDATEステートメントを使用して複数の列を更新する構文は、単一の列を更新する構文と同じです。 1つのSETステートメントには、複数の列名と、設定する必要のある新しい値がコンマで区切られて含まれます。
更新する必要のある行を見てみましょう。従業員番号が1003の行。
ここでは、lastNameを「Mary」から「Margaret」に更新してから、メールIDをml@gmail.comからmargaret.langaley@gmail.comに更新してみます。
以下は、UPDATEクエリです。カンマで区切られた列名に注意してください。
上記の実行の出力は、前の場合と同じ統計を示しています。
以下は、UPDATEステートメントの実行後の同じレコードの出力です。
前のテーブルスナップショット:
empNum | ファーストネーム | 苗字 | Eメール | deptNum |
---|---|---|---|---|
1003 | メアリー | ラングレー | ml@gmail.com | 二 |
クエリ:
UPDATE employees SET firstName = “Margaret”, email = “margaret.lagaley@gmail.com” WHERE empNum = 1003 AND firstName = “Mary” AND email = “ml@gmail.com” ;
後のテーブルスナップショット:
empNum | ファーストネーム | 苗字 | Eメール | deptNum |
---|---|---|---|---|
1003 | マーガレット | ラングレー | margaret.langley@gmail.com | 3 |
#3)REPLACE関数を使用したMySQLの更新
REPLACE関数を使用してテーブルの行を更新する方法について詳しく見ていきましょう。更新するターゲットレコードは次のとおりです。
以下のレコードは従業員番号1010のものです。メールIDをja@gmail.comからjacob.armstrong@gmail.comに更新することを目標としています。
メールIDを更新するREPLACE関数で次のUPDATEクエリを使用してみましょう。
以下は、REPLACE関数で渡されるパラメーターです。 3つのパラメータはすべて位置的なものです。つまり、パラメータの順序を変更することはできません。
1stパラメータ–電子メールIDの名前が含まれます。
二ndパラメータ–変更されるFROM電子メールIDが含まれます。
3rdパラメータ–新しい値であるTO電子メールIDが含まれます。
以下は、UPDATEステートメントの実行後のテーブルのスナップショットです。
前のテーブルスナップショット:
empNum | ファーストネーム | 苗字 | Eメール | deptNum |
---|---|---|---|---|
1010 | ヤコブ | アームストロング | ja@gmail.com | 4 |
クエリ:
UPDATE employees SET email = REPLACE(email, “ja@gmail.com”, jacob.armstrong@gmail.com) WHERE empNum = 1010 ;
後のテーブルスナップショット:
empNum | ファーストネーム | 苗字 | Eメール | deptNum |
---|---|---|---|---|
1010 | ヤコブ | アームストロング | jacob.armstrong@gmail.com | 4 |
#4)SELECTステートメントを使用したMySQL UPDATE
このタイプのUPDATEでは、更新される列の新しい値は、サブクエリのSELECTステートメントによってフェッチされます。それでは、ここで「従業員」の表から例を見てみましょう。更新するターゲットレコードは次のとおりです。
この場合、departmentsテーブルを使用して、部門番号、つまりdeptNum列を更新します。部門テーブルを見ると、deptNum = 5はベルリンに対応しています。この従業員をdeptNum = 2のCharlotteに移動しましょう。
このタスクを実行するために、次のUPDATEステートメントが使用されます。
UPDATEステートメントの出力を確認するために、 選択する ステートメント。
上記のように、deptNum列の値が「2」に更新されました。
前のテーブルスナップショット:
empNum | ファーストネーム | 苗字 | Eメール | deptNum |
---|---|---|---|---|
1005 | ピーター | 読んだ | pl@gmail.com | 5 |
deptNum | 市 | 国 |
---|---|---|
1 | ニューヨーク | アメリカ |
二 | シャーロット | アメリカ |
3 | シカゴ | アメリカ |
4 | ロンドン | イングランド |
5 | ベルリン | ドイツ |
6 | ムンバイ | インド |
クエリ:
後のテーブルスナップショット:
empNum ファーストネーム 苗字 Eメール deptNum 7 ローマ イタリア ヌル 1005 ピーター 読んだ pl@gmail.com 二
#5)MySQLUPDATE複数行
場合によっては、異なる値を持つ複数の行の1つ以上の列を更新する必要があるという要件に直面することがあります。
例えば、 部門ごとに特定の量のボーナスを与えたいのです。つまり、部門内のすべての従業員は特定の量のボーナスを受け取る必要があります。
一般的な構文は次のとおりです。
UPDATE TAB1 SET COL2 = CASE WHEN condition1 THEN value1 WHEN condition2 THEN value2 …. ELSE result1 END;
これを例で説明するために、部門テーブルにもう1つの列を追加しましょう。部門テーブルに「ボーナス」列を追加します。アイデアは、各部門にボーナスパーセンテージを割り当て、各部門に対応するそのパーセンテージだけ従業員の給与を引き上げることです。
これを実現するために、次のALTERステートメントを実行して列を追加します。
ALTER TABLE departments ADD COLUMN bonus decimal(5,2);
以下は、上記の変更後のテーブル構造です。新しい列は次のように追加されます ヌル 値として。

次に、各部門のボーナスの割合を更新するUPDATEクエリを作成しましょう。

上記のステートメントの実行後、以下はボーナス列の値が更新されたスナップショットです。

前のテーブルスナップショット:
deptNum 市 国 ボーナス 1 ニューヨーク アメリカ ヌル 二 シャーロット アメリカ ヌル 3 シカゴ アメリカ ヌル 4 ロンドン イングランド ヌル 5 ベルリン ドイツ ヌル 6 ムンバイ インド ヌル
クエリ:
UPDATE departments SET bonus = CASE WHEN deptNum = 1 THEN 3.00 WHEN deptNum= 2 THEN 5.00 WHEN deptNum= 3 THEN 8.00 WHEN deptNum= 4 THEN 10.00 WHEN deptNum= 5 THEN 13.00 WHEN deptNum= 6 THEN 15.00 WHEN deptNum= 7 THEN 18.00 END;
後のテーブルスナップショット:
deptNum 市 国 ボーナス 7 ローマ イタリア 18 1 ニューヨーク アメリカ 3 二 シャーロット アメリカ 5 3 シカゴ アメリカ 8 4 ロンドン イングランド 10 5 ベルリン ドイツ 13 6 ムンバイ インド 15
#6)INNERJOINキーワードを使用したMySQLの更新
参加する SQLステートメントで最も重要なキーワードの1つです。通常、SELECTステートメントで使用した可能性があります。
JOINステートメントには基本的に4つのタイプがあります。
- 内部結合: 両方のテーブルに共通するレコードをフェッチします。
- 左結合: キーワードの左側のテーブルからすべてのレコードをフェッチし、キーワードの右側のテーブルから一致するレコードをフェッチします。
- 右結合: キーワードの右側のテーブルからすべてのレコードをフェッチし、キーワードの左側のテーブルから一致するレコードをフェッチします。
- 外部結合: 両方のテーブルからすべてのレコードをフェッチし、対応する不一致のレコードをNULLとして表します。
MySQLは、UPDATEステートメントでもJOINを使用してクロステーブル更新を実行するユニークな機会を提供します。ただし、INNERJOINとLEFTJOINのみに制限されています。
JOINキーワードを使用したUPDATEステートメントの一般的な構文は次のとおりです。
UPDATE TAB1, TAB2, (INNER JOIN | LEFT JOIN) TAB1 ON TAB1.COL1 = TAB2.COL1 SET TAB1.COL2 = TAB2.COL2, TAB2.COL3 = expr WHERE condition
- ここで、UPDATEステートメントは3つのデータ項目を想定しています。
- 結合が実行されているテーブル名、TAB1およびTAB2。
- 実行する予定のJOINのタイプ、INNERまたはLEFT。
- 次に、SETコマンドに従います。これを使用して、TAB1とTAB2のいずれかまたは両方の列値を更新できます。
- 最後に、WHERE句を使用して、条件に一致する行のみを更新します。
これを例で説明するために、Employeesテーブルにもう1つの列を追加しましょう。 「salary」列をEmployeesテーブルに追加します。アイデアは、部門テーブルのボーナス列にあるボーナスパーセンテージ値によって従業員の給与を引き上げることです。
これを実現するために、次のALTERステートメントを実行して列を追加します。
ALTER TABLE employees ADD COLUMN salarydecimal(7,2);
次に、追加した2つの新しいフィールドにデータを入力します。値を入力した後、以下はテーブルの内容です。
従業員テーブル:
empNum ファーストネーム 苗字 Eメール deptNum 給料 1007 シュミット ジェームズ js@gmail.com 4 18000 1001 アンドリュース ジャック ja@gmail.com 1 3000 1002 シュワッツ マイク ms@gmail.com 1 5000 1003 ラングレー マーガレット margaret.langley@gmail.com 二 8000 1004 ハレラ サンドラ sh@gmail.com 1 10,000 1005 読んだ ピーター pl@gmail.com 二 13000 1006 キース ジェニー jk@gmail.com 二 15000 1008 ベイリー オリバー Oliver.bailey@gmail.com 3 21000 1009 カップ ハリー hb@gmail.com 5 24000 1010 アームストロング ヤコブ jacob.armstrong@gmail.com 4 27000
それでは、JOINキーワードを使用して、部門のテーブルのボーナスパーセンテージですべての従業員の給与を更新しましょう。ここで、deptNumは、2つのテーブルが一致するキーです。
F 以下は、現時点での従業員の給与のスナップショットです。

Departmentsテーブルからのスナップショットは次のとおりです。

以下は、deptNumキー列に基づく部門のテーブルのボーナスパーセンテージに基づいて従業員の給与を更新するUPDATEクエリです。

それでは、ハイキング後の各従業員の給与を確認しましょう。

前のスナップショットと比較すると、給与に追加されたボーナスの割合を簡単に理解できます。
すべての従業員が応援している必要があります!
前のテーブルスナップショット:
empNum ファーストネーム 苗字 Eメール deptNum 給料 1007 シュミット ジェームズ js@gmail.com 4 18000 1001 アンドリュース ジャック ja@gmail.com 1 3000 1002 シュワッツ マイク ms@gmail.com 1 5000 1003 ラングレー マーガレット margaret.langley@gmail.com 二 8000 1004 ハレラ サンドラ sh@gmail.com 1 10,000 1005 読んだ ピーター pl@gmail.com 二 13000 1006 キース ジェニー jk@gmail.com 二 15000 1008 ベイリー オリバー Oliver.bailey@gmail.com 3 21000 1009 カップ ハリー hb@gmail.com 5 24000 1010 アームストロング ヤコブ jacob.armstrong@gmail.com 4 27000
deptNum 市 国 ボーナス 7 ローマ イタリア 18 1 ニューヨーク アメリカ 3 二 シャーロット アメリカ 5 3 シカゴ アメリカ 8 4 ロンドン イングランド 10 5 ベルリン ドイツ 13 6 ムンバイ インド 15
クエリ:
UPDATE employees INNER JOIN departments ON employees.deptNum = departments.deptNum SET salary = salary + ((salary * bonus)/100) ;
後のテーブルスナップショット:
empNum ファーストネーム 苗字 Eメール deptNum 給料 1007 シュミット ジェームズ js@gmail.com 4 21780 1001 アンドリュース ジャック ja@gmail.com 1 3182.7 1002 シュワッツ マイク ms@gmail.com 1 5304.5 1003 ラングレー マーガレット margaret.langley@gmail.com 二 8820 1004 ハレラ サンドラ sh@gmail.com 1 10609 1005 読んだ ピーター pl@gmail.com 二 14332.5 1006 キース ジェニー jk@gmail.com 二 16537.5 1008 ベイリー オリバー Oliver.bailey@gmail.com 3 24494.4 1009 カップ ハリー hb@gmail.com 5 30645.6 1010 アームストロング ヤコブ jacob.armstrong@gmail.com 4 32670
#7)LEFTJOINキーワードを使用したMySQLUPDATE
前のセクションで説明したように、MySQLUPDATEで許可されるJOINには2つのタイプがあります。 INNERJOINを使用したUPDATEはすでに見ました。
LEFTJOINを使用したUPDATEから始めましょう。
例:
まだどの部門にも割り当てられていない新入社員がいます。ただし、すべての新入社員に1%のボーナスを与える必要があります。現在、新入社員はどの部門にも割り当てられていないため、そのテーブルからボーナスパーセンテージ情報を取得することはできません。このような場合、LEFTJOINを使用して新入社員の給与を更新します。
これを実現するために、従業員データベースに新しい従業員を追加しましょう。
INSERT INTO employees(empNum, firstName, lastName, email, deptNum, Salary) VALUES (1011, “Tom”, “Hanks”, th@gmail.com, NULL, 10000.00);
以下は、追加した新しいレコードです。

従業員テーブル:
empNum ファーストネーム 苗字 Eメール deptNum 給料 1007 シュミット ジェームズ js@gmail.com 4 21780 1001 アンドリュース ジャック ja@gmail.com 1 3183 1002 シュワッツ マイク ms@gmail.com 1 5305 1003 ラングレー マーガレット margaret.langley@gmail.com 二 8820 1004 ハレラ サンドラ sh@gmail.com 1 10609 1005 読んだ ピーター pl@gmail.com 二 14333 1006 キース ジェニー jk@gmail.com 二 16538 1008 ベイリー オリバー Oliver.bailey@gmail.com 3 24494 1009 カップ ハリー hb@gmail.com 5 30646 1010 アームストロング ヤコブ jacob.armstrong@gmail.com 4 32670 1011 ハンクス トム th@gmail.com ヌル 10,000
次に、LEFT JOIN句を指定したUPDATEステートメントを使用して、トムに給与に加えて1%のボーナスを与えます。

以下は、TOMのハイキング後の給与です。

前のスナップショットと比較すると、給与に追加されたボーナス%を簡単に理解できます。
前のテーブルスナップショット:
empNum ファーストネーム 苗字 Eメール deptNum 給料 1011 トム ハンクス th@gmail.com ヌル 10,000
クエリ:
UPDATE employees LEFT JOIN departments ON employees.deptNum = departments.deptNum SET salary = salary + ((salary * 1)/100) WHERE employees.deptNum IS NULL ;
後のテーブルスナップショット:
empNum ファーストネーム 苗字 Eメール deptNum 給料 1011 トム ハンクス th@gmail.com ヌル 10100
推奨読書= >> MySQLが参加します
よくある質問と回答
Q#1)MySQLで属性を更新するにはどうすればよいですか?
回答: MySQL UPDATEステートメントを使用して属性を更新できます。ステートメントは、UPDATEキーワードで始まり、その後にテーブル名が続きます。次はSET句で、その後に列名とWHERE句が続きます。
Q#2)MySQLで複数のレコードをどのように更新しますか?
回答: 上に描かれているように、 「複数の行を更新する」 セクションでは、CASEステートメントを使用して、同じ値または異なる値を持つ1つ以上の列の複数の行を更新できます。
Q#3)MySQLの更新クエリでJOINを使用できますか?
回答: はい、MySQLではUPDATEステートメントでJOINを使用できます。ただし、内部結合と左結合のみに制限されています。
Q#4)MySQLはどこからダウンロードしますか?
回答: MySQLバージョン8.0はここからダウンロードできます。 MySQL 。
Q#5)UpdateステートメントのWHERE句の意味は何ですか?
回答: WHERE句は、UPDATE句の条件に適合する必要がある行数を制限します。
推奨読書= >>使用方法 MySQLIfステートメント
結論
したがって、このチュートリアルでは、MySQLUPDATEステートメントを実行する7つの異なる方法について学習しました。
- 単一の列を更新する
- 複数の列を更新する
- REPLACEを使用して更新
- SELECTを使用して更新する
- 複数の行を更新する
- INNERJOINを使用して更新する
- LEFTJOINを使用して更新する
要件に基づいて、これらのいずれかを使用できます。
幸せな読書!!
推奨読書