16.【MySQL】レコードの更新【UPDATE文】

これまでデータベースに保存したデータを元に計算したり加工したものを抽出してきましたが、この方法では元のデータは変更されません。この記事では保存したデータそのものを更新する方法について解説します。

元データの更新

データベースに保存したデータ自体を更新したい場合は次のように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両方のデータが更新されているのがわかります。

このエントリーをはてなブックマークに追加

コメントを残す

頂いたコメントは一読した後表示させて頂いております。
反映まで数日かかる場合もございますがご了承下さい。