9. Merubah Tabel

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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