Apa yang TRUNCATE
harus dilakukan dengan jatuh secara berbeda?
Saya percaya ini menghapus semua data dalam tabel tetapi menyimpan nama tabel dalam database, di mana seperti DROP
menghapus semua data dan tabel. Apakah ini benar ?
Apa yang TRUNCATE
harus dilakukan dengan jatuh secara berbeda?
Saya percaya ini menghapus semua data dalam tabel tetapi menyimpan nama tabel dalam database, di mana seperti DROP
menghapus semua data dan tabel. Apakah ini benar ?
Jawaban:
HAPUS - BAHASA MANIPULASI DATA (DML)
The DELETE
pernyataan dalam setiap RDBMS dianggap sebagai DML pernyataan. Juga dikenal sebagai CRUD (Buat, Baca, Perbarui, Hapus), pernyataan semacam ini dimaksudkan untuk memanipulasi data dalam database tanpa mempengaruhi struktur objek yang mendasarinya. Apa artinya ini dalam istilah praktis adalah:
DELETE
pernyataan dapat fine-tuned menggunakan predikat baik melalui WHERE
atau JOIN
menghapus beberapa atau semua baris dalam sebuah tabel.DELETE
pernyataan akan dicatat oleh database dan dapat diperpanjang kembali dalam transaksi jika pernyataan gagal.DELETE
akan mengambil kunci level baris pada data yang dihapus, meskipun ini bisa meningkat lebih tinggi seperlunya.DELETE
bisa "lambat" (ini relatif), tetapi lebih aman karena berbutir halus.TRUNCATE - BAHASA DEFINISI DATA (DDL)
TRUCNATE
dianggap sebagai pernyataan DDL , artinya dimaksudkan untuk mengubah cara objek didefinisikan dalam database. Biasanya, pernyataan DDL adalah CREATE
,, ALTER
atau DROP
, tetapi TRUNCATE
melayani tujuan tertentu, yaitu untuk "mengatur ulang" sebuah tabel dengan menghapus semua baris. Metode ini berbeda antara mesin RDBMS dan saya akan merekomendasikan melihat spesifik MySQL . Implikasi praktis dari a TRUNCATE
adalah:
TRUNCATE
tidak bisa berbutir halus. Jika berhasil, itu akan menghapus semua baris dari tabel Anda.TRUNCATE
biasanya tidak dicatat. Ini bervariasi menurut RDBMS dan saya sarankan Anda melihat lebih spesifik bagaimana MySQL menanganinya. (Petunjuk, ini bervariasi menurut versi.)TRUNCATE
membutuhkan kunci metadata tabel untuk dieksekusi. Bagaimana ini benar-benar diimplementasikan dapat spesifik untuk RDBMS, tetapi pada dasarnya TRUNCATE
proses tersebut harus mencegah proses lain dari mucking dengan tabel untuk mengeksekusi DDL-nya.TRUNCATE
akan lebih cepat daripada DELETE
, tetapi kurang aman.DROP TABLE - BAHASA DEFINISI DATA (DDL)
DROP TABLE
melangkah lebih jauh dari TRUNCATE
pada yang benar-benar menghapus tabel dari database sepenuhnya. Ini termasuk menghapus semua objek terkait, seperti indeks dan batasan. Jika Anda menjatuhkan tabel, Anda tidak hanya akan menghapus semua data, tetapi struktur juga. Ini biasanya akan dilakukan ketika meja tidak lagi dibutuhkan. Perhatian utama adalah karena a DROP
adalah DDL, Anda biasanya tidak dapat membatalkannya . Beberapa mesin RDBMS akan memungkinkan Anda untuk membungkus DDL dalam suatu transaksi sehingga Anda dapat mengembalikannya, tetapi ini tidak dianggap praktik terbaik dan harus dihindari.
Meskipun saya tidak dapat berbicara untuk MySQL, berikut adalah tabel singkat yang membandingkan beberapa aspek dari truncate vs delete dalam 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 |
Informasi yang dihimpun dari buku ini: http://amzn.com/0470395125
Semoga ini dapat membantu setiap pengguna Oracle yang tersandung di halaman ini, seperti yang saya lakukan. Silakan tunjukkan yang mana, jika ada, dari poin-poin ini berlaku di MySQL,
DROP TABLE TableName
-> hapus tabel dari database.
TRUNCATE TABLE TableName
-> hapus data tabel, tanpa syarat ... dan setel ulang nilai IDENTITY
seed, jika tabel memiliki IDENTITY
bidang.
DELETE
: Perintah DML, jika Anda melakukan perintah delete, hapus satu-satunya DATA tanpa menghilangkan struktur tabel, kita dapat MENGGULIRKAN baris data dengan cara baris
TRUNCATE
: Perintah DDL, jika Anda menjalankan perintah Truncate, hapus satu-satunya DATA tanpa menghilangkan struktur tabel, kami tidak dapat mengembalikan truncate data, menghapus data dalam PAGE BY PAGE dengan cara truncate lebih cepat, lalu hapus query
DROP
:, Perintah DDL, jika Anda melakukan perintah DROP itu menghapus (menghapus) data dan struktur tabel total juga kita tidak bisa mengembalikan data