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.

  • 🗑️ Tuyên bố cốt lõi: Lệnh DELETE FROM `table_name` [WHERE condition] xóa toàn bộ các hàng và trả về số lượng hàng đã bị xóa.
  • ⚠️ Đã lược bỏ ở đâu: Nếu bỏ qua mệnh đề WHERE, tất cả các hàng trong bảng sẽ bị xóa, vì vậy hãy luôn lọc trước khi thực thi.
  • 🎯 TargetXóa bỏ ed: WHERE `movie_id` = 18 xóa một bản ghi, trong khi WHERE `movie_id` IN (20,21) xóa nhiều bản ghi trong một câu lệnh duy nhất.
  • 🔁 Tác động không thể đảo ngược: Dữ liệu đã xóa không thể khôi phục nếu không có bản sao lưu, do đó hãy sao lưu cơ sở dữ liệu trước khi chạy lệnh DELETE.
  • 📊 Phạm vi cấp hàng: Lệnh DELETE chỉ xóa toàn bộ hàng; việc xóa giá trị của một cột riêng lẻ yêu cầu sử dụng lệnh UPDATE với giá trị NULL.
  • ⚖️ Xóa, cắt bớt và loại bỏ: Lệnh DELETE lọc các hàng, TRUNCATE xóa trắng bảng ngay lập tức, và DROP xóa toàn bộ cấu trúc bảng.

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.

Câu Hỏi Thường Gặp

Chỉ có thể thực hiện bên trong một giao dịch đang mở. Chạy lệnh START TRANSACTION, thực hiện lệnh DELETE, sau đó chạy lệnh ROLLBACK để hoàn tác. Sau khi thực hiện lệnh COMMIT hoặc khi bật chế độ tự động commit, các hàng sẽ bị xóa và chỉ có bản sao lưu mới có thể khôi phục chúng.

Sử dụng lệnh DELETE trên nhiều bảng với... THAM GIAĐặt tên cho cả hai bảng trước từ khóa FROM. Hoặc, định nghĩa khóa ngoại với ON DELETE CASCADE để các hàng con được tự động xóa khi hàng cha bị xóa.

Chế độ cập nhật an toàn được bật theo mặc định trong MySQL WorkbenchNó từ chối bất kỳ lệnh DELETE nào có mệnh đề WHERE không sử dụng cột khóa, ngăn ngừa việc xóa toàn bộ bảng một cách vô ý. Vô hiệu hóa chức năng này trong Edit > Preferences > SQL Editor.

Đúng vậy. Trợ lý AI có thể dịch yêu cầu bằng tiếng Anh thông thường thành cú pháp DELETE và giải thích mệnh đề WHERE. Luôn luôn kiểm tra bộ lọc được tạo ra so với câu lệnh SELECT trước, vì mô hình AI không thể thấy dữ liệu thực tế của bạn.

Không. Hãy để AI soạn thảo câu lệnh, nhưng hãy tự mình thực thi nó trên bản sao lưu hoặc bản sao thử nghiệm trước. Việc thiếu mệnh đề WHERE sẽ xóa mọi hàng và không có công cụ AI nào có thể đảo ngược điều đó một khi giao dịch đã được cam kết.

Tóm tắt bài viết này với: