Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách xóa hàng thứ n (nth row) trong MySQL

MySQL không hỗ trợ DELETE ... LIMIT 1 OFFSET n trực tiếp (trước 8.0). Cách phổ biến: dùng subquery lấy ID của hàng thứ n, rồi DELETE theo ID.

Ví dụ minh họa

Tạo bảng:

CREATE TABLE DemoTable1 (
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName VARCHAR(100)
);

INSERT INTO DemoTable1 (StudentName) VALUES
('Larry'), ('Sam'), ('Mike'), ('Carol'), ('David'), ('Bob');

Dữ liệu (6 hàng):

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | Larry       |
| 2         | Sam         |
| 3         | Mike        |
| 4         | Carol       |
| 5         | David       |
| 6         | Bob         |
+-----------+-------------+

Xóa hàng thứ 2 (theo thứ tự StudentId):

DELETE FROM DemoTable1
WHERE StudentId = (
    SELECT StudentId FROM (
        SELECT StudentId FROM DemoTable1 ORDER BY StudentId LIMIT 1, 1
    ) AS tbl
);

Kết quả (hàng Sam bị xóa):

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | Larry       |
| 3         | Mike        |
| 4         | Carol       |
| 5         | David       |
| 6         | Bob         |
+-----------+-------------+

Giải thích:

  • Subquery trong FROM (SELECT ... LIMIT 1, 1) lấy hàng thứ 2 (offset 1, limit 1).
  • Bọc thêm một lớp subquery (AS tbl) vì MySQL không cho phép UPDATE/DELETE cùng bảng với subquery trực tiếp (trừ khi dùng derived table).
  • ORDER BY StudentId xác định thứ tự "hàng thứ n".

MySQL 8.0+: Hỗ trợ DELETE ... ORDER BY ... LIMIT n OFFSET m trực tiếp:

DELETE FROM DemoTable1 ORDER BY StudentId LIMIT 1 OFFSET 1;