Thứ Năm, 11 tháng 12, 2014

Cách phân biệt Truncate và Delete trong Microsoft SQL Server

microsoftsqlserver--01
Hôm nay, VDO sẽ giúp các bạn cách phân biệt sự khác nhau giữa 2 cú pháp DELETE và TRUNCATE TABLE trong phần mềm Microsoft SQL Server
 Xét về mặt mục đích thì cả 2 câu lệnh này đều giúp các bạn loại trừ bỏ dữ liệu, nhưng về bản chất thì lại không giống như vậy.
Câu lệnh DELETE:
Cú pháp chung:
[ WITH <common_table_expression> [ ,...n ] ]
DELETE
    [ TOP ( expression ) [ PERCENT ] ]
    [ FROM ]
       { table_name [ WITH ( <table_hint_limited> [ ...n ] ) ]
       | view_name
       | rowset_function_limited
       | table_valued_function
    }
    [ <OUTPUT Clause> ]
    [ FROM <table_source> [ ,...n ] ]
    [ WHERE { <search_condition>
          | { [ CURRENT OF
             { { [ GLOBAL ] cursor_name }
                | cursor_variable_name
             }
          ]
       }
    }
]
    [ OPTION ( <Query Hint> [ ,...n ] ) ]
[; ]
<object> ::=
{
    [ server_name.database_name.schema_name.
       | database_name. [ schema_name ] .
       | schema_name.
    ]
       table_or_view_name
}
Lệnh này sẽ giúp chúng ta xóa bỏ các bản ghi – Record khỏi cơ sở dữ liệu theo hàng – Row. Khi 1 bản ghi như vậy được xóa bằng lệnh “DELETE”, toàn bộ dữ liệu bên trong đều được lưu lại trong phần Transaction Log, trong khi đó các phần ràng buộc được kiểm soát, và mọi thành phần nào thừa sẽ bị xóa bỏ hoàn toàn. Hơn nữa, những bản ghi, hay dữ liệu mà vô tình bị xóa bằng câu lệnh DELETE này thì vẫn có thể được khôi phục được. Bình thường, câu lệnh DELETE thường được sử dụng để xóa dữ liệu bản ghi ra khỏi bảng nhiều hơn khi áp dụng trong một phần dữ liệu nào đó. Thêm vào đó, câu lệnh này thường được sử dụng đối với những bảng dữ liệu đơn, hoặc trong trường hợp muốn xóa bỏ dữ liệu ra khỏi một bảng nào đó khi cần kết hợp với nhiều bảng có các mỗi liên hệ khác nữa. Mặt khác, việc phân quyền chức năng DELETE trên bảng chỉ được áp dụng trên những tài khoản khách hàng khác nhau mà không cần phải gán câu lệnh ownership trên tài khoản  người dung đấy. Và câu lệnh DELETE không thay đổi việc tự động tăng hoặc giảm số lượng cột – Column trong bảng chứa dữ liệu đó.
Câu lệnh TRUNCATE:
Cú pháp chung:
TRUNCATE TABLE
    [ { database_name .[ schema_name ] . | schema_name . } ]
    table_name
[ ; ]
Lệnh TRUNCATE này sẽ thực hiện việc phân bổ lại trang chứa dữ liệu trong bảng, và toàn bộ phần dữ liệu đó sẽ bị xóa bỏ hoàn toàn sau khi thực hiện. Nếu xét về khía cạnh tốc độ thì TRUNCATE nhanh hơn DELETE khá nhiều dựa vào lượng thông tin được lưu lại trong phần Transaction Log, và cũng vì vậy nếu những bản ghi nào đó vô tình bị xóa bỏ thì sẽ không thể phục hồi lại được. Nếu xét về mặt bản chất, Câu lệnh “TRUNCATE” là toán tử “Data Definition Language – DDL”, cũng có nghĩa rằng chúng ta cần tối thiểu ALTER TABLE hoặc phân quyền cao hơn để thực hiện. Nhưng mức phân quyền trên TRUNCATE TABLE lại chưa bao giờ tồn tại. Giả sử một bảng dữ liệu sau khi tiến hành dùng TRUNCATE có tính năng tăng số lượng cột thì sẽ tự động được sắp xếp lại theo phần mặc định ban đầu. Ngoài ra, còn có một số điều chưa tối ưu với cú pháp câu lệnh TRUNCATE, và không thể được áp dụng trên những bảng cụ thể như tình huống dưới đây:
 - Trong khi bảng số liệu được tham chiếu bởi Index View.
 - Các khóa liên minh ngoài được rút gọn.
 - Bảng dữ liệu đấy được dùng để copy.
 - Cuối cùng, Bảng thuộc về cơ sở dữ liệu đang được lưu trữ.
Khi nào cần sử dụng:
Phải căn cứ vào từng tình huống cụ thể mà các bạn hãy sử dụng lệnh DELETE hoặc TRUNCATE sao cho phù hợp. Trong khi đó, cú pháp DELETE được sử dụng khá rộng rãi và phổ biến vì cho phép người dùng xác định rõ ràng bản ghi nào cần xóa, được kết hợp cùng với lệnh JOINS và một vài tham số khác. Khả năng ngăn chặn có thể xảy ra khi chúng ta dùng DELETE để xóa bỏ một lượng cấu trúc dữ liệu tương đối lớn, vì vậy người dùng cần tuyệt đối cẩn thận khi thao tác. Còn lại, lệnh TRUNCATE sẽ giúp người quản trị xóa toàn bộ 1 bảng dữ liệu nào đó một cách đơn giản và nhanh chóng.
Chúc các bạn thành công!
Thông tin
VDO là nhà cung cấp dịch vụ máy chủ lớn nhất tại Việt Nam, VDO đang quản lý một hệ thống bao gồm nhiều máy chủ hosting cỡ lớn và cung cấp tất cả các dịch vụ về máy chủ, các gói cho thuê chỗ đặt máy chủ, cho thuê máy chủ, giải pháp và thiết bị máy chủ, dịch vụ thuê quản trị máy chủ, phân phối phần cứng máy chủ…phục vụ nhiều đối tượng khách hàng, từ những cá nhân có nhu cầu lưu trữ website, email, data… cho đến các tổ chức, doanh nghiệp và công ty viễn thông cung cấp dịch vụ trong và ngoài Việt Nam.
VDO là đối tác của các nhà cung cấp dịch vụ Trung tâm dữ liệu lớn nhất Việt Nam; do đó, hệ thống VPS Server của VDO được đặt tại các Data center VDC, FPT, CMC, VTC, VIETTEL là những ISP cung cấp về đường truyền mạng tốt nhất Việt Nam có đường truyền ổn định cùng hệ thống Data center đạt tiêu chuẩn Quốc tế đảm bảo cho hệ thống hoạt động liên tục và ổn định cao.
CÔNG TY CỔ PHẦN DỮ LIỆU TRỰC TUYẾN VIỆT NAM
Trụ sở chính TP. Hà Nội
Add: Số 55, Ngõ 79 đường Cầu Giấy, P. Yên Hòa, Q. Cầu Giấy, Hà Nội
Hotline: 04 7305 6666 – 0932 363 998 – 0936 300 136
Văn phòng đại diện TP. HCM
Add: 366 Huỳnh Văn Bánh, Phường 14, Quận Phú Nhận, TP.HCM
Hotline: 08 7308 6666 – 0962 788 835 – 0936 108 858
Tổng đài hỗ trợ kỹ thuật và tư vấn dịch vụ: 1900 6891

Không có nhận xét nào:

Đăng nhận xét