MySQL 速習チュートリアル

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」テーブルから抽出したデータです。

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK

3. レコードの更新例

以下のSQLは、CustomerIDが1のレコードに対して、新しい担当者名(ContactName)および新しい都市(City)を更新します。

3.1 実行例

独自のSQLサーバーで試してみましょう:

UPDATE Customers
SET ContactName = 'Alfred Schmidt', City = 'Frankfurt'
WHERE CustomerID = 1;

実行後、「Customers」テーブルの該当レコードは以下のように変化します。

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteAlfred SchmidtObere Str. 57Frankfurt12209Germany
2..................

4. 複数レコードの一括更新

WHERE句によって、更新対象となるレコードの範囲が決まります。

以下のSQLは、国(Country)が「Mexico」であるすべてのレコードの郵便番号(PostalCode)を「00000」に更新します。

4.1 実行例

UPDATE Customers
SET PostalCode = 00000
WHERE Country = 'Mexico';

実行後のテーブルの状態は以下の通りです。

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteAlfred SchmidtObere Str. 57Frankfurt12209Germany
2Ana Trujillo...Ana Trujillo...México D.F.00000Mexico
3Antonio Moreno...Antonio Moreno...México D.F.00000Mexico
4Around the HornThomas Hardy...LondonWA1 1DPUK

5. 【重要】更新時の警告!

レコードを更新する際は、常に慎重に行ってください。WHERE句を省略すると、すべてのレコードが一括で更新されます。

例えば、以下のSQLを実行すると、テーブル内の全レコードの郵便番号が「00000」に書き換えられてしまいます。

5.1 危険な例(全更新)

UPDATE Customers
SET PostalCode = 00000;

この操作の結果、「Customers」テーブルは以下のようになります。

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteAlfred Schmidt...Frankfurt00000Germany
2Ana Trujillo...Ana Trujillo...México D.F.00000Mexico
3Antonio Moreno...Antonio Moreno...México D.F.00000Mexico
4Around the HornThomas Hardy...London00000UK

実務でのデータ操作において、WHERE句の指定漏れは致命的なミスに繋がるため、実行前に必ず確認する習慣をつけましょう。