これまでデータベースに保存したデータを元に計算したり加工したものを抽出してきましたが、この方法では元のデータは変更されません。この記事では保存したデータそのものを更新する方法について解説します。
元データの更新
データベースに保存したデータ自体を更新したい場合は次のようにUPDATE文を使います。
UPDATE テーブル名 SET 更新したいカラム = 新しい値;
実際にINSERTしたデータをUPDATE文で更新して取得してみましょう。
-- titlesという名前のテーブルがあれば削除 DROP TABLE IF EXISTS titles; -- titlesという名前のテーブルを作成 CREATE TABLE titles ( id INT NOT NULL AUTO_INCREMENT, author_id INT, post_title VARCHAR(50) UNIQUE, view INT, PRIMARY KEY (id) ); -- レコードを挿入 INSERT INTO titles (author_id, post_title, view) VALUES (1, 'MySQLとは', 10), (2, 'SQLとはなにか', 50), (1, 'DockerでMySQLを使う方法', 100); -- viewに5を足す UPDATE titles SET view = view + 5; SELECT * FROM titles;
実行結果は次のとおりです。
id author_id post_title view 1 1 MySQLとは 15 2 2 SQLとはなにか 55 3 1 DockerでMySQLを使う方法 105
特定のレコードだけ更新
特定のレコードだけ指定して更新するにはWHERE句を使って次のように記述します。
UPDATE テーブル名 SET 更新したいカラム = 新しい値 WHERE 条件;
実際に使ってみましょう。
-- viewが50以下の場合に5を足す UPDATE titles SET view = view + 5 WHERE view <= 50; SELECT * FROM titles;
実行結果は次のとおりです。
id author_id post_title view 1 1 MySQLとは 15 2 2 SQLとはなにか 55 3 1 DockerでMySQLを使う方法 100
条件に「viewが50以下」を指定したので1番目と2番目のレコードのviewは5を足したものに更新されていますが、3番目はviewが50を超えているので変わっていないのがわかります。
複数のカラムの値をまとめて更新
複数のカラムの値をまとめて更新するには次のようにカンマ区切りで記述します。
UPDATE テーブル名 SET 更新したいカラム1 = 新しい値, 更新したいカラム2 = 新しい値, WHERE 条件式;
実際に使ってみましょう。
-- viewが50以下の場合、viewに5を足し、post_titleを変更 UPDATE titles SET view = view + 5, post_title = CONCAT("第", id, "回", post_title) WHERE view <= 50; SELECT * FROM titles;
実行結果は次のとおりです。
id author_id post_title view 1 1 第1回MySQLとは 15 2 2 第2回SQLとはなにか 55 3 1 DockerでMySQLを使う方法 100
条件に合致する1番目と2番目のレコードのviewとpost_title両方のデータが更新されているのがわかります。