MySQLのINSERT文にWHERE句を追加するには?UPDATE文による条件付き更新の方法
MySQLでは、INSERT文そのものにWHERE句を追加することはできません。すでに存在するレコードを条件を指定して変更したい場合は、代わりにUPDATE文を使用します。
UPDATE文の基本構文
update テーブル名
set カラム名1=値1, カラム名2=値2, ....N
where 条件;
この構文により、WHERE句で指定した条件に一致する行だけが更新されます。それでは、実際の例を見ていきましょう。
サンプルテーブルの作成
まず、例として使用するテーブルを作成します。
mysql> create table addWhereClauseDemo
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(30),
-> StudentPassword varchar(40)
-> );
Query OK, 0 rows affected (0.45 sec)
学生ID(自動採番の主キー)、学生名、パスワードの3つのカラムを持つテーブル「addWhereClauseDemo」が作成されました。
レコードの挿入
次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。
mysql> insert into addWhereClauseDemo(StudentName,StudentPassword) values('John','John123456');
Query OK, 1 row affected (0.14 sec)
mysql> insert into addWhereClauseDemo(StudentName,StudentPassword) values('Carol','99999');
Query OK, 1 row affected (0.24 sec)
mysql> insert into addWhereClauseDemo(StudentName,StudentPassword) values('Bob','OO7Bob');
Query OK, 1 row affected (0.16 sec)
mysql> insert into addWhereClauseDemo(StudentName,StudentPassword) values('David','David321');
Query OK, 1 row affected (0.26 sec)挿入したデータの確認
SELECT文ですべてのレコードを表示して確認しましょう。
mysql> select *from addWhereClauseDemo;
出力結果は以下のとおりです。
+-----------+-------------+-----------------+
| StudentId | StudentName | StudentPassword |
+-----------+-------------+-----------------+
| 1 | John | John123456 |
| 2 | Carol | 99999 |
| 3 | Bob | OO7Bob |
| 4 | David | David321 |
+-----------+-------------+-----------------+
4 rows in set (0.00 sec)
WHERE句を使ったレコードの更新
ここからが本題です。「StudentId=4」のレコードに対して、WHERE句を指定したUPDATE文を実行し、学生名とパスワードを変更してみます。
mysql> update addWhereClauseDemo
-> set StudentName='Maxwell',StudentPassword='Maxwell44444' where StudentId=4;
Query OK, 1 row affected (0.18 sec)
Rows matched: 1 Changed: 1 Warnings: 0
「Rows matched: 1 Changed: 1」と表示されていることから、条件に一致した1行だけが正しく更新されたことがわかります。
更新後のデータ確認
もう一度SELECT文でテーブルの中身を確認してみましょう。
mysql> select *from addWhereClauseDemo;
出力結果は以下のとおりです。
+-----------+-------------+-----------------+
| StudentId | StudentName | StudentPassword |
+-----------+-------------+-----------------+
| 1 | John | John123456 |
| 2 | Carol | 99999 |
| 3 | Bob | OO7Bob |
| 4 | Maxwell | Maxwell44444 |
+-----------+-------------+-----------------+
4 rows in set (0.00 sec)
IDが4のレコードだけが「Maxwell / Maxwell44444」に更新され、他の行はそのまま維持されていることが確認できます。
まとめ
- INSERT文は新規レコードの追加専用であり、WHERE句を指定することはできません。
- 既存レコードを条件付きで変更したい場合は、UPDATE文とWHERE句を組み合わせます。
- WHERE句を忘れるとテーブル内の全レコードが更新されてしまうため、実行前には必ず条件を確認しましょう。
-
MySQLの1つのALTER文でカラムとインデックスを同時に追加する方法
はじめにMySQLでは、既存のテーブルに新しいカラムを追加すると同時に、そのカラムにインデックスを設定したいケースはよくあります。通常、これらは2つの別々のクエリで実行するイメージがありますが、実はALTER TABLE文を使えば、たった1つのクエリでカラムの追加とインデックスの作成を同時に行うことができます。この記事では、具体的な手順を実行例とともにわかりやすく解説します。基本構文ALTER文にADD句を組み合わせて使用します。構文は以下の通りです。ALTER TABLE テーブル名ADD カラム名 DATETIME DEFAULT NOW(),ADD INDEX(カラム名);ポイントは、複
-
MySQLビュー(VIEW)にWHERE句を使う方法をわかりやすく解説
MySQLビューでWHERE句を使用する方法MySQLでは、作成済みのビュー(VIEW)に対して、通常のテーブルと同じようにWHERE句を指定してデータを絞り込むことができます。基本となる構文は以下の通りです。select * from yourViewName where yourColumnName=yourValue;それでは、実際にサンプルを使って手順を確認していきましょう。1. サンプルテーブルを作成するまず、学生情報を格納するテーブルを作成します。mysql> create table DemoTable1432 -> ( -> StudentId