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.”
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