MySQLでテーブルの行全体を更新する方法|UPDATE文の基本と実例
MySQLで行全体を更新するには?
MySQLでテーブルの行全体(レコード)を更新したい場合は、UPDATEコマンドを使用します。更新対象の行を正確に特定するために、主キー(PRIMARY KEY)カラムの値が必要になります。
行全体を更新するための基本的な構文は以下の通りです。
UPDATE yourTableName SET yourColumnName1 = 'yourValue1', yourColumnName2 = 'yourValue2',
yourColumnName3 = 'yourValue3', .......................N
WHERE yourPrimaryKeyColumnName = yourValue;
SET句に更新したいカラム名と新しい値を列挙し、WHERE句で主キーを指定することで、その1行だけを安全に更新できます。WHERE句を忘れると全レコードが更新されてしまうので注意してください。
サンプルテーブルを作成する
構文を実際に理解するために、まずテーブルを作成しましょう。テーブル作成のクエリは以下の通りです。
mysql> create table UpdateEntireRowDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> Age int,
-> Marks int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.74 sec)
このテーブルでは「Id」が主キーとなっており、AUTO_INCREMENTによって自動的に採番されます。
テストデータを挿入する
次に、INSERTコマンドを使っていくつかのレコードを挿入します。
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('Sam',23,78);
Query OK, 1 row affected (0.32 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('Mike',21,99);
Query OK, 1 row affected (0.16 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('Carol',26,80);
Query OK, 1 row affected (0.11 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('John',22,71);
Query OK, 1 row affected (0.16 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('Bob',29,89);
Query OK, 1 row affected (0.16 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('David',25,68);
Query OK, 1 row affected (0.20 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('Larry',31,91);
Query OK, 1 row affected (0.12 sec)
挿入されたデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from UpdateEntireRowDemo;
実行結果は以下の通りです。
+----+-------+------+-------+ | Id | Name | Age | Marks | +----+-------+------+-------+ | 1 | Sam | 23 | 78 | | 2 | Mike | 21 | 99 | | 3 | Carol | 26 | 80 | | 4 | John | 22 | 71 | | 5 | Bob | 29 | 89 | | 6 | David | 25 | 68 | | 7 | Larry | 31 | 91 | +----+-------+------+-------+ 7 rows in set (0.00 sec)
UPDATE文で行全体を更新する
それでは、実際にMySQLで行全体を更新してみましょう。ここでは例として、「Id」が5であるBobの行を更新します。Name・Age・Marksのすべての値を変更します。
実行するクエリは以下の通りです。
mysql> update UpdateEntireRowDemo
-> set Name = 'James',Age = 19,Marks = 78
-> where Id = 5;
Query OK, 1 row affected (0.12 sec)
Rows matched: 1 Changed: 1 Warnings: 0
「Rows matched: 1 Changed: 1」と表示されていることから、該当する1行が正しく更新されたことがわかります。
更新結果を確認する
更新後の行をSELECT文で確認してみます。
mysql> select *from UpdateEntireRowDemo where Id = 5;
実行結果は以下の通りです。
+----+-------+------+-------+ | Id | Name | Age | Marks | +----+-------+------+-------+ | 5 | James | 19 | 78 | +----+-------+------+-------+ 1 row in set (0.00 sec)
Nameが「James」、Ageが「19」、Marksが「78」に変更され、行全体が正常に更新されていることが確認できます。
テーブル全体で最終確認
最後に、テーブル内のすべてのレコードを表示して全体を確認してみましょう。
mysql> select *from UpdateEntireRowDemo;
以下の出力を見ると、Id=5の行だけが更新され、他のレコードには影響がないことがわかります。
+----+-------+------+-------+ | Id | Name | Age | Marks | +----+-------+------+-------+ | 1 | Sam | 23 | 78 | | 2 | Mike | 21 | 99 | | 3 | Carol | 26 | 80 | | 4 | John | 22 | 71 | | 5 | James | 19 | 78 | | 6 | David | 25 | 68 | | 7 | Larry | 31 | 91 | +----+-------+------+-------+ 7 rows in set (0.00 sec)
まとめ
MySQLで行全体を更新する際のポイントは以下の通りです。
- UPDATE文を使用し、SET句で更新対象のカラムと値を指定する
- WHERE句で主キーを指定することで、目的の1行だけを確実に更新できる
- WHERE句を指定しないとテーブル内の全レコードが更新されるため、必ず条件をつける
- 更新後はSELECT文で結果を確認し、意図した通りに反映されているかチェックすると安心
この手順を覚えておけば、特定のレコードの内容をまとめて修正したい場合にもスムーズに対応できます。
-
JavaのPreparedStatementを使ってMySQLテーブルを更新する方法
JavaからMySQLのテーブルを更新するには、PreparedStatementを使用するのが一般的で安全な方法です。PreparedStatementを使うことで、SQLインジェクションを防ぎつつ、パラメータを動的に設定できます。この記事では、実際にテーブルを作成し、Javaプログラムからレコードを更新するまでの一連の手順を解説します。1. テーブルの作成まず、MySQLで更新用のテーブルを作成しましょう。mysql> create table DemoTable( Id int, FirstName varchar(40) ); Query OK, 0 rows a
-
MySQLでGROUP BYのように特定の1行だけ更新する方法|ORDER BYとLIMITを活用したUPDATE文の書き方
MySQLでは、UPDATE文の中でGROUP BYを直接使用することができません。しかし、「同じ値を持つ複数のレコードの中から、最初の1行だけを更新したい」というケースは実際の開発でよく発生します。 そんなときに役立つのが、ORDER BYとLIMITを組み合わせたUPDATE文です。この記事では、サンプルテーブルを使いながら、その具体的な手順をわかりやすく解説します。 1. サンプルテーブルを作成する まず、従業員情報を格納するテーブル「DemoTable2018」を作成します。テーブルには、自動採番される主キー「EmployeeId」、従業員名「EmployeeName」、給与「Emp