Làm gì TRUNCATE
khác nhau để thả?
Tôi tin rằng nó sẽ xóa tất cả dữ liệu trong bảng nhưng vẫn giữ tên bảng trong cơ sở dữ liệu, trong đó khi DROP
xóa tất cả dữ liệu và bảng. Điều này có đúng không?
Làm gì TRUNCATE
khác nhau để thả?
Tôi tin rằng nó sẽ xóa tất cả dữ liệu trong bảng nhưng vẫn giữ tên bảng trong cơ sở dữ liệu, trong đó khi DROP
xóa tất cả dữ liệu và bảng. Điều này có đúng không?
Câu trả lời:
XÓA - NGÔN NGỮ DỮ LIỆU DỮ LIỆU (DML)
Câu DELETE
lệnh trong bất kỳ RDBMS nào được coi là câu lệnh DML . Còn được gọi là CRUD (Tạo, Đọc, Cập nhật, Xóa), loại câu lệnh này nhằm thao túng dữ liệu trong cơ sở dữ liệu mà không ảnh hưởng đến cấu trúc cơ bản của các đối tượng. Điều này có nghĩa là gì trong thực tế là:
DELETE
câu lệnh có thể được điều chỉnh bằng cách sử dụng một vị từ thông qua WHERE
hoặc JOIN
để xóa một số hoặc tất cả các hàng trong một bảng.DELETE
câu lệnh sẽ được ghi lại bởi cơ sở dữ liệu và có thể được khôi phục trong một giao dịch nếu câu lệnh thất bại.DELETE
sẽ có các khóa cấp hàng trên dữ liệu bị xóa, mặc dù điều này có thể leo thang cao hơn khi cần thiết.DELETE
có thể "chậm" (điều này là tương đối), nhưng an toàn hơn vì nó là hạt mịn.TRUNCATE - NGÔN NGỮ ĐỊNH NGHATA DỮ LIỆU (DDL)
TRUCNATE
được coi là một câu lệnh DDL , có nghĩa là nó được dự định để thay đổi cách xác định các đối tượng trong cơ sở dữ liệu. Thông thường, các câu lệnh DDL là CREATE
, ALTER
hoặc DROP
, nhưng TRUNCATE
phục vụ một mục đích cụ thể, đó là "tái định cư" một bảng bằng cách xóa tất cả các hàng. Các phương thức này khác nhau giữa các công cụ RDBMS và tôi khuyên bạn nên xem xét các chi tiết cụ thể của MySQL . Ý nghĩa thực tế của a TRUNCATE
là:
TRUNCATE
không thể là hạt mịn. Nếu thành công, nó sẽ xóa tất cả các hàng khỏi bảng của bạn.TRUNCATE
thường không được đăng nhập. Điều này thay đổi theo RDBMS và tôi sẽ đề nghị bạn xem xét cụ thể hơn về cách MySQL xử lý nó. (Gợi ý, nó thay đổi theo phiên bản.)TRUNCATE
yêu cầu khóa siêu dữ liệu bảng để thực thi. Làm thế nào điều này thực sự được triển khai có thể cụ thể đối với RDBMS, nhưng về cơ bản, TRUNCATE
quá trình này phải ngăn các quá trình khác không được thực hiện với bảng để thực thi DDL của nó.TRUNCATE
sẽ nhanh hơn a DELETE
, nhưng kém an toàn hơn.BẢNG DROP - NGÔN NGỮ ĐỊNH NGHATA DỮ LIỆU (DDL)
DROP TABLE
đi xa hơn một TRUNCATE
trong đó nó thực sự loại bỏ hoàn toàn bảng khỏi cơ sở dữ liệu. Điều này bao gồm loại bỏ tất cả các đối tượng liên quan, chẳng hạn như các chỉ mục và các ràng buộc. Nếu bạn đánh rơi một bảng, bạn không chỉ xóa tất cả dữ liệu mà còn cả cấu trúc. Điều này thường sẽ được thực hiện khi một bảng không còn cần thiết. Mối quan tâm chính là vì a DROP
là DDL, bạn thường không thể hoàn tác nó . Một số công cụ RDBMS sẽ cho phép bạn bọc DDL trong một giao dịch để bạn có thể khôi phục lại, nhưng điều này không được coi là thực tiễn tốt nhất và nên tránh.
Mặc dù tôi không thể nói cho MySQL, đây là một bảng nhanh so sánh một số khía cạnh của việc cắt ngắn so với xóa trong Oracle.
truncate | delete
--------------------------------- | ---------------------------
DDL (implicitly commits, | DML
including any pending DML) |
Does not generate undo info | Generates undo info
(rollback statements) | (rollback statements)
Resets high water mark in table | Does not affect full-scan
and all indexes, improving | performance
full-scan performance |
Does not fire any delete triggers | Fires delete triggers
Priv to truncate cannot be granted | --
to truncate another user's |
table; DROP ANY TABLE system |
priv required |
Storage for table and indexes can | Never shrinks the size of a
be set to initial size | table or indexes
Cannot truncate parent table from | --
an established referential |
integrity constraint; must |
first disable foreign key |
that references the parent |
table |
Thông tin được tổng hợp từ cuốn sách này: http://amzn.com/0470395125
Hy vọng rằng điều này có thể giúp bất kỳ người dùng Oracle nào vấp ngã trên trang này, như tôi đã làm. Xin vui lòng chỉ ra rằng, nếu có, những điểm này đúng trong MySQL,
DROP TABLE TableName
-> xóa bảng khỏi cơ sở dữ liệu.
TRUNCATE TABLE TableName
-> xóa dữ liệu của bảng, vô điều kiện ... và đặt lại IDENTITY
giá trị hạt giống, nếu bảng có một IDENTITY
trường.
DELETE
: Lệnh DML, nếu bạn thực hiện lệnh xóa, hãy xóa DATA duy nhất mà không hủy bảng Cấu trúc, chúng ta có thể ROLLBACK hàng dữ liệu theo cách hàng
TRUNCATE
: Lệnh DDL, nếu bạn thực hiện lệnh Truncate, hãy xóa DATA duy nhất mà không hủy bảng Cấu trúc, chúng tôi không thể khôi phục dữ liệu cắt bỏ dữ liệu trong PAGE BY PAGE theo cách cắt nhanh hơn sau đó xóa truy vấn
DROP
:, Lệnh DDL, nếu bạn thực hiện lệnh DROP, nó sẽ xóa (xóa) dữ liệu và tổng cấu trúc bảng, chúng tôi không thể khôi phục dữ liệu