TRUNCATE TABLE được hiểu là một lệnh nhằm xóa tất cả dữ liệu trong 1 bảng của SQL Server. Ngoài ra bạn cũng có thể sử dụng DROP TABLE để xóa toàn bộ bảng nhưng tôi khuyên bạn nên hạn chế sử dụng lệnh này nếu chưa hiểu rõ.
1. Cú pháp lệnh TRUNCATE TABLE
Cú pháp cơ bản của lệnh TRUNCATE TABLE:
1 TRUNCATE TABLE table_name;
Khi đó table_name là tên của bạn muốn xóa dữ liệu.
Ngoài ra bạn cũng có thể áp dụng lệnh ở cú pháp nâng cao hơn như sau:
TRUNCATE TABLE [ten_CSDL.] [ten_schema.] ten_bang
[ WITH (PARTITIONS (so_phanvung
| so _phanvung TO so _phanvung ) ] ;
Ở phần 2 tôi sẽ phân tích kỹ hơn các giá trị cũng như là tên biến của cú pháp nâng cao này hơn.
2. Tên biến hoặc giá trị biến
ten_CSDL
Tùy bạn chọn như thế nào. Đây là tên của CSDL được bạn đặt
Ten_schema
Tương tự như ten_CSDL đây là tên của SCHEMA. Tôi cũng đã viết một bài viết chi tiết về SCHEMA trong SQL Server bạn có thể tìm và tham khảo qua (Internal link nè)
ten_bang
Đây là tên bảng mà bạn sẽ chọn để xóa các dữ liệu
WITH (PARTITIONS (so_phanvung | so_phanvung TO so_phanvung)
Cũng tương tự như 2 biến trên. Bạn có thể dùng với bảng phân vùng và sử dụng thêm so_phanvung để xác định số vùng mà mình muốn xóa trong bảng đó.
Nếu muốn xóa nhiều vùng, hãy dùng dấu (,) để tách các giá trị khoảng giá trị.Tuy nhiên lệnh sẽ lỗi khi bạn sử dụng đối với những bảng không được phân vùng. Tùy các phiên bản SQL khác nhau sẽ có hoặc không có tình năng này.
Lưu ý:
- Không xóa được toàn bộ dữ liệu trong bảng được tham chiếu bằng Foreign Key.
- Trước khi xóa toàn bộ dữ liệu,bạn phải có quyền ưu tiên như ALTER TABLE
- Bộ đếm ở toàn bộ cột tự tăng giá trị sẽ quay lại từ đầu nếu bạn xóa toàn bộ dữ liệu trong bảng.
Ví Dụ:
Ví dụ 1
Trong SQL Server nếu như bạn không muốn lấy lại các dữ liệu thì xóa toàn bộ bảng là cách nhanh nhất. Sẽ có 2 lệnh xóa là DELETE và TRUNCATE, khác ở chỗ là với DELETE bạn có thể hoàn tác còn TRUNCATE sẽ “một đi không trở lại”.
Với TRUNCATE cũng đơn giản hơn khi xóa bằng lệnh DROP hay tạo bằng CREATE.
Ví dụ tôi muốn xóa bảng “hangtonkho” tôi có thể làm như sau
DELETE FROM hangtonkho;
Hoặc
TRUNCATE TABLE hangtonkho;
Ngoài ra cũng có thể xóa dữ liệu có điều kiện như sau
TRUNCATE TABLE totn.hangtonkho;
Với lệnh này tôi sẽ xóa các dữ liệu có tên totn trong bảng hangtonkho
Ví dụ 2 phân vùng
Áp dụng cú pháp cho bảng có phân vùng, ta sử dụng thêm mệnh đề WITH PARTITIONS cùng lệnh TRUNCATE TABLE
TRUNCATE TABLE hangtonkho
WITH (PARTITIONS (1 TO 5, 7) );
Ở hàm này tôi sẽ xóa các dữ liệu từ vùng 1-5 và vùng 7 trong bảng hangtonkho
3. Câu hỏi thường gặp
Nếu sử dụng lệnh TRUNCATE TABLE tôi có thể hoàn tác để lấy lại dữ liệu hay không?
Có nhưng khá phức tạp với cách chuyển tiếp để rollback. Ví dụ:
CREATE TABLE bang_nhap (cot1 int);
INSERT INTO bang_nhap VALUES (1);
INSERT INTO bang_nhap VALUES (2);
INSERT INTO bang_nhap VALUES (3);
— Tạo chuyển tiếp
BEGIN TRAN;
— Xóa bản ghi trong bảng
TRUNCATE TABLE dbo.bảng_nháp;
— Rollback bảng đã xóa bản ghi
ROLLBACK;
SELECT * FROM bang_nhap;
Lệnh SELECT nói trên sẽ trả về kết quả sau
cot1
———-
1
2
3
Như vậy là bạn đã có thể hoàn tác và 3 dữ liệu sẽ trở về bang_nhap.
Kiến thức nền về TRUNCATE TABLE trong SQL Server đã xong. Cùng đón đọc các bài viết tiếp theo của tôi để có thể làm việc với SQL một cách đơn giản hơn nhé.