17.【MySQL】レコードの削除【DELETE文】

テーブル内のレコードを削除するには次のようにDELETE文を使います。

DELETE FROM テーブル名;

ただしこれだとテーブル内の全てのレコードを削除してしまいます。

一般的に全てのレコードを削除することは考えづらいので、通常の運用では次のようにWHERE句で特定の条件に合致するレコードのみを削除します。

DELETE FROM テーブル名 WHERE 条件式;

実際にレコードを削除してみましょう。

-- 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とは', 80),
  (2, 'SQLとはなにか', 50),
  (1, 'DockerでMySQLを使う方法', 10);

-- viewが50に満たないレコードを削除
DELETE FROM titles WHERE view < 50;

SELECT * FROM titles;

実行結果は次のとおりです。

1       1       MySQLとは       80
2       2       SQLとはなにか   50

viewが50に満たない3番目のレコードだけが削除されているのがわかります。

ちなみにこの後レコードを追加した場合、AUTO_INCREMENTで自動連番としているidは、一度使われている3を飛ばして4から始まります。

-- viewが50に満たないレコードを削除
DELETE FROM titles WHERE view < 50;

-- その後レコードを追加
INSERT INTO titles (author_id, post_title, view) VALUES (3, 'MySQLサーバーへの接続と切断', 30);

SELECT * FROM titles;
id      author_id       post_title      view
1       1       MySQLとは       80
2       2       SQLとはなにか   50
4       3       MySQLサーバーへの接続と切断     30

自動連番をリセットして振り直すにはテーブルごと削除して再作成する必要があるため注意しましょう。

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

コメントを残す

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