MySQL UPDATE文
1. MySQL UPDATE文とは
UPDATEステートメントは、テーブル内の既存のレコードを更新または修正するために使用されます。
1.1 UPDATEの構文
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;注意: テーブルのレコードを更新する際は、細心の注意を払ってください。UPDATEステートメントにおける WHERE句 に注目してください。WHERE句は、どのレコードを更新すべきかを指定します。もし WHERE句を省略した場合、テーブル内のすべてのレコードが更新されてしまいます!
2. デモ用データベース
以下は、Northwindサンプルデータベースの「Customers」テーブルから抽出したデータです。
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
3. レコードの更新例
以下のSQLは、CustomerIDが1のレコードに対して、新しい担当者名(ContactName)および新しい都市(City)を更新します。
3.1 実行例
独自のSQLサーバーで試してみましょう:
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City = 'Frankfurt'
WHERE CustomerID = 1;実行後、「Customers」テーブルの該当レコードは以下のように変化します。
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Alfred Schmidt | Obere Str. 57 | Frankfurt | 12209 | Germany |
| 2 | ... | ... | ... | ... | ... | ... |
4. 複数レコードの一括更新
WHERE句によって、更新対象となるレコードの範囲が決まります。
以下のSQLは、国(Country)が「Mexico」であるすべてのレコードの郵便番号(PostalCode)を「00000」に更新します。
4.1 実行例
UPDATE Customers
SET PostalCode = 00000
WHERE Country = 'Mexico';実行後のテーブルの状態は以下の通りです。
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Alfred Schmidt | Obere Str. 57 | Frankfurt | 12209 | Germany |
| 2 | Ana Trujillo... | Ana Trujillo | ... | México D.F. | 00000 | Mexico |
| 3 | Antonio Moreno... | Antonio Moreno | ... | México D.F. | 00000 | Mexico |
| 4 | Around the Horn | Thomas Hardy | ... | London | WA1 1DP | UK |
5. 【重要】更新時の警告!
レコードを更新する際は、常に慎重に行ってください。WHERE句を省略すると、すべてのレコードが一括で更新されます。
例えば、以下のSQLを実行すると、テーブル内の全レコードの郵便番号が「00000」に書き換えられてしまいます。
5.1 危険な例(全更新)
UPDATE Customers
SET PostalCode = 00000;この操作の結果、「Customers」テーブルは以下のようになります。
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Alfred Schmidt | ... | Frankfurt | 00000 | Germany |
| 2 | Ana Trujillo... | Ana Trujillo | ... | México D.F. | 00000 | Mexico |
| 3 | Antonio Moreno... | Antonio Moreno | ... | México D.F. | 00000 | Mexico |
| 4 | Around the Horn | Thomas Hardy | ... | London | 00000 | UK |
実務でのデータ操作において、WHERE句の指定漏れは致命的なミスに繋がるため、実行前に必ず確認する習慣をつけましょう。