MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでIDが最大のレコードを削除する方法(ORDER BY DESC + LIMIT 1)

MySQLで「IDが最も大きいレコード」を削除したい場合は、ORDER BY 〜 DESCLIMIT 1を組み合わせたDELETE文を使用します。削除対象は1件だけなので、この方法がシンプルかつ効率的です。

テーブルの作成

まず、サンプル用のテーブルを作成します。

mysql> create table DemoTable
(
    UserId int,
    UserName varchar(20)
);
Query OK, 0 rows affected (0.57 sec)

レコードの挿入

INSERTコマンドを使ってテーブルにレコードを挿入します。

mysql> insert into DemoTable values(100,'John');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(234,'Mike');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable values(145,'Sam');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values(278,'Carol');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values(289,'David');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(277,'Bob');
Query OK, 1 row affected (0.14 sec)

レコードの確認

SELECTコマンドでテーブル内の全レコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、次のような結果が出力されます。

+--------+----------+
| UserId | UserName |
+--------+----------+
| 100    | John     |
| 234    | Mike     |
| 145    | Sam      |
| 278    | Carol    |
| 289    | David    |
| 277    | Bob      |
+--------+----------+
6 rows in set (0.00 sec)

IDが最大のレコードを削除するクエリ

以下が、最大のIDを持つレコードを削除するクエリです。ORDER BY UserId DESCでユーザーIDの降順に並べ替え、LIMIT 1によって先頭の1行(=最大IDのレコード)のみを削除対象としています。

mysql> delete from DemoTable order by UserId DESC limit 1;
Query OK, 1 row affected (0.15 sec)

削除結果の確認

最大のID(ここでは289)が正しく削除されたかどうかを確認するため、再度全レコードを表示します。

mysql> select *from DemoTable;

実行すると、次のようにID「289」のレコードが削除されていることがわかります。

+--------+----------+
| UserId | UserName |
+--------+----------+
| 100    | John     |
| 234    | Mike     |
| 145    | Sam      |
| 278    | Carol    |
| 277    | Bob      |
+--------+----------+
5 rows in set (0.00 sec)

まとめ

最大のIDを持つレコードを削除するには、サブクエリを使わずともDELETE FROM テーブル名 ORDER BY 対象カラム DESC LIMIT 1;という形式で実現できます。降順ソートの先頭1件だけを削除するため、シンプルでパフォーマンスにも優れた方法です。なお、MySQLではDELETE文でのORDER BYとLIMITの併用が可能ですが、他のデータベース製品では構文が異なる場合がある点に注意してください。

  1. MySQLストアドプロシージャでDELETEクエリを実装する方法

    MySQLストアドプロシージャでDELETEクエリを実装する方法MySQLのストアドプロシージャを利用すれば、削除処理をひとつにまとめて再利用しやすくなり、パラメータを通じて動的に値を渡すことも可能です。ここでは、実際にサンプルテーブルを作成し、ストアドプロシージャ内でDELETEクエリを実行するまでの手順を解説します。1. サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1464   -> (   -> Id int,   -> Fi

  2. MySQLクエリで配列の要素をすべて一致させる方法

    MySQLでは、WHERE IN句とGROUP BY、HAVING句を組み合わせることで、指定した配列(複数の値)のすべての要素に一致するレコードを持つIDを抽出できます。この記事では、具体的なサンプルを使ってその手順を解説します。 1. サンプルテーブルを作成する まず、以下のコマンドでテーブル「DemoTable1523」を作成します。 mysql> create table DemoTable1523 -> ( -> Id int, -> Value int -> ); Query OK, 0 rows affected (