Hướng dẫn truncate table mysql - cắt ngắn bảng mysql

Hướng dẫn truncate table mysql - cắt ngắn bảng mysql

Đã đăng vào thg 5 27, 2018 3:35 CH 2 phút đọc 2 phút đọc

  1. DELETE
  1. TRUNCATE
  • Cú pháp: TRUNCATE TABLE table_name;
  • Đối với TRUNCATE chúng ta chỉ có thể dùng cho bảng chứ không thể dùng cho từng record.
  • Khi chạy lệnh TRUNCATE thì SQL sẽ xóa hết dữ liệu của bảng và reset transaction log, vì thế khi tạo 1 record mới, giá trị cua id sẽ bắt đầu từ 1, đây cũng chính là khác biệt lớn nhất của DELETETRUNCATE.
  • Ví dụ
  • Chúng ta sẽ chạy lệnh DELETE1 với bảng ví dụ ở trên
    Hướng dẫn truncate table mysql - cắt ngắn bảng mysql
  • Như các bạn có thể thấy bản chất câu lệnh DELETE là xóa từng row khi có 109 rows đã bị tác động còn TRUNCATE đơn giản là xóa cả 1 dữ liệu của 1 bảng không kể số lượng dòng khi có 0 rows đã bị tác động.
  1. 1 vài điều lưu ý
  • TRUNCATE không thể chạy được khi bảng bạn định xóa có DELETE5 (nếu bảng đó có DELETE5 trỏ đến chính nó thì bạn có thể xóa bình thường)
  • Dữ liệu bị xóa bởi DELETE có thể DELETE8 được còn TRUNCATE thì không.
  • Tùy vào từng trường hợp thì bạn sẽ dùng DELETE hoặc TRUNCATE, TRUNCATE sẽ luôn nhanh hơn vì nó tiêu tốn ít bộ nhớ hơn, các bạn có thể cân nhắc điều này khi cần xóa 1 bảng lớn vs nhiều record.

All rights reserved

13.1.37 & NBSP; Tuyên bố bảng cắt ngắn

TRUNCATE [TABLE] tbl_name

TRUNCATE3 làm trống hoàn toàn một bảng. Nó đòi hỏi đặc quyền TRUNCATE4. Về mặt logic, TRUNCATE5 tương tự như câu lệnh DELETE xóa tất cả các hàng hoặc chuỗi các câu lệnh TRUNCATE7 và TRUNCATE8.

Để đạt được hiệu suất cao, TRUNCATE5 bỏ qua phương pháp DML để xóa dữ liệu. Do đó, nó không khiến các yếu tố kích hoạt TRUNCATE TABLE table_name;0 bị bắn, nó không thể được thực hiện cho các bảng TRUNCATE TABLE table_name;1 với các mối quan hệ khóa nước ngoài của cha mẹ và con cái và nó không thể được quay lại như một hoạt động DML. Tuy nhiên, các hoạt động TRUNCATE5 trên các bảng sử dụng công cụ lưu trữ hỗ trợ DDL nguyên tử được cam kết hoặc quay lại hoàn toàn nếu máy chủ dừng trong quá trình hoạt động của chúng. Để biết thêm thông tin, xem Phần & NBSP; 13.1.1, Câu lệnh xác định dữ liệu nguyên tử hỗ trợ.

Mặc dù TRUNCATE3 tương tự như DELETE, nhưng nó được phân loại là câu lệnh DDL chứ không phải là câu lệnh DML. Nó khác với DELETE theo những cách sau:

  • Các hoạt động cắt giảm và tạo lại bảng, nhanh hơn nhiều so với việc xóa từng hàng một, đặc biệt là cho các bảng lớn.

  • Các hoạt động cắt ngắn gây ra một cam kết ngầm, và do đó không thể được quay trở lại. Xem Phần & NBSP; 13.3.3, Các câu lệnh gây ra một cam kết ngầm.

  • Không thể thực hiện các hoạt động cắt ngắn nếu phiên giữ khóa bảng hoạt động.

  • TRUNCATE3 không thành công cho bảng TRUNCATE TABLE table_name;1 hoặc bảng TRUNCATE TABLE table_name;8 nếu có bất kỳ ràng buộc TRUNCATE TABLE table_name;9 nào từ các bảng khác tham chiếu bảng. Các ràng buộc khóa nước ngoài giữa các cột của cùng một bảng được cho phép.

  • Các hoạt động cắt không trả về một giá trị có ý nghĩa cho số lượng hàng bị xóa. Kết quả thông thường là các hàng 0 được ảnh hưởng, nên được hiểu là không có thông tin.0 rows affected, which should be interpreted as no information.

  • Miễn là định nghĩa bảng là hợp lệ, bảng có thể được tạo lại dưới dạng bảng trống với TRUNCATE3, ngay cả khi các tệp dữ liệu hoặc chỉ mục đã bị hỏng.

  • Bất kỳ giá trị TRUNCATE1 nào được đặt lại về giá trị bắt đầu của nó. Điều này đúng ngay cả đối với TRUNCATE2 và TRUNCATE TABLE table_name;1, thường không sử dụng lại các giá trị trình tự.

  • Khi được sử dụng với các bảng được phân vùng, TRUNCATE3 bảo tồn phân vùng; Đó là, các tệp dữ liệu và chỉ mục bị loại bỏ và được tạo lại, trong khi các định nghĩa phân vùng không bị ảnh hưởng.

  • Tuyên bố TRUNCATE3 không gọi TRUNCATE TABLE table_name;0 kích hoạt.

  • Cắt ngắn một bảng TRUNCATE TABLE table_name;1 bị hỏng được hỗ trợ.

TRUNCATE3 được coi là mục đích ghi nhật ký nhị phân và sao chép là DDL chứ không phải DML, và luôn được ghi lại như một tuyên bố.

TRUNCATE3 cho một bảng đóng tất cả các trình xử lý cho bảng được mở bằng TRUNCATE0.

Trong MySQL 5.7 trở lên, trên một hệ thống có nhóm đệm lớn và TRUNCATE1 được bật, hoạt động TRUNCATE3 có thể gây ra hiệu suất hệ thống giảm tạm thời do quét LRU xảy ra khi xóa các mục nhập chỉ số băm thích ứng của bảng (Bug #68184). Việc ánh xạ lại của TRUNCATE5 thành TRUNCATE7 và TRUNCATE8 trong MySQL 8.0 tránh quét LRU có vấn đề.

TRUNCATE3 có thể được sử dụng với các bảng tóm tắt SCHEMA hiệu suất, nhưng hiệu ứng là đặt lại các cột tóm tắt thành 0 hoặc TRUNCATE7, không phải để loại bỏ các hàng. Xem Phần & NBSP; 27.12.20, Bảng tóm tắt Lược đồ hiệu suất.

Cắt ngắn một bảng TRUNCATE TABLE table_name;1 nằm trong một không gian bảng cho mỗi bảng giảm không gian bảng hiện có và tạo một bảng mới. Kể từ MySQL 8.0.21, nếu không gian bảng được tạo bằng phiên bản trước đó và nằm trong thư mục không xác định, TRUNCATE TABLE table_name;1 sẽ tạo không gian bảng mới ở vị trí mặc định và ghi cảnh báo sau đây vào nhật ký lỗi: thư mục dữ liệu phải nằm trong một Thư mục đã biết. Vị trí thư mục dữ liệu sẽ bị bỏ qua và tệp sẽ được đưa vào vị trí Datadir mặc định. Các thư mục đã biết là những thư mục được xác định bởi các biến transaction log0, transaction log1 và transaction log2. Để có TRUNCATE3 tạo không gian bảng ở vị trí hiện tại của nó, hãy thêm thư mục vào cài đặt transaction log2 trước khi chạy TRUNCATE3.The DATA DIRECTORY location must be in a known directory. The DATA DIRECTORY location will be ignored and the file will be put into the default datadir location. Known directories are those defined by the transaction log0, transaction log1, and transaction log2 variables. To have TRUNCATE3 create the tablespace in its current location, add the directory to the transaction log2 setting before running TRUNCATE3.