Việc áp dụng đúng câu lệnh DELETE để xóa dữ liệu là rất quan trọng và nó liên quan đến rất nhiều vấn đề. Tuy nhiên, có các phương pháp tiêu chuẩn về cách sử dụng câu lệnh DELETE giúp đơn giản hóa tất cả các tác vụ như vậy.
Bài viết này sẽ khám phá một số tình huống trong cuộc sống nghề nghiệp để trang bị cho bạn những lời khuyên hữu ích nhất để sử dụng câu lệnh DELETE một cách chính xác. Bạn có thể xóa dữ liệu khỏi bảng theo nhiều cách khác nhau. Khám phá sự khác biệt giữa DELETE và TRUNCATE trong SQL Server đã được đề cập đến với các ví dụ thực tế.
T-SQL Xóa Lệnh Khái niệm cơ bản
Trước hết, chúng ta nên làm quen với câu lệnh T-SQL Delete theo cách đơn giản nhất có thể.
Câu lệnh Delete, như tên đã chỉ ra, là một câu lệnh giúp chúng ta xóa dữ liệu khỏi bảng cơ sở dữ liệu.
Một bảng là một cấu trúc mà bạn tạo trong cơ sở dữ liệu để lưu trữ dữ liệu của mình. Ví dụ:chúng ta có thể có một bảng sách để lưu trữ hồ sơ liên quan đến những cuốn sách đó.
Cơ sở dữ liệu là một tập hợp dữ liệu có tổ chức và cấu trúc dữ liệu để lưu giữ dữ liệu đó. Nói cách khác, dữ liệu có thể được lưu trữ bên trong cơ sở dữ liệu dưới dạng bảng.
Cách xóa một hàng hoặc nhiều hàng
Chúng tôi có thể xóa một hoặc nhiều bản ghi (thường được gọi là hàng) khỏi bảng bằng cách sử dụng câu lệnh xóa.
Câu lệnh Delete xóa một số hoặc tất cả dữ liệu (hàng) khỏi bảng.
Theo tài liệu của Microsoft, câu lệnh Delete xóa một hoặc nhiều hàng khỏi bảng hoặc dạng xem trong SQL Server.
Người ta có thể tự hỏi làm thế nào câu lệnh xác định xem có nên xóa một số hoặc tất cả dữ liệu (hàng) khỏi một bảng hay không. Câu trả lời nằm trong các tiêu chí hoặc điều kiện xác định những gì cần được loại bỏ.
Xóa lệnh trong SQL Server
Cú pháp đơn giản nhất của câu lệnh như sau:
Delete FROM <TableName> WHERE <Condition>
Bạn cần cung cấp tên bảng và tiêu chí / điều kiện để xóa dữ liệu (hàng) khỏi bảng.
Lưu ý:Điều quan trọng là sử dụng câu lệnh DELETE với một điều kiện (Mệnh đề WHERE) mặc dù yêu cầu điều kiện không phải là bắt buộc.
Nếu bạn thực hiện lệnh bảng DELETE mà không có điều kiện WHERE, bạn sẽ xóa tất cả các hàng (dữ liệu) khỏi bảng. Do đó, hãy tạo thói quen sử dụng điều kiện WHERE trừ khi bạn muốn xóa tất cả các hàng.
Khả năng tương thích
Câu lệnh này tương thích với nhiều phiên bản của SQL Server, bao gồm các phiên bản sau:
- SQL Server 2012 và các phiên bản trở lên.
- Cơ sở dữ liệu SQL Server dựa trên đám mây (Azure SQL Database).
- Kho dữ liệu SQL dựa trên đám mây (Azure Synapse Analytics).
Danh sách kiểm tra từng bước để xóa hàng khỏi bảng
Bây giờ chúng ta sẽ khám phá cách sử dụng câu lệnh Delete với một số tình huống thực tế.
Tóm tắt các bước
- Thiết lập Cơ sở dữ liệu Mẫu.
- Xem dữ liệu.
- Xóa dữ liệu.
- Chèn lại nhiều dữ liệu hơn vào bảng.
- Xem dữ liệu trước khi xóa.
- Cách xóa dữ liệu trong một cột dựa trên một điều kiện.
- Xem dữ liệu sau khi xóa.
- Chèn lại nhiều dữ liệu hơn vào bảng.
- Xem dữ liệu trước khi xóa.
- Xóa dữ liệu dựa trên một điều kiện khác.
- Xem dữ liệu sau khi xóa.
- Chèn lại dữ liệu vào bảng.
- Lần này hãy xóa dữ liệu dựa trên hai điều kiện.
- Xem dữ liệu sau khi xóa.
Thiết lập cơ sở dữ liệu mẫu (BooksSample)
Chúng tôi cần một cơ sở dữ liệu mẫu để kiểm tra và chạy các tập lệnh. Trước tiên, chúng ta cần thiết lập cơ sở dữ liệu mẫu đó, bao gồm các bước sau:
- Tạo cơ sở dữ liệu mẫu.
- Tạo một bảng trong cơ sở dữ liệu mẫu.
- Chèn dữ liệu (hai hàng) vào bảng cơ sở dữ liệu.
Mở SQL Server Management Studio hoặc dbForge Studio cho SQL Server và thực thi tập lệnh sau để thiết lập cơ sở dữ liệu mẫu:
-- Connect to the 'master' database to run this snippet
USE master
GO
-- Create a new database if it does not already exist
IF NOT EXISTS (
SELECT [name]
FROM sys.databases
WHERE [name] = N'BooksSample'
)
CREATE DATABASE BooksSample
GO
USE BooksSample
-- Create the table book
CREATE TABLE [dbo].[Book]
(
[BookNumber] INT NOT NULL PRIMARY KEY,-- Primary Key column
[Title] VARCHAR(150) NOT NULL,
[Stock] SMALLINT NOT NULL
);
GO
-- Insert rows into table 'Book'
INSERT INTO [dbo].[Book]
( -- Columns to insert data into
[BookNumber], [Title], [Stock]
)
VALUES
( -- First row: values for the columns in the list above
1, 'Learn SQL in 7 Days', 50
),
( -- Second row: values for the columns in the list above
2, 'Creating Databases in Minutes', 50
);
GO
Xem dữ liệu (Bảng sách)
Hãy để chúng tôi xem bảng được tạo và điền gần đây trong cơ sở dữ liệu. Chạy tập lệnh dưới đây:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Đầu ra là:
Chúng ta có thể thấy hai hàng của bảng (Sách). Hiện tại, đây là tất cả dữ liệu có trong bảng này.
Xóa dữ liệu
Như chúng ta nhớ, có nguy cơ xóa tất cả các hàng trong bảng nếu chúng ta quên đề cập đến điều kiện / tiêu chí để xóa đúng.
Luôn sử dụng Mệnh đề WHERE với câu lệnh Xóa để tránh mất dữ liệu ngẫu nhiên. Trường hợp ngoại lệ duy nhất sẽ xảy ra khi bạn cần xóa tất cả dữ liệu một cách có chủ ý.
Để xóa tất cả dữ liệu (hàng) khỏi bảng cơ sở dữ liệu mẫu, hãy chạy tập lệnh sau:
-- Delete all the data (rows) from the table Book
DELETE FROM dbo.Book
Đầu ra là:
Xem dữ liệu sau khi xóa
Bây giờ, chúng ta cần kiểm tra xem tất cả các hàng đã bị xóa chưa:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Kết quả là:
Bằng cách này, chúng tôi đã xóa thành công tất cả các hàng khỏi Sách bàn. Vì vậy, chúng tôi đã áp dụng câu lệnh DELETE mà không có bất kỳ tiêu chí / điều kiện xóa nào.
Chèn lại dữ liệu vào bảng (với cùng tiêu đề)
Chúng ta có thể chèn dữ liệu (hàng) trở lại bảng và sau đó áp dụng câu lệnh DELETE dựa trên một số điều kiện / tiêu chí.
Lần này, chúng tôi chọn chèn nhiều hàng hơn, nhưng cố tình có cùng tiêu đề:
-- Insert rows into table 'Book'
INSERT INTO [dbo].[Book]
( -- Columns to insert data into
[BookNumber], [Title], [Stock]
)
VALUES
( -- First row: values for the columns in the list above
1, 'Learn SQL in 7 Days', 50
),
( -- Second row: values for the columns in the list above
2, 'Creating Databases in Minutes', 50
),
( -- Third row: values for the columns in the list above
3, 'Creating Databases in Minutes', 50
),
( -- Fourth row: values for the columns in the list above
4, 'Creating Databases in Minutes', 50
);
GO
Kết quả như sau:
Lưu ý :Để khôi phục dữ liệu đã xóa hoặc thay đổi, bạn có thể sử dụng các giải pháp phần mềm chuyên dụng. Giải pháp Nhật ký giao dịch dbForge cho phép bạn vừa khôi phục những dữ liệu đó, vừa xem ai và khi nào đã xóa hoặc thay đổi chúng.
Xem dữ liệu trước khi xóa
Để xem dữ liệu, hãy thực thi tập lệnh sau:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Đầu ra là:
Kết quả đầu ra chứng tỏ rằng chúng tôi đã chèn nhầm ba hàng có cùng tên sách. Nó là một vấn đề. Giải pháp đơn giản là loại bỏ các hàng không cần thiết, áp dụng điều kiện cụ thể để loại bỏ các hàng có tiêu đề trùng lặp.
Cách xóa dữ liệu trong cột SQL dựa trên điều kiện (BookNumber)
Quan trọng:Chúng tôi có thể xem xét một trong những cách sau để giải quyết vấn đề này:
- Xóa theo BookNumber
- Xóa theo tiêu đề
Trong kịch bản của tôi, tôi chọn không xóa theo Tiêu đề. Nếu chúng tôi xóa theo Tiêu đề, chúng tôi sẽ xóa tất cả các hàng có chứa tiêu đề đó bao gồm cả những hàng mà chúng tôi cần giữ lại. Do đó, phương pháp được đề xuất là xóa bảng dựa trên BookNumber cột.
Nếu chúng ta nhìn vào tập hợp kết quả, chúng ta có thể dễ dàng hiểu rằng BookNumber:3 và BookNumber:4 là các hàng trùng lặp. Trước đây, nó đã được giải thích chi tiết làm thế nào để loại bỏ các bản sao trong SQL. Chúng ta phải xóa chúng để giữ cho cơ sở dữ liệu nhất quán.
Một lần nữa, các tùy chọn sau lại phát sinh:
- Xóa khi số sách (BookNumber) lớn hơn 2.
- Xóa nơi BookNumber là 3 và 4.
Hãy để chúng tôi chọn tùy chọn đầu tiên. Tuy nhiên, hãy nhớ rằng nó chỉ hợp lệ nếu không có hàng nào sau các hàng trùng lặp mà chúng tôi biết.
Thực thi tập lệnh sau:
-- Delete all the data (rows) from the table Book where BookNumber is greater than 2
DELETE FROM dbo.Book
WHERE BookNumber>2
Xem dữ liệu sau khi xóa
Hãy kiểm tra bảng sau khi xóa dữ liệu:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Đầu ra là:
Chèn thêm dữ liệu vào bảng (thêm hàng)
Để đưa thêm dữ liệu (hàng) liên quan đến cổ phiếu, chúng tôi sử dụng tập lệnh dưới đây:
-- Insert rows into table 'Book'
INSERT INTO [dbo].[Book]
( -- Columns to insert data into
[BookNumber], [Title], [Stock]
)
VALUES
( -- First row: values for the columns in the list above
3, 'Basic Data Structures', 60
),
( -- Second row: values for the columns in the list above
4, 'Advanced Data Structures', 0
)
GO
Xem dữ liệu trước khi xóa
Hãy xem bảng:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Đầu ra là:
Xóa dữ liệu dựa trên một điều kiện khác
Giả sử rằng chúng ta cần loại bỏ những cuốn sách tồn kho để giữ thông tin chính xác hơn trong cơ sở dữ liệu. Để làm điều này, chúng ta nên tìm những hàng có Cổ phiếu là 0.
Chúng ta có thể sử dụng câu lệnh DELETE với điều kiện dựa trên Còn hàng giá trị cột 0:
-- Delete all the out of stock (Where Stock is 0) books (rows) from the table Book
DELETE FROM dbo.Book
WHERE Stock=0
Xem dữ liệu sau khi xóa
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Chèn thêm dữ liệu vào bảng (nhiều tiêu đề và kho)
Chúng tôi đang thêm hai hàng nữa vào bảng:
-- Insert rows into table 'Book'
INSERT INTO [dbo].[Book]
( -- Columns to insert data into
[BookNumber], [Title], [Stock]
)
VALUES
( -- First row: values for the columns in the list above
4, 'Learn Azure SQL Database in 10 Days', 0
),
( -- Second row: values for the columns in the list above
5, 'Azure SQL Database Concepts', 1
)
GO
Xem dữ liệu trước khi xóa
Kiểm tra các hàng trước khi xóa thêm bất kỳ thứ gì, dựa trên yêu cầu:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Kết quả đầu ra của bảng là:
Xóa dữ liệu dựa trên hai điều kiện
Lần này, chúng tôi cần xóa tất cả sách (hàng) trong đó tiêu đề chứa từ SQL và họ đã hết hàng (giá trị cổ phiếu của họ là 0).
Nói cách khác, chúng tôi xóa tất cả các sách liên quan đến SQL trong kho.
Trong trường hợp này, chúng ta phải chỉ định nhiều hơn một điều kiện với câu lệnh DELETE. Chúng tôi phải đảm bảo rằng chúng tôi chỉ xóa những sách hết hàng và chỉ những sách có từ SQL trong tiêu đề của chúng.
Xem tập lệnh sau:
-- Delete all the out of stock (Where Stock is 0) SQL related (Title contains SQL) books (rows) from the table Book
DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0
Xem dữ liệu sau khi xóa
Chúng tôi xem dữ liệu lần cuối:
Mẹo quan trọng :Trước khi bạn xóa dữ liệu, hãy chạy câu lệnh SELECT dựa trên cùng một điều kiện mà bạn sẽ sử dụng để xóa. Bằng cách này, bạn đảm bảo rằng các hoạt động xóa của bạn sẽ áp dụng cho dữ liệu chính xác.
Ví dụ:trước tiên hãy chạy truy vấn CHỌN để đảm bảo rằng bạn chỉ nhận được những hàng được dùng để xóa:
SELECT * FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0
Khi bạn đã tự tin, bạn có thể biến SELECT của mình thành câu lệnh DELETE:
DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0
Xin chúc mừng!
Bạn đã thực hiện thành công tác vụ xóa (xóa) một hoặc nhiều hàng khỏi bảng theo yêu cầu.
Giữ liên lạc để biết các tình huống xóa nâng cao và các mẹo chuyên nghiệp khác liên quan đến việc sử dụng câu lệnh DELETE.
Việc cần làm
Bây giờ bạn có thể xóa các hàng khỏi bảng thành công, bạn có thể đào tạo và cải thiện kỹ năng của mình hơn nữa:
- Cố gắng loại bỏ các hàng chỉ có một mặt hàng trong kho.
- Xóa tất cả các sách có tên sách chứa từ Cấu trúc.
- Xóa tất cả các sách (hàng) ngoại trừ số sách (BookNumber) 1.
Khám phá các tình huống nâng cao hơn về câu lệnh SQL DELETE.