MySQLのUpdateで複数のカラムを更新する方法!

MySQLでレコードを更新する際にはUpdate文を使います。Updateを行う際に1つのカラムの値だけを更新するのではなく、複数カラムを同時に更新することもできます。この記事ではMySQLのUpdateで複数のカラムを更新する方法を紹介しています。

コンテンツ [表示]

  1. 1MySQLのUpdateで複数のカラムを更新する方法
  2. 1.1複数カラムを更新
  3. 1.2andを使って間違って更新した場合

MySQLのUpdateで複数のカラムを更新する方法

DBでレコードを追加や更新、削除といったことを行います。MySQLではUpdate文を使ってデータの値を更新します。

今回この記事では1つのカラムの値を更新するだけでなく、複数のカラムの値を更新する方法を紹介していきます。

まずはサンプルテーブルとサンプルデータを用意していきます。

mysql> desc users;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10) | YES  |     | NULL    |                |
| email | varchar(30) | YES  |     | NULL    |                |
| age   | int(11)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> select * from users;
+----+--------+--------------------+------+
| id | name   | email              | age  |
+----+--------+--------------------+------+
|  1 | taro   | taro@example.com   |   22 |
|  2 | hanako | hanako@example.com |   20 |
+----+--------+--------------------+------+
2 rows in set (0.00 sec)

複数カラムを更新

まず、1つのカラムの値を更新するUpdate文はこちらです。

1つのカラムを更新

update テーブル名 set カラム名 = 更新後の値 where 条件式;

updateの後にテーブルを指定し、setの後に更新するカラムと値を指定します。

それでは実際にサンプルデータを用いて、更新してみましょう。

mysql> select * from users where id = 1;
+----+------+------------------+------+
| id | name | email            | age  |
+----+------+------------------+------+
|  1 | taro | taro@example.com |   22 |
+----+------+------------------+------+
1 row in set (0.00 sec)

mysql> update users set age = 24 where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from users where id = 1;
+----+------+------------------+------+
| id | name | email            | age  |
+----+------+------------------+------+
|  1 | taro | taro@example.com |   24 |
+----+------+------------------+------+
1 row in set (0.00 sec)

idカラムの値が1のレコードのageカラムが22から24に更新することができました。レコードの値を更新する際は条件式を使って、1つのレコードを特定するようにしないと全てのレコードが更新されてしまうので注意してください。

では、次に複数カラムを更新する方法を見ていきましょう。

複数カラムを更新

update テーブル名 set カラム1名 = 更新後の値1, カラム2名 = 更新後の値2 where 条件式;

複数カラムを更新する場合はsetの後に「,」(カンマ)で区切って複数指定するだけです。それでは実際に更新してみましょう。

mysql> select * from users where id = 2;
+----+--------+--------------------+------+
| id | name   | email              | age  |
+----+--------+--------------------+------+
|  2 | hanako | hanako@example.com |   20 |
+----+--------+--------------------+------+
1 row in set (0.00 sec)

mysql> update users set name = 'sachiko', email = 'sachiko@example.com' where id = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from users where id = 2;
+----+---------+---------------------+------+
| id | name    | email               | age  |
+----+---------+---------------------+------+
|  2 | sachiko | sachiko@example.com |   20 |
+----+---------+---------------------+------+
1 row in set (0.00 sec)

無事にnameカラムとemailカラムの値を同時に更新することができました。

andを使って間違って更新した場合

複数カラムを指定する際に「,」(カンマ)区切りで指定するのですが、andを使って複数カラムを指定しまう間違いがよくあります。

andで複数カラムを指定するとどのようになるのかを少し見ておきましょう。

mysql> select * from users where id = 1;
+----+------+------------------+------+
| id | name | email            | age  |
+----+------+------------------+------+
|  1 | taro | taro@example.com |   24 |
+----+------+------------------+------+
1 row in set (0.00 sec)

mysql> update users set name = 'jiro' and email = 'jiro@example.com' where id = 1;
Query OK, 1 row affected, 2 warnings (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 2

mysql> select * from users where id = 1;
+----+------+------------------+------+
| id | name | email            | age  |
+----+------+------------------+------+
|  1 | 0    | taro@example.com |   24 |
+----+------+------------------+------+
1 row in set (0.00 sec)

シンタックスエラーは出ずに、nameカラムは0という値に更新され、emailカラムは更新されないままになっている。これならシンタックスエラーが出て、全く更新されない方がまだありがたいです。

複数カラムを更新する際は、必ず「,」で複数カラムを指定するように気をつけてください。

GeekHive採用サイト

関連記事