Tutorial Belajar MySQL Part 18: Cara Merubah Tabel MySQL (ALTER TABLE)

Jika pada 5 tutorial MySQL sebelum ini kita telah mempelajari tentang tipe data tabel MySQL dan atribut tipe data tabel MySQL, pada tutorial kali ini akan dibahas tentang bagaimana merubah atau mengubah serta modifikasi tabel MySQL setelah tabel itu dibuat. Query yang akan kita pelajari adalah ALTER TABLE.


Ada kalanya setelah sebuah tabel MySQL dibuat, kita ingin mengubah struktur tabel tersebut. Entah itu berupa penambahan kolom baru, atau penghapusan sebuah kolom untuk digantikan dengan kolom lain.

Query untuk membuat tabel (CREATE TABLE) dan menghapus tabel (DROP TABLE) sudah kita bahas pada Tutorial MySQL: Cara Membuat dan Menghapus Tabel MySQL. Kali ini kita akan menggunakan perintah ALTER TABLE untuk mengubah struktur tabel MySQL.

Agar memudahkan dalam mempelajari query ALTER TABLE, saya akan membuat sebuah tabel sample: daftar_jurusan. Silahkan buka MySQL client, dan gunakan perintah query berikut jika anda ingin membuat tabel yang sama:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mahasiswa          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.11 sec)

mysql> USE mahasiswa;
Database changed

mysql> CREATE TABLE daftar_jurusan ( kode_jurusan CHAR(5), 
nama_jurusan VARCHAR(20),alamat VARCHAR(100),
jumlah_mahasiswa SMALLINT );
Query OK, 0 rows affected (0.05 sec)

mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat           | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | smallint(6)  | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.03 sec)

Query tersebut berisi perintah pembuatan tabel daftar_jurusan pada database mahasiswa. Jika anda belum membuat database, silahkan buat terlebih dahulu seperti pada Tutorial MySQL : Membuat dan Menghapus Database.


Cara Merubah Tipe Data Kolom MySQL

Sesaat setelah membuat tabel daftar_jurusan, saya berfikir untuk merubah tipe data pada kolom jumlah_mahasiswa dari SMALLINT menjadi MEDIUMINT agar dapat menampung lebih banyak nilai. Perubahan ini dapat dilakukan dengan mengunakan query ALTER…MODIFY sebagai berikut:

ALTER TABLE nama_tabel MODIFY nama_kolom tipe_data_baru;

Contoh query Alter…Modify:

mysql> ALTER TABLE daftar_jurusan MODIFY jumlah_mahasiswa MEDIUMINT;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat           | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

Dari query DESC kita dapat melihat bahwa tipe data pada kolom jumlah_mahasiswa telah berubah menjadi MEDIUMINT.


Cara Merubah Nama Kolom Tabel MySQL

Untuk merubah nama kolom pada tabel yang sudah ada, dapat menggunakan perintah ALTER…CHANGE, dengan format query sebagai berikut:

ALTER TABLE nama_tabel CHANGE nama_kolom nama_kolom_baru tipe_data;

Katakan kita ingin merubah nama kolom alamat menjadi alamat_jurusan agar menjadi lebih spesifik, dapat dilakukan dengan query berikut:

Contoh query Alter…Change:

mysql> ALTER TABLE daftar_jurusan CHANGE alamat alamat_jurusan VARCHAR(100);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

Cara Merubah Nama Tabel MySQL

Untuk beberapa kasus tertentu, mungkin saja kita memutuskan untuk merubah nama tabel MySQL. Untuk hal ini MySQL menyediakan query ALTER…RENAME TO dengan format query:

ALTER TABLE nama_tabel_lama RENAME TO nama_tabel_baru;

Kita contohkan merubah tabel daftar_jurusan menjadi tabel_jurusan, maka querynya:

Contoh query Alter…Rename To:

mysql> ALTER TABLE daftar_jurusan RENAME TO tabel_jurusan;
Query OK, 0 rows affected (0.06 sec)

mysql> DESC daftar_jurusan;
ERROR 1146 (42S02): Table 'mahasiswa.daftar_jurusan' doesn't exist

mysql> DESC tabel_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

Dapat kita lihat bahwa setelah merubah nama tabel menjadi tabel_jurusan, tabel daftar_jurusan sudah tidak terdapat lagi di dalam database mahasiswa.

Selain query ALTER…RENAME TO, terdapat juga perintah RENAME untuk merubah nama tabel,format querynya:

RENAME TABLE nama_tabel_lama TO nama_tabel_baru;

Mari kita rubah kembali nama tabel tabel_jurusan menjadi daftar_jurusan:

Contoh query Alter…Rename To:

mysql> RENAME TABLE tabel_jurusan TO daftar_jurusan;
Query OK, 0 rows affected (0.07 sec)

mysql> DESC tabel_jurusan;
ERROR 1146 (42S02): Table 'mahasiswa.tabel_jurusan' doesn't exist

mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

Cara Menambahkan Kolom Baru pada Tabel MySQL

Andaikan beberapa saat kemudian kita berfikir untuk menambahkan kolom yang berisi nama ketua jurusan ke dalam tabel daftar_jurusan, kita dapat saja menghapus tabel dan membuat ulang, namun dengan menggunakan query ALTER…ADD, menambahkan kolom baru dapat dilakukan dengan lebih mudah.

ALTER TABLE nama_tabel ADD nama_kolom_baru tipe_data;

Contoh query menambahkan kolom ketua_jurusan ke dalam tabel daftar_jurusan adalah:

Contoh query Alter…Add:

mysql> ALTER TABLE daftar_jurusan ADD ketua_jurusan VARCHAR(50);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
| ketua_jurusan    | varchar(50)  | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

Cara Menghapus Kolom Tabel MySQL

Kebalikan dari menambahkan kolom baru, query ALTER…DROP dapat digunakan untuk menghapus sebuah kolom dari tabel MySQL.

ALTER TABLE nama_tabel DROP nama_kolom;

Mari kita contohkan dengan menghapus kolom ketua_jurusan dari tabel daftar_jurusan:

Contoh query Alter…Drop:

mysql> ALTER TABLE daftar_jurusan DROP ketua_jurusan;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

Cara Merubah Tipe Data Table (Table Engine) MySQL

MySQL menyediakan beberapa tipe data untuk beberapa keperluan, seperti tipe data (disebut juga dengan engine tabel) MyISAM untuk tabel yang dioptimalisasikan untuk keperluan pembacaan yang lebih sering, atau tipe data InnoDB untuk tabel yang memerlukan transaksi.

Perubahan tipe data dari MyISAM ke InnoDB atau sebaliknya dapat menggunakan perintah ALTER…ENGINE:

ALTER TABLE nama_tabel ENGINE = tipe_tabel;

Dalam MySQL versi 5.5 yang saya gunakan pada tutorial ini, default enginenya adalah InnoDB, hal ini berbeda jika dibandingkan dengan versi MySQL sebelumnya yang menggunakan tipe tabel MyISAM sebagai default.

Pada contoh query dibawah ini kita akan merubah tipe data tabel daftar_jurusan dari InnoDB menjadi MyISAM.

Contoh query Alter…Engine:

mysql> SHOW TABLE STATUS WHERE NAME='daftar_jurusan' \G;

***************************1.row***************************
Name: daftar_jurusan
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 9437184
Auto_increment: NULL
Create_time: 2013-04-14 21:20:02
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
ERROR:
No query specified

mysql> ALTER TABLE daftar_jurusan ENGINE = MyISAM;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW TABLE STATUS WHERE NAME='daftar_jurusan' \G;

***************************1.row***************************
Name: daftar_jurusan
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 0
Avg_row_length: 0
Data_length: 0
Max_data_length: 281474976710655
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2013-04-14 22:43:29
Update_time: 2013-04-14 22:43:29
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>

Query SHOW TABLE STATUS digunakan untuk melihat engine apa yang digunakan dalam sebuah tabel. Penjelasan tentang tipe tabel akan kita pelajari pada tutorial tersendiri.


Dalam tutorial belajar MySQL kali ini kita telah membahas tentang query ALTER TABLE yang digunakan untuk mengubah struktur tabel di dalam MySQL. Dalam tutorial selanjutnya, kita akan mempelajari Cara Menambahkan data (Query INSERT) di dalam MySQL

68 Comments

  1. chandra
    11 Mar 15
    • Andre
      12 Mar 15
  2. Aries Wardhana
    20 Mar 15
    • Andre
      21 Mar 15
      • Amir Mufid
        04 Jul 15
        • Andre
          06 Jul 15
  3. Toni
    05 Jun 15
    • Andre
      05 Jun 15
  4. Cici Wirachmat
    24 Jul 15
    • Andre
      26 Jul 15
  5. rizky
    31 Aug 15
    • Andre
      01 Sep 15
  6. Crow
    12 Oct 15
    • Andre
      13 Oct 15
  7. Arief Putra Utama
    04 Nov 15
  8. supriadi
    07 Nov 15
    • Andre
      08 Nov 15
  9. Anonymous
    09 Nov 15
    • Andre
      09 Nov 15
  10. Faruq
    09 Nov 15
  11. Sarah
    14 Nov 15
    • Andre
      15 Nov 15
  12. arif
    05 Dec 15
  13. Moha
    04 Apr 16
    • Andre
      05 Apr 16
  14. eka
    27 Aug 16
  15. ulfa
    05 Oct 16
    • Andre
      06 Oct 16
  16. ari setiaji
    07 Nov 16
  17. M.Ridho
    09 Nov 16
    • Andre
      10 Nov 16
  18. uno
    14 Nov 16
  19. agus tonny
    21 Nov 16
    • Andre
      21 Nov 16
  20. Crisna
    22 Nov 16
    • Andre
      23 Nov 16
  21. devi
    05 Dec 16
    • Andre
      05 Dec 16
      • devi
        05 Dec 16
  22. Akbar Rizky
    22 Feb 17
    • Andre
      22 Feb 17
  23. Marjan
    23 Feb 17
    • Andre
      24 Feb 17
  24. huhuhu
    31 Aug 17
  25. rana fadhilah
    11 Sep 17
    • Andre
      12 Sep 17
  26. Sukmawati
    24 Oct 17
    • Andre
      25 Oct 17
      • Fendi E R
        23 Dec 19
  27. Anonymous
    05 Nov 17
    • Andre
      07 Nov 17
  28. abdullah
    08 Feb 18
  29. prstyo
    14 Feb 18
    • Andre
      14 Feb 18
  30. Achmad Izaaz
    27 Apr 19
  31. Anonymous
    27 Apr 19
  32. regi ridho
    28 Jun 20
  33. Damir
    03 Sep 20
  34. Anonymous
    15 Nov 20
  35. Fadhli
    22 Nov 20
    • Andre
      22 Nov 20
  36. chandra
    24 Jun 22
  37. Anonymous
    04 Aug 22

Add Comment