MYSQL – ALTER, DROP, RENAME, MODIFY
⚡ Ringkasan Cerdas
ALTER, DROP, RENAME, dan MODIFY adalah MySQL Perintah yang mengubah bentuk basis data setelah basis data tersebut sedang digunakan. Perintah ini menambahkan, menghapus, mengganti nama, dan mendefinisikan ulang objek seperti tabel dan kolom tanpa membuang baris yang sudah tersimpan.

Apa itu perintah ALTER? MySQL?
The MENGUBAH Perintah ini memodifikasi basis data, tabel, tampilan, atau objek basis data lain yang sudah ada dan perlu diubah selama siklus hidup basis data. Ini adalah perintah yang memungkinkan skema untuk berevolusi setelah dibuat dan diisi dengan data.
Kebutuhan bisnis jarang sekali statis, dan desain basis data harus bergerak seiring dengan perubahan tersebut. Misalkan desain basis data Myflix telah diimplementasikan dan pengguna sedang menggunakannya, dan baru kemudian tim menyadari bahwa informasi penting telah terlewatkan. Tidak ada yang ingin kehilangan baris data yang sudah ada; mereka hanya ingin mencatat informasi baru di sampingnya.
Perintah ALTER mencakup situasi tersebut secara tepat. Perintah ini dapat mengubah tipe data suatu kolom dari string menjadi angka, mengganti nama kolom, atau menambahkan kolom baru ke dalam tabel, sementara data yang sudah tersimpan dalam tabel tetap utuh.
Setelah tujuan perintah ditetapkan, langkah selanjutnya adalah sintaks yang menjalankannya.
MySQL Sintaks ALTER
Sintaks dasar yang digunakan untuk menambahkan kolom ke tabel yang sudah ada ditunjukkan di bawah ini.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
SINI
- “UBAH TABEL `nama_tabel`” adalah perintah yang memberitahu MySQL server untuk mengubah tabel bernama `nama_tabel`.
- “TAMBAHKAN KOLOM `nama_kolom` `tipe_data`” adalah perintah yang memberitahu MySQL server untuk menambahkan kolom baru bernama `column_name` dengan tipe data `data_type`.
Misalkan Myflix telah memperkenalkan penagihan dan pembayaran online. Untuk mendukungnya, kolom untuk nomor kartu kredit harus ditambahkan ke tabel anggota. Sebelum melakukan perubahan apa pun, ada baiknya melihat struktur tabel yang ada. Skrip yang ditunjukkan di bawah ini melakukan hal itu.
SHOW COLUMNS FROM `members`;
| Bidang | Tipe | Null | kunci | Default | ekstra |
|---|---|---|---|---|---|
| Nomor keanggotaan | int (11) | TIDAK | PRI | NULL | kenaikan_otomatis |
| nama lengkap | varchar(350) | TIDAK | NULL | ||
| jenis kelamin | varchar(6) | YES | NULL | ||
| tanggal_lahir | tanggal | YES | NULL | ||
| alamat fisik | varchar(255) | YES | NULL | ||
| alamat pos | varchar(255) | YES | NULL | ||
| nomor_kontak | varchar(75) | YES | NULL | ||
| varchar(255) | YES | NULL |
💡 Catatan pada int(11): Angka dalam tanda kurung hanyalah lebar tampilan. MySQL Versi 8.0.17 menghapusnya untuk tipe data integer, sehingga server modern melaporkan kolom ini hanya sebagai intUkuran penyimpanan tidak berubah.
Skrip yang ditunjukkan di bawah ini menambahkan kolom baru ke tabel anggota.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Menjalankan skrip ini terhadap myflixdb menambahkan kolom bernama credit_card_number ke tabel members dengan tipe data VARCHAR. Menjalankan skrip SHOW COLUMNS lagi memberikan hasil berikut.
| Bidang | Tipe | Null | kunci | Default | ekstra |
|---|---|---|---|---|---|
| Nomor keanggotaan | int (11) | TIDAK | PRI | NULL | kenaikan_otomatis |
| nama lengkap | varchar(350) | TIDAK | NULL | ||
| jenis kelamin | varchar(6) | YES | NULL | ||
| tanggal_lahir | tanggal | YES | NULL | ||
| alamat fisik | varchar(255) | YES | NULL | ||
| alamat pos | varchar(255) | YES | NULL | ||
| nomor_kontak | varchar(75) | YES | NULL | ||
| varchar(255) | YES | NULL | |||
| nomor kartu kredit | varchar(25) | YES | NULL |
Baris yang disorot mengkonfirmasi bahwa credit_card_number telah ditambahkan ke tabel members, dan data yang sudah ada di kolom lain tidak terpengaruh oleh penambahan tersebut.
Menambahkan kolom hanyalah setengah dari cerita. Sebuah skema juga harus menghapus objek yang tidak lagi dibutuhkan, dan itulah tugas dari perintah DROP.
Apa itu perintah DROP? MySQL?
Perintah DROP menghapus objek secara permanen. Perintah ini digunakan untuk
- Hapus basis data dari MySQL Server.
- Menghapus objek seperti tabel atau kolom dari basis data.
⚠️ Peringatan: Perintah DROP tidak dapat dibatalkan. Baik objek maupun baris di dalamnya tidak dapat dipulihkan tanpa cadangan, jadi jalankan perintah SELECT terhadap target dan konfirmasikan cadangan terlebih dahulu.
Menjatuhkanping kolom
Pada contoh ALTER di atas, sebuah kolom bernama credit_card_number ditambahkan ke tabel members. Misalkan fitur penagihan online ditunda dan kolom tersebut harus dihapus lagi. Skrip berikut melakukannya.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Menjalankan skrip tersebut akan menghapus kolom credit_card_number dari tabel members. Mencantumkan kembali kolom-kolom tersebut akan mengkonfirmasi hasilnya.
SHOW COLUMNS FROM `members`;
| Bidang | Tipe | Null | kunci | Default | ekstra |
|---|---|---|---|---|---|
| Nomor keanggotaan | int (11) | TIDAK | PRI | NULL | kenaikan_otomatis |
| nama lengkap | varchar(350) | TIDAK | NULL | ||
| jenis kelamin | varchar(6) | YES | NULL | ||
| tanggal_lahir | tanggal | YES | NULL | ||
| alamat fisik | varchar(255) | YES | NULL | ||
| alamat pos | varchar(255) | YES | NULL | ||
| nomor_kontak | varchar(75) | YES | NULL | ||
| varchar(255) | YES | NULL |
Nomor kartu kredit telah hilang dari daftar kolom.
DROP MEJA
Sintaks untuk menghapus seluruh tabel dari basis data adalah sebagai berikut.
DROP TABLE `sample_table`;
Jika diterapkan pada objek nyata, pernyataan tersebut akan terlihat seperti ini.
DROP TABLE `categories_archive`;
Menjalankan perintah ini akan menghapus tabel bernama `categories_archive` dan semua baris di dalamnya dari basis data.
JATUHKAN DATABASE
Kata kunci yang sama menghapus seluruh skema. Menambahkan IF EXISTS akan menekan kesalahan tersebut. MySQL Akan muncul pengecualian ketika target sudah hilang, yang berguna di dalam skrip yang dijalankan lebih dari sekali.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Menghapus suatu objek bersifat final. Namun, jika objek itu sendiri harus tetap ada dan hanya namanya yang salah, maka perintah RENAME adalah alat yang tepat.
Apa itu perintah RENAME? MySQL?
Perintah RENAME mengubah nama objek basis data yang sudah ada, seperti tabel atau kolom, menjadi nama baru. Mengganti nama tabel tidak menyebabkan hilangnya data yang terdapat di dalamnya.
Perintah tersebut memiliki sintaks dasar sebagai berikut.
RENAME TABLE `current_table_name` TO `new_table_name`;
Untuk mengganti nama tabel movierentals menjadi movie_rentals, skrip di bawah ini digunakan.
RENAME TABLE `movierentals` TO `movie_rentals`;
Menjalankan perintah tersebut akan mengubah nama tabel `movierentals` menjadi `movie_rentals`. Karena perubahan nama hanya berupa perubahan label, pernyataan yang sama jika dibalik akan mengembalikan nama aslinya.
RENAME TABLE `movie_rentals` TO `movierentals`;
Perintah RENAME TABLE menangani nama tabel. Mengganti nama tabel kolom, dan mengubah apa yang ada di dalamnya, adalah tugas dari kata kunci CHANGE.
Ubah Kata Kunci
Kata kunci CHANGE memungkinkan Anda untuk
- Ubah nama kolom
- Ubah tipe data kolom
- Ubah batasan kolom
Perhatikan sebuah contoh. Kolom full_names dalam tabel members memiliki tipe data varchar dengan lebar 350, seperti yang dikonfirmasi oleh skrip di bawah ini.
SHOW COLUMNS FROM `members`;
| Bidang | Tipe | Null | kunci | Default | ekstra |
|---|---|---|---|---|---|
| Nomor keanggotaan | int (11) | TIDAK | PRI | NULL | kenaikan_otomatis |
| nama lengkap | varchar(350) | TIDAK | NULL | ||
| jenis kelamin | varchar(6) | YES | NULL | ||
| tanggal_lahir | tanggal | YES | NULL | ||
| alamat fisik | varchar(255) | YES | NULL | ||
| alamat pos | varchar(255) | YES | NULL | ||
| nomor_kontak | varchar(75) | YES | NULL | ||
| varchar(255) | YES | NULL |
Misalkan persyaratannya adalah untuk
- Ubah nama kolom dari “full_names” menjadi “fullname”
- Ubah ke tipe data char dengan lebar 250.
- Tambahkan batasan NOT NULL
Ketiga perubahan tersebut dilakukan dengan satu pernyataan CHANGE.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Menjalankan perintah tersebut terhadap myflixdb dan kemudian menjalankan skrip SHOW COLUMNS memberikan hasil sebagai berikut.
| Bidang | Tipe | Null | kunci | Default | ekstra |
|---|---|---|---|---|---|
| Nomor keanggotaan | int (11) | TIDAK | PRI | NULL | kenaikan_otomatis |
| nama lengkap | char (250) | TIDAK | NULL | ||
| jenis kelamin | varchar(6) | YES | NULL | ||
| tanggal_lahir | tanggal | YES | NULL | ||
| alamat fisik | varchar(255) | YES | NULL | ||
| alamat pos | varchar(255) | YES | NULL | ||
| nomor_kontak | varchar(75) | YES | NULL | ||
| varchar(255) | YES | NULL |
Kolom tersebut sekarang bernama fullname, berisi char(250), dan menolak nilai NULL.
Ubah kata kunci
Kata kunci MODIFY memungkinkan Anda untuk
- Ubah tipe data kolom.
- Ubah batasan kolom
Pada contoh CHANGE di atas, nama field harus dimasukkan dua kali, meskipun penggantian nama hanya sebagian dari tujuan. Menghilangkan nama kolom dari pernyataan CHANGE akan menghasilkan kesalahan. Jika hanya tipe data dan batasan yang perlu disesuaikan dan namanya harus tetap sama, perintah MODIFY akan menyelesaikan pekerjaan tersebut hanya dengan sekali menyebut kolom tersebut.
Skrip di bawah ini mengubah lebar kolom "fullname" dari 250 menjadi 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Menjalankan perintah tersebut terhadap myflixdb dan kemudian menjalankan skrip SHOW COLUMNS akan memberikan hasil seperti yang ditunjukkan di bawah ini.
| Bidang | Tipe | Null | kunci | Default | ekstra |
|---|---|---|---|---|---|
| Nomor keanggotaan | int (11) | TIDAK | PRI | NULL | kenaikan_otomatis |
| nama lengkap | char (50) | TIDAK | NULL | ||
| jenis kelamin | varchar(6) | YES | NULL | ||
| tanggal_lahir | tanggal | YES | NULL | ||
| alamat fisik | varchar(255) | YES | NULL | ||
| alamat pos | varchar(255) | YES | NULL | ||
| nomor_kontak | varchar(75) | YES | NULL | ||
| varchar(255) | YES | NULL |
⚠️ Peringatan: Penyempitan kolom akan memotong data yang tidak lagi muat. Nama apa pun yang lebih panjang dari 50 karakter akan dipotong oleh pernyataan ini, jadi periksa nilai terpanjang yang ada dengan menggunakan MEMILIH lakukan pengecekan sebelum memperkecil ukuran kolom.
UBAH vs MODIFIKASI vs GANTI NAMA KOLOM
Ketiga kata kunci tersebut saling tumpang tindih, dan memilih kata kunci yang salah adalah sumber kesalahan yang paling umum di bidang ini. Tabel di bawah ini menyajikan ketiganya secara berdampingan.
| Kata kunci | Mengganti nama kolom | Mengubah tipe dan batasan | Nama lama diperlukan | Penggunaan khas |
|---|---|---|---|---|
| Ganti | Ya | Ya | Ya, ditambah nama barunya | Ubah nama dan definisikan ulang dalam satu pernyataan. |
| MEMODIFIKASI | Tidak | Ya | Nama yang diberikan sekali | Memperlebar, mempersempit, atau mengetik ulang kolom |
| GANTI NAMA KOLOM | Ya | Tidak | Ya, ditambah nama barunya | Hanya ganti nama, dari MySQL 8.0 ke depan |
MySQL Versi 8.0 menambahkan opsi keempat untuk kasus paling sederhana, yaitu penggantian nama tanpa pendefinisian ulang sama sekali.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Tipe dan nama sudah ditentukan. Pertanyaan yang tersisa adalah di mana kolom baru ditempatkan dalam tabel, yang dikendalikan oleh kata kunci AFTER.
SETELAH Kata Kunci
Secara default, kolom yang ditambahkan dengan perintah ALTER TABLE akan berada di akhir tabel. Untuk menempatkannya di posisi tertentu, perintah ALTER dikombinasikan dengan kata kunci AFTER.
Skrip di bawah ini menambahkan “date_of_registration” tepat setelah date_of_birth di tabel members.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Menjalankan perintah tersebut terhadap myflixdb dan kemudian menjalankan skrip SHOW COLUMNS akan memberikan hasil seperti yang ditunjukkan di bawah ini.
| Bidang | Tipe | Null | kunci | Default | ekstra |
|---|---|---|---|---|---|
| Nomor keanggotaan | int (11) | TIDAK | PRI | NULL | kenaikan_otomatis |
| nama lengkap | char (50) | TIDAK | NULL | ||
| jenis kelamin | varchar(6) | YES | NULL | ||
| tanggal_lahir | tanggal | YES | NULL | ||
| tanggal_pendaftaran | tanggal | YES | NULL | ||
| alamat fisik | varchar(255) | YES | NULL | ||
| alamat pos | varchar(255) | YES | NULL | ||
| nomor_kontak | varchar(75) | YES | NULL | ||
| varchar(255) | YES | NULL |
Baris yang disorot adalah kolom yang ditambahkan setelah date_of_birth. Kata kunci FIRST bekerja dengan cara yang sama dan memindahkan kolom baru ke bagian paling depan tabel.
