Lệnh DELETE trong SQL Server

Câu lệnh delete trong SQL Server được dùng như thế nào? Nếu chưa biết, mời bạn đọc hướng dẫn sử dụng delete trong SQL Server dưới đây.

Lập trình đang là một ngành được nhiều người theo đuổi bởi xu thế phát triển công nghệ tất yếu hiện nay. Công nghệ càng phát triển, cuộc sống con người càng có nhiều tiện nghi với những bước tiến vượt bậc, từ đơn giản hóa quy trình quản lý hành chính tới nâng cao sản xuất và nhiều hơn thế nữa.

Để lập trình tốt, bạn cần học những ngôn ngữ và những kiến thức cơ bản liên quan tới chúng. SQL Server là một trong số đó.

Tương tự như những ngôn ngữ lập trình khác, bạn cần nắm được các lệnh cơ bản của SQL Server và lệnh xóa là một trong số đó.

Quản lý dữ liệu có thể là một thử thách, nhất là khi có khối lượng lớn thông tin cần xử lý. Bất kỳ ai quản lý dữ liệu đều cần biết rằng đôi khi, bạn cần xóa một số dữ liệu từ database do những thay đổi ở thế giới thực. Ví dụ, khi một cửa hàng dừng bán mặt hàng nào đó, báo cáo ghi chép về chúng sẽ được chuyển sang cơ sở dữ liệu hàng tồn kho. Điều này được thực hiện với sự trợ giúp của lệnh SQL Delete. Lệnh delete SQL một phần quan trọng và không thể thiếu trong truy vấn ngôn ngữ này.

Lệnh DELETE SQL Server là gì?

Lệnh DELETE mang tới cho bạn cách xóa trong SQL Server vô cùng đơn giản và dễ dàng. Nhờ nó, bạn có thể xóa bản ghi từ bảng hiện tại. Để lọc bản ghi được xóa (hoặc xóa các bản ghi cụ thể), bạn cần dùng mệnh đề WHERE cùng với lệnh DELETE.

Nếu triển khai lệnh DELETE mà không có mệnh đề WHERE, nó sẽ xóa toàn bộ bản ghi khỏi bảng biểu.

Dùng lệnh DELETE có thể xóa một hoặc nhiều hàng của một bảng đơn lẻ hơn và các bản ghi trên nhiều bảng.

Ta sẽ sử dụng bảng có tên Quantrimang.com với dữ liệu như dưới đây để thực hiện các ví dụ trong bài viết.


+------------+----------+-------------+-------+
| IDChuyenmuc|  Muccon  |Chuyenmuclon | Sobai |
+------------+----------+-------------+-------+
|   1        |SQL Server|Lap trinh    | 101   |
|   2        |Facebook  |Mang xa hoi  | 152   |
|   3        |Python    |Lap trinh    | 101   |
|   4        |JavaScript|Lap trinh    | 122   |
|   5        |Chrome    |Web          |  94   |
|   6        |Instagram |Mang xa hoi  | 165   |
+------------+----------+-------------+-------+

1. Cú pháp lệnh DELETE trong SQL Server

Cú pháp đơn giản của lệnh DELETE như sau:

DELETE FROM bang
 [WHERE dieu_kien];

Cú pháp đầy đủ của lệnh DELETE như dưới đây:

DELETE [ TOP (giatri_dau) [PERCENT] ]
  FROM bang
  [WHERE dieu_kien];

Tên biến hoặc giá trị biến:

bang: Bảng cần xóa bản ghi.

WHERE dieu_kien: Tùy chọn. Điều kiện mà bản ghi phải đáp ứng để bị xóa.

TOP (giatri_dau): Tùy chọn. Nếu được nêu ra cụ thể sẽ chèn giá trị đầu của hàng dựa trên giatri_dau. Ví dụ TOP(10) sẽ chèn 10 hàng đầu tiên từ bộ kết quả.

PERCENT: Tùy chọn. Nếu được nêu ra cụ thể thì các hàng đầu tiên dựa trên số phần trăm giatri_dau của bộ kết quả. Ví dụ như TOP(10) PERCENT sẽ chèn 10% giá trị đầu trong bộ kết quả.

Lưu ý: 

* Hãy cẩn thận khi xóa các bản ghi trong bảng! Lưu ý mệnh đề WHERE trong câu lệnh DELETE. Mệnh đề WHERE chỉ định (các) bản ghi nào nên được xóa. Nếu bạn bỏ qua mệnh đề WHERE, tất cả các bản ghi trong bảng sẽ bị xóa!

* Không cần liệt kê các trường trong lệnh DELETE vì bạn sẽ xóa toàn bộ hàng trong bảng.

2. Ví dụ xóa hàng thỏa mãn 1 điều kiện

DELETE  FROM [Quantrimang.com]
  WHERE Muccon='Instagram';

Lệnh này sẽ xóa tất cả bản ghi trong bảng Quantrimang.comMucconInstagram.

Nếu muốn kiểm tra số hàng bị xóa, chạy lệnh SELECT trước khi thực hiện lệnh xóa.

SELECT count (*)
  FROM [Quantrimang.com]
  WHERE Muccon = 'Instagram';

Sau khi chạy lệnh xóa, bảng chỉ còn như sau:


+------------+----------+-------------+-------+
| IDChuyenmuc|  Muccon  |Chuyenmuclon | Sobai |
+------------+----------+-------------+-------+
|   1        |SQL Server|Lap trinh    | 101   |
|   2        |Facebook  |Mang xa hoi  | 152   |
|   3        |Python    |Lap trinh    | 101   |
|   4        |JavaScript|Lap trinh    | 122   |
|   5        |Chrome    |Web          |  94   |
+------------+----------+-------------+-------+

3. Ví dụ xóa hàng thỏa mãn 2 điều kiện

Giả sử ta sẽ xóa những hàng có Chuyenmuclon là Lap trinh, với Sobai lớn hơn 101. Để biết số hàng bị xóa, chạy lệnh SELECT dưới đây trước khi chạy lệnh DELETE. Kết quả sẽ trả về 1.

SELECT count (*)
  FROM [Quantrimang.com]
  WHERE Chuyenmuclon = 'Lap trinh'
  AND Sobai > 101;

Để xóa những bản ghi thỏa mãn điều kiện đã đưa ra bên trên, ta sẽ chạy lệnh sau:

DELETE FROM [Quantrimang.com]
  WHERE Chuyenmuclon = 'Lap trinh'
  AND Sobai > 101;

Lệnh trên đã xóa tất cả bản ghi trong bảng Quantrimang.com có Chuyenmuclon là Lap trinh và Sobai lớn hơn 101. Kết quả sau khi xóa ta sẽ còn bảng sau:


+------------+----------+-------------+-------+
| IDChuyenmuc|  Muccon  |Chuyenmuclon | Sobai |
+------------+----------+-------------+-------+
|   1        |SQL Server|Lap trinh    | 101   |
|   2        |Facebook  |Mang xa hoi  | 152   |
|   3        |Python    |Lap trinh    | 101   |
|   5        |Chrome    |Web          |  94   |
+------------+----------+-------------+-------+

4. Ví dụ xóa hàng dùng từ khóa TOP

Vì bảng đã bị xóa khá nhiều dòng rồi, mình sẽ thêm lại dữ liệu bằng lệnh INSERT để bảng trở về như bảng ban đầu rồi thực hiện tiếp lệnh xóa nhé.

Với từ khóa TOP(x), x là số bản ghi cần xóa, ta sẽ chỉ xóa x bản ghi đầu tiên trong số những bản ghi thỏa mãn điều kiện.

Giả sử, ta cần xóa 2 hàng đầu tiên trong số các hàng có Chuyenmuclon là Lap trinh, khi đó ta dùng lệnh sau:

DELETE TOP(2)
  FROM [Quantrimang.com]
  WHERE Chuyenmuclon = 'Lap trinh';

Bảng có tất cả 3 bản ghi có Chuyenmuclon là Laptrinh, nhưng lệnh trên chỉ xóa 2 bản ghi đầu tiên thỏa mãn điều kiện, hàng thứ 3 sẽ không bị ảnh hưởng bởi lệnh DELETE này. Đây là bảng kết quả sau khi chạy lệnh:


+------------+----------+-------------+-------+
| IDChuyenmuc|  Muccon  |Chuyenmuclon | Sobai |
+------------+----------+-------------+-------+
|   2        |Facebook  |Mang xa hoi  | 152   |
|   4        |JavaScript|Lap trinh    | 122   |
|   5        |Chrome    |Web          |  94   |
|   6        |Instagram |Mang xa hoi  | 165   |
+------------+----------+-------------+-------+

5. Ví dụ xóa hàng dùng mệnh đề EXISTS

Giả sử ta có thêm một bảng Muc nữa như sau:


+----+-----------+-----------+
| ID |  Tenmuc   | Trangthai |
+----+-----------+-----------+
| 1  |Lap trinh  |  Hien     |
| 2  |Mang xa hoi|  An       |
| 3  |Web        |  An       |
+----+-----------+-----------+

Bạn có thể thực hiện lệnh xóa phức tạp hơn, như xóa bản ghi trong 1 bảng dựa trên giá trị trong 1 bảng khác chẳng hạn. Vì không thể đưa ra nhiều hơn 1 bảng trong mệnh đề FROM trong lệnh DELETE nên có thể dùng mệnh đề EXISTS như dưới đây.

DELETE FROM [Quantrimang.com]
WHERE EXISTS
  (SELECT *
  FROM Muc
  WHERE Muc.ID = [Quantrimang.com].IDChuyenmuc
  AND Muc.ID < 3);

Lưu ý: Lệnh chạy trên bảng kết quả sau khi thực hiện lệnh xóa ở mục 4, không phải bảng ban đầu.


+------------+----------+-------------+-------+
| IDChuyenmuc|  Muccon  |Chuyenmuclon | Sobai |
+------------+----------+-------------+-------+
|   4        |JavaScript|Lap trinh    | 122   |
|   5        |Chrome    |Web          |  94   |
|   6        |Instagram |Mang xa hoi  | 165   |
+------------+----------+-------------+-------+

Lệnh DELETE này sẽ xóa tất cả bản ghi trong bảng Quantrimang.com khi có bản ghi trong bảng Muc ID nhỏ hơn 3 và ID khớp với IDChuyenmuc.

Nếu muốn xác định số dòng bị xóa, chạy lệnh SELECT trước khi xóa.

SELECT count (*)
FROM [Quantrimang.com]
WHERE EXISTS
  (SELECT *
  FROM Muc
  WHERE Muc.ID = [Quantrimang.com].IDChuyenmuc
  AND Muc.ID < 3);

Những điều cần lưu ý khi dùng Delete trong SQL Server

  • Bạn nên sao lưu trước khi xóa dữ liệu.
  • Mặc định, SQL Server dùng các giao dịch ngầm và ghi chép các bản ghi mà không cần hỏi người dùng. Do đó, bạn nên bắt đầu một giao dịch rõ ràng bằng cách dùng Begin Transaction. Nó cho bạn quyền kiểm soát việc ghi chép hoặc khôi phục giao dịch. Bạn cũng nên chạy sao lưu nhật ký giao dịch thường xuyên nếu database ở chế độ khôi phục hoàn toàn.
  • Bạn nên xóa dữ liệu theo từng phần nhỏ để tránh sử dụng quá nhiều nhật ký giao dịch. Hành động này cũng tránh chặn các giao dịch SQL khác.
  • Bạn nên hạn chế quyền truy cập để người dùng không thể xóa dữ liệu. Chỉ người có thẩm quyền mới có thể làm việc đó.
  • Bạn muốn chạy lệnh xóa với mệnh đề where. Nó loại bỏ dữ liệu được lọc từ bảng SQL. Nếu ứng dụng cần xóa dữ liệu thường xuyên, đây là ý tưởng hay để reset các giá trị nhận dạng định kỳ. Nếu không, bạn có thể gặp lỗi rắc rối, khó xử lý.
  • ...

Bài trước: Lệnh UPDATE trong SQL Server

Bài sau: Lệnh TRUNCATE TABLE trong SQL Server

Thứ Hai, 11/09/2023 17:13
4,48 👨 180.076
0 Bình luận
Sắp xếp theo
    ❖ SQL Server