MySQL DELETE Query: Cách xóa một hàng khỏi bảng
⚡ Tóm tắt thông minh
MySQL Lệnh DELETE xóa các hàng không còn cần thiết khỏi bảng và trả về số lượng hàng bị ảnh hưởng. Tài liệu này giải thích cú pháp DELETE, lọc WHERE, xóa nhiều hàng với IN, và các lựa chọn thay thế an toàn hơn như TRUNCATE và DROP.

Truy vấn XÓA là gì?
MySQL DELETE Câu lệnh DELETE được sử dụng để xóa các hàng không còn cần thiết khỏi bảng cơ sở dữ liệu. Nó xóa toàn bộ hàng khỏi bảng và trả về số lượng hàng đã bị xóa. Câu lệnh DELETE rất hữu ích khi bạn cần xóa dữ liệu tạm thời hoặc lỗi thời khỏi cơ sở dữ liệu của mình.
Truy vấn DELETE trong MySQL Có thể xóa nhiều hơn một hàng khỏi bảng trong một lần thực thi. Điều này tỏ ra có lợi khi bạn cần xóa một lượng lớn hàng khỏi bảng cơ sở dữ liệu.
Một khi hàng dữ liệu đã bị xóa, nó không thể được khôi phục. Luôn luôn sao lưu cơ sở dữ liệu trước khi xóa dữ liệu, để có thể khôi phục và xem lại cơ sở dữ liệu sau này nếu cần.
Cách xóa một hàng trong MySQL
Sau khi mục đích của câu lệnh đã rõ ràng, bước tiếp theo là cú pháp. Để xóa một hàng trong MySQL, câu lệnh DELETE FROM được sử dụng:
DELETE FROM `table_name` [WHERE condition];
ĐÂY:
- XÓA KHỎI `table_name` nói với MySQL Máy chủ sẽ xóa các hàng khỏi bảng có tên tương ứng.
- [Điều kiện WHERE] Tham số này là tùy chọn và được sử dụng để áp dụng bộ lọc nhằm hạn chế số lượng hàng bị ảnh hưởng bởi truy vấn DELETE.
Nếu Mệnh đề WHERE không được sử dụng trong MySQL Xóa truy vấn, sau đó tất cả các Các hàng trong bảng đã cho sẽ bị xóa.
⚠️ Cảnh báo: Trước tiên, hãy chạy bộ lọc dưới dạng câu lệnh SELECT. Nếu nó trả về chính xác các hàng bạn muốn xóa, thì câu lệnh DELETE tương ứng sẽ an toàn. Cú pháp đầy đủ được ghi lại trong tài liệu. MySQL Hướng dẫn sử dụng câu lệnh DELETE.
Ví dụ về MySQL Xóa truy vấn
Phần tiếp theo sẽ xây dựng một tập dữ liệu nhỏ và sau đó xóa bớt dữ liệu khỏi tập dữ liệu đó.
Bước 1: Chèn dữ liệu mẫu
Trước khi đi sâu hơn vào thảo luận về câu lệnh SQL DELETE, chúng ta hãy chèn một số dữ liệu mẫu vào bảng movies để làm việc.
INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('The Great Dictator', 'Charlie Chaplin', 1940, 7); INSERT INTO `movies` (`title`, `director`, `category_id`) VALUES ('sample movie', 'Anonymous', 8); INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('movie 3', 'John Brown', 1920, 8);
Việc thực thi đoạn mã trên sẽ thêm ba (3) bộ phim vào bảng phim. Trước khi tiếp tục, hãy liệt kê tất cả các bộ phim trong bảng của chúng ta.
SELECT * FROM `movies`;
Thực thi đoạn mã trên cho ta kết quả như sau. Ba hàng mới được chèn vào được tô sáng.
| id phim | tiêu đề | Giám đốc | năm_phát hành | Thể loại ID |
|---|---|---|---|---|
| 1 | Cướp biển vùng Caribe 4 | Rob Marshall | 2011 | 1 |
| 2 | Quên Sarah Marshal | Xe đẩy Nicholas | 2008 | 2 |
| 3 | X-Men | NULL | 2008 | NULL |
| 4 | Code Tên Black | Edgar Jimz | 2010 | NULL |
| 5 | Những cô gái nhỏ của bố | NULL | 2007 | 8 |
| 6 | Thiên thần và ác quỷ | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
| 16 | 67% Có Tội | NULL | 2012 | NULL |
| 18 | The Great Dictator | Charlie Chaplin | 1940 | 7 |
| 19 | phim mẫu | Nặc Danh | NULL | 8 |
| 20 | phim 3 | John Brown | 1920 | 8 |
Bước 2: Xóa một hàng
Giả sử thư viện video Myflix không còn muốn cho thuê phim “The Great Dictator” nữa và muốn xóa phim này khỏi cơ sở dữ liệu. Mã số phim là 18, vì vậy đoạn mã bên dưới sẽ xóa hàng đó.
DELETE FROM `movies` WHERE `movie_id` = 18;
Thực thi đoạn script trên trong MySQL bàn làm việc Thao tác này xóa bộ phim có ID 18 khỏi bảng trong cơ sở dữ liệu Myflix.
Bây giờ chúng ta hãy kiểm tra trạng thái hiện tại của bảng phim.
SELECT * FROM `movies`;
| id phim | tiêu đề | Giám đốc | năm_phát hành | Thể loại ID |
|---|---|---|---|---|
| 1 | Cướp biển vùng Caribe 4 | Rob Marshall | 2011 | 1 |
| 2 | Quên Sarah Marshal | Xe đẩy Nicholas | 2008 | 2 |
| 3 | X-Men | NULL | 2008 | NULL |
| 4 | Code Tên Black | Edgar Jimz | 2010 | NULL |
| 5 | Những cô gái nhỏ của bố | NULL | 2007 | 8 |
| 6 | Thiên thần và ác quỷ | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
| 16 | 67% Có Tội | NULL | 2012 | NULL |
| 19 | phim mẫu | Nặc Danh | NULL | 8 |
| 20 | phim 3 | John Brown | 1920 | 8 |
LƯU Ý:
- Bộ phim có ID 18 không còn được trả về trong tập kết quả truy vấn nữa.
- Bạn không thể xóa một cột riêng lẻ khỏi bảng bằng lệnh DELETE. Lệnh này xóa toàn bộ một hàng. Để xóa dữ liệu trong một trường, hãy sử dụng lệnh khác. CẬP NHẬT truy vấn Thao tác này đặt cột thành NULL.
Bước 3: Xóa nhiều hàng bằng IN
Giả sử chúng ta có một danh sách phim muốn xóa. Thay vì chạy một câu lệnh cho mỗi hàng, chúng ta có thể kết hợp mệnh đề WHERE với toán tử IN.
DELETE FROM `movies` WHERE `movie_id` IN (20,21);
Việc thực thi đoạn mã trên sẽ xóa các bộ phim có ID 20 và 21 khỏi bảng phim của chúng ta trong một lần chạy.
DELETE so với TRUNCATE so với DROP trong MySQL
Xóa không phải là cách duy nhất để loại bỏ dữ liệu khỏi MySQLNgười mới bắt đầu thường hay dùng lệnh này ngay cả khi một lệnh nhanh hơn sẽ phù hợp hơn, vì vậy bảng dưới đây so sánh ba lệnh xóa.
| Tính năng | DELETE | CẮT CẮT | Thả |
|---|---|---|---|
| Loại lệnh | DML | DDL | DDL |
| Mệnh đề WHERE | Hỗ trợ | Không được hỗ trợ | Không được hỗ trợ |
| Những gì bị loại bỏ | Các hàng đã chọn | Tất cả các hàng | Cấu trúc hàng và bảng |
| Rollback | Có thể xảy ra bên trong một giao dịch | Không thể (cam kết ngầm) | Không thể (cam kết ngầm) |
| TỰ ĐỘNG | Bộ đếm được giữ lại | Bộ đếm được đặt lại về giá trị ban đầu. | Quầy được tháo dỡ cùng với bàn. |
| Tốc độ trên các bàn lớn | Chậm (từng hàng một) | Rất nhanh | Rất nhanh |
Hãy sử dụng lệnh DELETE khi bạn cần bộ lọc hoặc khả năng hoàn tác. BẢNG TRUNCATE Khi bạn muốn nhanh chóng xóa trắng một bảng và đặt lại bộ đếm AUTO_INCREMENT của nó. Chỉ sử dụng DROP khi chính bảng đó không còn cần thiết nữa, vì nó xóa cả định nghĩa cùng với dữ liệu.
