MySQLのUpdateで複数のカラムを更新する方法!
MySQLでレコードを更新する際にはUpdate文を使います。Updateを行う際に1つのカラムの値だけを更新するのではなく、複数カラムを同時に更新することもできます。この記事ではMySQLのUpdateで複数のカラムを更新する方法を紹介しています。
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
カラムは更新されないままになっている。これならシンタックスエラーが出て、全く更新されない方がまだありがたいです。
複数カラムを更新する際は、必ず「,
」で複数カラムを指定するように気をつけてください。
