Apa perbedaan antara TRUNCATE
dan DELETE
dalam SQL?
Jika jawaban Anda spesifik untuk platform, harap tunjukkan itu.
Apa perbedaan antara TRUNCATE
dan DELETE
dalam SQL?
Jika jawaban Anda spesifik untuk platform, harap tunjukkan itu.
Jawaban:
Berikut daftar perbedaannya. Saya telah menyoroti fitur khusus Oracle, dan semoga komunitas dapat menambahkan perbedaan spesifik vendor lain juga. Perbedaan yang umum bagi sebagian besar vendor dapat langsung di bawah judul, dengan perbedaan yang disorot di bawah ini.
Jika Anda ingin menghapus semua baris dengan cepat dari sebuah tabel, dan Anda benar-benar yakin ingin melakukannya, dan Anda tidak memiliki kunci asing terhadap tabel, maka TRUNCATE mungkin akan lebih cepat daripada HAPUS .
Berbagai masalah khusus sistem harus dipertimbangkan, seperti dirinci di bawah ini.
Hapus adalah DML, Truncate adalah DDL ( Apa itu DDL dan DML? )
Variabel berdasarkan vendor
SQL * Server
Memotong dapat digulung kembali.
PostgreSQL
Memotong dapat digulung kembali.
Peramal
Karena TRUNCATE adalah DDL, itu melibatkan dua komit, satu sebelum dan satu setelah eksekusi pernyataan. Oleh karena itu truncate tidak dapat digulung kembali, dan kegagalan dalam proses truncate akan mengeluarkan komit.
Namun, lihat Kilas Balik di bawah ini.
Hapus tidak memulihkan ruang, Truncate memulihkan ruang
Peramal
Jika Anda menggunakan klausa REUSE STORAGE maka segmen data tidak dialokasikan, yang sedikit lebih efisien jika tabel diisi ulang dengan data. Tanda air tinggi diatur ulang.
Hapus dapat digunakan untuk menghapus semua baris atau hanya sebagian dari baris. Truncate menghapus semua baris.
Peramal
Ketika sebuah tabel dipartisi, partisi individual dapat terpotong secara terpisah, dengan demikian sebagian penghapusan semua data tabel dimungkinkan.
Hapus bisa diterapkan ke tabel dan tabel di dalam sebuah cluster. Truncate hanya berlaku untuk tabel atau seluruh cluster. (Mungkin spesifik Oracle)
Peramal
Hapus tidak memengaruhi id objek data, tetapi truncate memberikan id objek data baru kecuali jika tidak pernah ada sisipan terhadap tabel sejak pembuatannya. Bahkan satu insert yang digulirkan kembali akan menyebabkan id objek data baru ditetapkan pada pemotongan. .
Kilas balik berfungsi di seluruh penghapusan, tetapi truncate mencegah kilas balik ke status sebelum operasi.
Namun, dari 11gR2 fitur FLASHBACK ARCHIVE memungkinkan ini, kecuali dalam Express Edition
Penggunaan FLASHBACK di Oracle http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_flashback.htm#ADFNS638
Variabel
Peramal
Hapus dapat diberikan pada tabel ke pengguna atau peran lain, tetapi truncate tidak dapat dilakukan tanpa menggunakan DROP ANY TABLE grant.
Hapus menghasilkan sejumlah kecil pengulangan dan sejumlah besar penguraian. Truncate menghasilkan jumlah masing-masing yang dapat diabaikan.
Peramal
Operasi terpotong membuat indeks tidak dapat digunakan lagi. Hapus tidak.
Truncate tidak dapat diterapkan ketika kunci asing yang diaktifkan merujuk pada tabel. Perawatan dengan delete tergantung pada konfigurasi kunci asing.
Peramal
Truncate memerlukan kunci tabel eksklusif, hapus membutuhkan kunci tabel bersama. Oleh karena itu menonaktifkan kunci meja adalah cara untuk mencegah operasi terpotong di atas meja.
Pemicu DML tidak menyala pada truncate.
Peramal
Tersedia pemicu DDL.
Peramal
Truncate tidak dapat dikeluarkan melalui tautan basis data.
SQL * Server
Truncate me-reset urutan untuk jenis kolom IDENTITY, hapus tidak.
Di sebagian besar implementasi, DELETE
pernyataan dapat kembali ke klien baris yang telah dihapus.
misalnya dalam subprogram Oracle PL / SQL Anda dapat:
DELETE FROM employees_temp
WHERE employee_id = 299
RETURNING first_name,
last_name
INTO emp_first_name,
emp_last_name;
Perbedaan antara truncate dan delete tercantum di bawah ini:
+----------------------------------------+----------------------------------------------+
| Truncate | Delete |
+----------------------------------------+----------------------------------------------+
| We can't Rollback after performing | We can Rollback after delete. |
| Truncate. | |
| | |
| Example: | Example: |
| BEGIN TRAN | BEGIN TRAN |
| TRUNCATE TABLE tranTest | DELETE FROM tranTest |
| SELECT * FROM tranTest | SELECT * FROM tranTest |
| ROLLBACK | ROLLBACK |
| SELECT * FROM tranTest | SELECT * FROM tranTest |
+----------------------------------------+----------------------------------------------+
| Truncate reset identity of table. | Delete does not reset identity of table. |
+----------------------------------------+----------------------------------------------+
| It locks the entire table. | It locks the table row. |
+----------------------------------------+----------------------------------------------+
| Its DDL(Data Definition Language) | Its DML(Data Manipulation Language) |
| command. | command. |
+----------------------------------------+----------------------------------------------+
| We can't use WHERE clause with it. | We can use WHERE to filter data to delete. |
+----------------------------------------+----------------------------------------------+
| Trigger is not fired while truncate. | Trigger is fired. |
+----------------------------------------+----------------------------------------------+
| Syntax : | Syntax : |
| 1) TRUNCATE TABLE table_name | 1) DELETE FROM table_name |
| | 2) DELETE FROM table_name WHERE |
| | example_column_id IN (1,2,3) |
+----------------------------------------+----------------------------------------------+
PENURUNAN
Perintah DROP menghapus tabel dari database. Semua baris, indeks, dan hak istimewa tabel juga akan dihapus. Tidak ada pemicu DML yang akan dipecat. Operasi tidak dapat dibatalkan.
MEMOTONG
TRUNCATE menghapus semua baris dari tabel. Operasi tidak dapat dibatalkan dan tidak ada pemicu yang akan diaktifkan. Dengan demikian, TRUNCATE lebih cepat dan tidak menggunakan ruang undo sebanyak DELETE. Kunci level tabel akan ditambahkan saat Memotong.
MENGHAPUS
Perintah DELETE digunakan untuk menghapus baris dari tabel. Klausa WHERE hanya bisa digunakan untuk menghapus beberapa baris. Jika tidak ada kondisi WHERE yang ditentukan, semua baris akan dihapus. Setelah melakukan operasi HAPUS, Anda perlu KOMIT atau ROLLBACK transaksi untuk membuat perubahan itu permanen atau membatalkannya. Perhatikan bahwa operasi ini akan menyebabkan semua pemicu DELETE di atas meja menyala. Kunci tingkat baris akan ditambahkan saat menghapus.
Dari: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
Semua jawaban bagus, yang harus saya tambahkan:
Karena TRUNCATE TABLE
merupakan DDL ( Data Defination Language ), bukan perintah DML ( Data Manipulation Langauge ), Delete Triggers
jangan dijalankan.
Ringkasan Delete Vs Truncate di SQL server
Untuk Artikel Lengkap ikuti tautan ini: http://codaffection.com/sql-server-article/delete-vs-truncate-in-sql-server/
Diambil dari artikel dotnet mob: Hapus Vs Truncate di SQL Server
Dengan SQL Server atau MySQL, jika ada PK dengan kenaikan otomatis, truncate akan mengatur ulang penghitung.
DBCC CHECKIDENT (table_name, RESEED, 1)
"Truncate tidak mencatat apa pun" sudah benar. Saya akan melangkah lebih jauh:
Truncate tidak dieksekusi dalam konteks transaksi.
Keuntungan kecepatan dari truncate over delete harus jelas. Keuntungan itu berkisar dari hal sepele hingga yang sangat besar, tergantung pada situasi Anda.
Namun, saya telah melihat truncate tanpa sengaja merusak integritas referensial, dan melanggar kendala lainnya. Kekuatan yang Anda peroleh dengan memodifikasi data di luar transaksi harus seimbang dengan tanggung jawab yang Anda warisi ketika Anda berjalan di atas tali tanpa jaring.
TRUNCATE
adalah pernyataan DDL sedangkan DELETE
pernyataan DML. Berikut adalah perbedaan antara keduanya:
Seperti TRUNCATE
pernyataan DDL ( Bahasa definisi data ), pernyataan ini tidak memerlukan komitmen untuk membuat perubahan permanen. Dan inilah alasan mengapa baris yang dihapus oleh truncate tidak dapat di-rollback. Di sisi lain DELETE
adalah pernyataan DML ( Data manipulation language ) karenanya memerlukan komitmen eksplisit untuk membuat efeknya permanen.
TRUNCATE
selalu menghapus semua baris dari tabel, membiarkan tabel kosong dan struktur tabel tetap utuh sedangkan DELETE
dapat menghapus kondisional jika klausa mana digunakan.
Baris yang dihapus oleh TRUNCATE TABLE
pernyataan tidak dapat dipulihkan dan Anda tidak bisa menentukan klausa di mana dalam TRUNCATE
pernyataan.
TRUNCATE
pernyataan tidak memicu pemicu yang bertentangan dengan pemicu hapus pada DELETE
pernyataan
Inilah tautan yang sangat bagus yang relevan dengan topik tersebut.
Ya, HAPUS lebih lambat, TRUNCATE lebih cepat. Mengapa?
DELETE harus membaca catatan, memeriksa batasan, memperbarui blok, memperbarui indeks, dan menghasilkan redo / undo. Semua itu butuh waktu.
TRUNCATE hanya menyesuaikan pointer di database untuk tabel (Tanda Air Tinggi) dan poof! data hilang.
Ini spesifik untuk Oracle, AFAIK.
MEMOTONG
TRUNCATE Permintaan SQL menghapus semua baris dari tabel, tanpa mencatat penghapusan baris individu.
MENGHAPUS
Untuk menjalankan antrian DELETE, izin penghapusan diperlukan pada tabel target. Jika Anda perlu menggunakan klausa WHERE di DELETE, izin pilih juga diperlukan.
Jika secara tidak sengaja Anda menghapus semua data dari tabel menggunakan Delete / Truncate. Anda dapat mengembalikan transaksi yang dilakukan. Kembalikan cadangan terakhir dan jalankan log transaksi hingga saat Hapus / Truncate akan terjadi.
Informasi terkait di bawah ini dari posting blog :
Saat bekerja pada basis data, kami menggunakan Delete dan Truncate tanpa mengetahui perbedaan di antara mereka. Pada artikel ini kita akan membahas perbedaan antara Hapus dan Potong dalam Sql.
Menghapus:
- Hapus adalah perintah DML.
- Pernyataan Hapus dijalankan menggunakan kunci baris, setiap baris dalam tabel dikunci untuk dihapus.
- Kita dapat menentukan filter di mana klausa.
- Ini menghapus data tertentu jika ada kondisi.
- Hapus kegiatan pemicu karena operasi dicatat secara individual.
- Lebih lambat daripada terpotong karena itu membuat log
Memotong
- Truncate adalah perintah DDL.
- Tabel terpotong selalu mengunci tabel dan halaman tetapi tidak setiap baris. Karena menghapus semua data.
- Tidak dapat menggunakan kondisi Dimana.
- Ini Menghapus semua data.
- Tabel terpotong tidak dapat mengaktifkan pemicu karena operasi tidak mencatat penghapusan baris individual.
- Lebih cepat dalam kinerja bijaksana, karena tidak menyimpan log.
Catatan: Hapus dan Truncate keduanya dapat diputar kembali saat digunakan dengan Transaksi. Jika Transaksi dilakukan, berarti dilakukan maka kita tidak dapat mengembalikan perintah Truncate, tetapi kita masih dapat mengembalikan perintah Hapus dari file Log, seperti menghapus catatan menulis mereka dalam file Log jika diperlukan untuk mengembalikan di masa depan dari file log.
Jika Anda memiliki batasan kunci Asing yang merujuk ke tabel yang Anda coba potong, ini tidak akan berfungsi bahkan jika tabel referensi tidak memiliki data di dalamnya. Ini karena pemeriksaan kunci asing dilakukan dengan DDL daripada DML. Ini dapat disiasati dengan menonaktifkan sementara batasan kunci asing untuk tabel.
Hapus tabel adalah operasi yang dicatat. Jadi penghapusan setiap baris akan dicatat dalam log transaksi, yang membuatnya lambat. Tabel truncate juga menghapus semua baris dalam sebuah tabel, tetapi itu tidak akan mencatat penghapusan setiap baris, melainkan mencatat deallokasi halaman data dari tabel, yang membuatnya lebih cepat.
~ Jika secara tidak sengaja Anda menghapus semua data dari tabel menggunakan Delete / Truncate. Anda dapat mengembalikan transaksi yang dilakukan. Kembalikan cadangan terakhir dan jalankan log transaksi hingga saat Hapus / Truncate akan terjadi.
Dalam SQL Server 2005 saya percaya bahwa Anda dapat mengembalikan truncate
MENGHAPUS
Perintah DELETE digunakan untuk menghapus baris dari tabel. Klausa WHERE hanya bisa digunakan untuk menghapus beberapa baris. Jika tidak ada kondisi WHERE yang ditentukan, semua baris akan dihapus. Setelah melakukan operasi HAPUS, Anda perlu KOMIT atau ROLLBACK transaksi untuk membuat perubahan itu permanen atau membatalkannya. Perhatikan bahwa operasi ini akan menyebabkan semua pemicu DELETE di atas meja menyala.
MEMOTONG
TRUNCATE menghapus semua baris dari tabel. Operasi tidak dapat dibatalkan dan tidak ada pemicu yang akan diaktifkan. Dengan demikian, TRUCATE lebih cepat dan tidak menggunakan ruang undo sebanyak DELETE.
PENURUNAN
Perintah DROP menghapus tabel dari database. Semua baris, indeks, dan hak istimewa tabel juga akan dihapus. Tidak ada pemicu DML yang akan dipecat. Operasi tidak dapat dibatalkan.
DROP dan TRUNCATE adalah perintah DDL, sedangkan DELETE adalah perintah DML. Oleh karena itu operasi DELETE dapat dibatalkan (dibatalkan), sementara operasi DROP dan TRUNCATE tidak dapat dibatalkan.
Dari: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
TRUNCATE dapat dibatalkan jika dibungkus dalam suatu transaksi.
Silakan lihat dua referensi di bawah ini dan uji diri Anda: -
TRUNCATE vs DELETE adalah salah satu pertanyaan terkenal selama wawancara SQL. Pastikan Anda menjelaskannya dengan baik kepada Pewawancara atau mungkin akan dikenakan biaya untuk pekerjaan itu. Masalahnya adalah tidak banyak yang sadar sehingga kemungkinan besar mereka akan menganggap jawabannya salah jika Anda memberi tahu mereka bahwa YA Truncate dapat dibatalkan.
Koreksi kecil pada jawaban awal - hapus juga menghasilkan sejumlah besar pengulangan (karena undo sendiri dilindungi oleh pengulangan). Ini bisa dilihat dari output autotrace:
SQL> delete from t1;
10918 rows deleted.
Elapsed: 00:00:00.58
Execution Plan
----------------------------------------------------------
0 DELETE STATEMENT Optimizer=FIRST_ROWS (Cost=43 Card=1)
1 0 DELETE OF 'T1'
2 1 TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=43 Card=1)
Statistics
----------------------------------------------------------
30 recursive calls
12118 db block gets
213 consistent gets
142 physical reads
3975328 redo size
441 bytes sent via SQL*Net to client
537 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
10918 rows processed
Inilah jawaban terperinci saya tentang perbedaan antara HAPUS dan TRUNCATE di SQL Server
• Hapus Data : Hal pertama yang pertama, keduanya dapat digunakan untuk menghapus baris dari tabel.
Tetapi DELETE dapat digunakan untuk menghapus baris tidak hanya dari Tabel tetapi juga dari VIEW atau hasil OPENROWSET atau OPENQUERY tergantung pada kemampuan penyedia.
• FROM Clause : Dengan DELETE Anda juga dapat menghapus baris dari satu tabel / view / rowset_function_limited berdasarkan baris dari tabel lain dengan menggunakan klausa FROM lainnya. Dalam klausa FROM itu, Anda juga dapat menulis kondisi GABUNGAN normal. Sebenarnya Anda bisa membuat pernyataan DELETE dari pernyataan SELECT yang tidak mengandung fungsi agregat dengan mengganti SELECT dengan DELETE dan menghapus nama kolom.
Dengan TRUNCATE Anda tidak bisa melakukan itu.
• DIMANA : TRUNCATE tidak dapat memiliki Ketentuan WHERE, tetapi DELETE bisa. Itu berarti dengan TRUNCATE Anda tidak dapat menghapus baris tertentu atau grup baris tertentu. TRUNCATE TABLE mirip dengan pernyataan DELETE tanpa klausa WHERE.
• Kinerja : TRUNCATE TABLE lebih cepat dan menggunakan lebih sedikit sumber daya sistem dan log transaksi. Dan salah satu alasannya adalah kunci yang digunakan oleh salah satu pernyataan. Pernyataan DELETE dijalankan menggunakan kunci baris, setiap baris dalam tabel dikunci untuk dihapus. TRUNCATE TABLE selalu mengunci tabel dan halaman tetapi tidak setiap baris.
• Log transaksi : HAPUS pernyataan menghapus baris satu per satu dan membuat entri individual dalam log transaksi untuk setiap baris.
TRUNCATE TABLE menghapus data dengan mendeallocating halaman data yang digunakan untuk menyimpan data tabel dan hanya mencatat deallocations halaman dalam log transaksi.
• Halaman : Setelah pernyataan DELETE dijalankan, tabel masih dapat berisi halaman kosong. TRUNCATE menghapus data dengan deallocating halaman data yang digunakan untuk menyimpan data tabel.
• Pemicu : TRUNCATE tidak mengaktifkan pemicu penghapusan di atas meja. Jadi, Anda harus sangat berhati-hati saat menggunakan TRUNCATE. Seseorang seharusnya tidak pernah menggunakan TRUNCATE jika menghapus Pemicu didefinisikan pada tabel untuk melakukan beberapa pembersihan otomatis atau tindakan logging ketika baris dihapus.
• Kolom Identitas : Dengan TRUNCATE jika tabel berisi kolom identitas, penghitung untuk kolom itu diatur ulang ke nilai seed yang ditentukan untuk kolom. Jika tidak ada seed yang didefinisikan, nilai default 1 digunakan. DELETE tidak mengatur ulang penghitung identitas. Jadi, jika Anda ingin mempertahankan penghitung identitas, gunakan DELETE sebagai gantinya.
• Replikasi : DELETE dapat digunakan terhadap tabel yang digunakan dalam replikasi transaksional atau penggabungan replikasi.
Sementara TRUNCATE tidak dapat digunakan terhadap tabel yang terlibat dalam replikasi transaksional atau menggabungkan replikasi.
• Kembalikan : Pernyataan DELETE dapat dibatalkan.
TRUNCATE juga dapat diputar kembali asalkan tertutup dalam blok TRANSAKSI dan sesi tidak ditutup. Setelah sesi ditutup, Anda tidak akan dapat melakukan Rollback TRUNCATE.
• Pembatasan : Pernyataan DELETE mungkin gagal jika melanggar pemicu atau mencoba untuk menghapus baris yang dirujuk oleh data dalam tabel lain dengan kendala KUNCI ASING. Jika DELETE menghapus banyak baris, dan salah satu baris yang dihapus melanggar pemicu atau kendala, pernyataan dibatalkan, kesalahan dikembalikan, dan tidak ada baris dihapus.
Dan jika DELETE digunakan terhadap View, View itu haruslah tampilan yang dapat diupdate. TRUNCATE tidak dapat digunakan terhadap tabel yang digunakan dalam tampilan Terindeks.
TRUNCATE tidak dapat digunakan terhadap tabel yang dirujuk oleh batasan KUNCI ASING, kecuali sebuah tabel yang memiliki kunci asing yang mereferensikan dirinya sendiri.
DECLARE @ai as bigint
SET @ai =IDENT_CURRENT('tablename')
TRUNCATE TABLE tablename
DBCC checkident('tablename', RESEED, @ai)
HAPUS Pernyataan: Perintah ini hanya menghapus baris dari tabel berdasarkan kondisi yang diberikan di mana klausa atau menghapus semua baris dari tabel jika tidak ada kondisi yang ditentukan. Tapi itu tidak membebaskan ruang yang berisi tabel.
Sintaks pernyataan SQL DELETE adalah:
HAPUS DARI table_name [kondisi WHERE];
Pernyataan TRUNCATE: Perintah ini digunakan untuk menghapus semua baris dari tabel dan membebaskan ruang yang berisi tabel.
MENGHAPUS
DELETE is a DML command DELETE you can rollback Delete = Only Delete- so it can be rolled back In DELETE you can write conditions using WHERE clause Syntax – Delete from [Table] where [Condition]
MEMOTONG
TRUNCATE is a DDL command You can't rollback in TRUNCATE, TRUNCATE removes the record permanently Truncate = Delete+Commit -so we can't roll back You can't use conditions(WHERE clause) in TRUNCATE Syntax – Truncate table [Table]
Untuk lebih jelasnya kunjungi
http://www.zilckh.com/what-is-the-difference-between-truncate-and-delete/
Satu perbedaan lebih lanjut dari dua operasi adalah bahwa jika tabel berisi kolom identitas, penghitung untuk kolom itu diatur ulang 1 (atau ke nilai seed yang ditentukan untuk kolom) di bawah TRUNCATE. HAPUS tidak memiliki pengaruh ini.
Singkatnya, truncate tidak mencatat apa pun (jadi jauh lebih cepat tetapi tidak dapat dibatalkan) sedangkan delete dicatat (dan dapat menjadi bagian dari transaksi yang lebih besar, akan dikembalikan, dll). Jika Anda memiliki data yang tidak Anda inginkan dalam tabel di dev, biasanya lebih baik terpotong karena Anda tidak berisiko mengisi log transaksi
Alasan utama yang praktis, adalah ketika Anda perlu me-refresh data dalam tabel baris multi-juta, tetapi tidak ingin membangunnya kembali. "Hapus *" akan berlangsung selamanya, sedangkan dampak kinerja Truncate akan diabaikan.
Tidak dapat melakukan DDL melalui dblink.
Bukan berarti truncate tidak mencatat apa pun di SQL Server. truncate tidak mencatat informasi apa pun tetapi mencatat deallokasi halaman data untuk tabel tempat Anda memecat TRUNCATE.
dan catatan terpotong bisa menjadi rollback jika kita mendefinisikan transaksi di awal dan kita dapat memulihkan catatan terpotong setelah rollback itu. Tetapi tidak dapat memulihkan catatan terpotong dari cadangan log transaksi setelah transaksi terpotong berkomitmen.
Memotong juga dapat Rollbacked di sini contohnya
begin Tran
delete from Employee
select * from Employee
Rollback
select * from Employee
Truncate dan Delete dalam SQL adalah dua perintah yang digunakan untuk menghapus atau menghapus data dari tabel. Meskipun sifatnya cukup mendasar kedua perintah Sql dapat menciptakan banyak masalah sampai Anda terbiasa dengan detail sebelum menggunakannya. Pilihan perintah yang salah dapat mengakibatkan proses yang sangat lambat atau bahkan dapat meledakan segmen log, jika terlalu banyak data yang perlu dihapus dan segmen log tidak cukup. Itu sebabnya sangat penting untuk mengetahui kapan harus menggunakan perintah truncate dan delete dalam SQL tetapi sebelum menggunakan ini Anda harus mengetahui Perbedaan antara Truncate dan Delete, dan berdasarkan pada mereka, kita harus dapat mengetahui kapan DELETE adalah pilihan yang lebih baik untuk menghapus data atau TRUNCATE harus digunakan untuk membersihkan tabel.
Lihat cek klik di sini
Satu lagi perbedaan khusus untuk server microsoft sql adalah dengan delete
Anda dapat menggunakan output
pernyataan untuk melacak catatan apa yang telah dihapus, misalnya:
delete from [SomeTable]
output deleted.Id, deleted.Name
Anda tidak dapat melakukan ini dengan truncate
.