Monday, September 16, 2013

Truncate

Walaupun saya orang IT, kadang banyak istilah-istilah IT yang ga saya tahu. Contohnya istilah yg satu ini “truncate”. Tahu, pernah denger sih.. Tapi Kalo ditanya truncate apa? Ga bisa jawab. Sama aja ga tahu kan?!

Kejadiannya pas lagi ngerjain tugas gitu di kantor, eh temen ngechat

“aku lagi truncate tabel d** sama a***, jangan kaget kalo datanya hilang.”

Penasaran kan? What is he doing?

Kucari deh..

Dan pemirsah, saya menemukannya!

Syntax nya begini :

TRUNCATE [TABLE] tbl_name

TRUNCATE TABLE adalah mengosongkan tabel, sampe bener-bener kosong. Hampir sama lah sama statemen DELETE ALL ROWS, cuma prakteknya ada perbedaaan untuk kondisi tertentu. Untuk tabel InnoDB sebelum versi 5.0.3, InnoDB memproses truncate table dengan menghapus baris satu per satu. Untuk MySQL 5.0.3, delete perbaris hanya dilakukan kalo ada foreign key yang merujuk ke tabel itu. Kalo ga ada foreign key, InnoDB akan dengan sangat cepat men-truncate tabel, dengan cara menghapus tabel aslinya dan membuat 1 tabel kosong yang sama persis dengan tabel sebelumnya, dan ini jauh lebih cepat dibanding harus menghapus baris per baris.

Pada kasus tabel yang ada foreign key nya, InnoDB menghapus baris per baris dan memproses masing-masing constraint. Jika constraint foreign key sebelumnya diset DELETE CASCADE, maka baris dari tabel yang dirujuk akan dihapus. Sebaliknya jika tidak diset CASCADE, proses penghapusan akan berhenti, jika menemukan parent row yang dirujuk oleh child row, mengembalikan pesan error ini :

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign
key constraint fails (`test`.`child`, CONSTRAINT `child_ibfk_1`
FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`))

Hasilnya sama dengan ketika menggunakan statemen DELETE tanpa klausa WHERE.

Sampe disini ya, semoga bermanfaat!


No comments:

Post a Comment