Blogroll

Rabu, 26 November 2014


Perintah ALTER TABLE pada MySql
by pusing85 · January 29, 2014
Ada saatnya dimana kita harus mengganti struktur table yang pernah kita buat. Untungnya MySql mendukung/menyediakan perintah untuk melakukan kegiatan tersebut. Perintahnya adalah ALTER TABLE. Penggunaanya sedikit sulit. Mudah-mudahan penjelasan saya bisa menambah pemahaman supaya lebih mudah untuk dipelajari. Bentuk umum perintahnya adalah sebagai berikut :
ALTER TABLE nama_tabel alter_options;
dimana :
  • ALTER TABLE merupakan perintah dasar untuk mengubah tabel.
  • nama_tabel merupakan nama tabel yang akan diubah strukturnya.
  • alter_options merupakan pilihan perubahan tabel. Contoh Option yang bisa digunakan adalah sebagai berikut:
Nama Option
Fungsi Option
ADD nama_field/kolom_baru
untuk menambahkan field/kolom baru.
ADD PRIMARY KEY (nama_field/kolom)
untuk menambahkan primary key pada tabel
CHANGE nama_field_lama nama_field_baru_definisi_field_baru
untuk mengubah nama_field_lama menjadi nama_field_baru_definisi_field_baru
definisi_field_baru artinya adalah type data.
MODIFY nama_field type_data
untuk mengubah type_data suatu field
DROP nama_field
untuk menghapus field nama_field
RENAME TO nama_tabel_baru
untuk mengganti nama tabel
  • Sekarang saatnya kita bahas satu persatu supaya bisa paham. Sebelumnya, buatlah sebuat table terlebih dahulu untuk percobaan. Untuk mempelajari CREATE TABLE lebih lanjut bisa dilihat di sini.
    Misal di sini kita buat table sederhana dengan nama peserta dan strukturnya sebagai berikut :
Nama Kolom
Type data
Panjang Data
Keterangan
NIP
integer
5
o    bukan primary key
o    bukan auto increment
nama
varchar
30

  • Perintahnya adalah sebagai berikut :
·         CREATE TABLE peserta (
·         NIP int(5) NOT NULL,
·         nama varchar(30) NOT NULL);
  • *sengaja tidak di beri “primary key” dan “auto increment”
  • seharusnya jika diberi perintah
·         DESC peserta;
  • maka hasilnya adalah sebagai berikut :
·         +-------+-------------+------+-----+---------+-------+
·         | Field | Type        | Null | Key | Default | Extra |
·         +-------+-------------+------+-----+---------+-------+
·         | NIP   | int(5)      | NO   |     | NULL    |       |
·         | nama  | varchar(30) | NO   |     | NULL    |       |
·         +-------+-------------+------+-----+---------+-------+
·         2 rows in set (0.01 sec)
Tambah Field/Kolom Baru.
Misal kita ingin menambah Field/Kolom alamat pada table di atas, maka perintahnya adalah :
ALTER TABLE peserta ADD alamat varchar(30);
Setelah itu, ketik lagi perintah “DESC peserta;”, seharusnya hasilnya adalah sebagai berikut:
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| NIP    | int(5)      | NO   |     | NULL    |       |
| nama   | varchar(30) | NO   |     | NULL    |       |
| alamat | varchar(30) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
Field/Kolom alamat sudah terbentuk. Timbul pertanyaan bagaimana menambah table telepon di tengah-tengah antara kolom nama dan alamat. Maka perintahnya adalah :
ALTER TABLE peserta ADD telepon varchar(30) AFTER nama;
Kita bisa menggunkan kata AFTER untuk membantu menambahkan kolom sesuai dengan yang anda inginkan. Kata BEFORE tidak bisa digunakan. Hasilnya adalah sebagai berikut setelah ketik perintah ” DESC peserta; “
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| NIP     | int(5)      | NO   |     | NULL    |       |
| nama    | varchar(30) | NO   |     | NULL    |       |
| telepon | varchar(30) | YES  |     | NULL    |       |
| alamat  | varchar(30) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
Terlihat bahwa kolom telepon sudah berhasil ditambahkan.
Tambah/hapus Primary Key
Untuk menambah Primary Key pada table, perintahnya adalah:
ALTER TABLE nama_table ADD PRIMARY KEY (nama_kolom);
Contoh dan hasilnya adalah sebagai berikut :
mysql> ALTER TABLE peserta ADD PRIMARY KEY (NIP);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc peserta;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| NIP     | int(5)      | NO   | PRI | NULL    |       |
| nama    | varchar(30) | NO   |     | NULL    |       |
| telepon | varchar(30) | YES  |     | NULL    |       |
| alamat  | varchar(30) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
Untuk hapus Primary Key pada table, perintahnya adalah:
ALTER TABLE nama_table DROP PRIMARY KEY;
Contoh dan hasilnya adalah sebagai berikut :
mysql> ALTER TABLE peserta DROP PRIMARY KEY;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc peserta;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| NIP     | int(5)      | NO   |     | NULL    |       |
| nama    | varchar(30) | NO   |     | NULL    |       |
| telepon | varchar(30) | YES  |     | NULL    |       |
| alamat  | varchar(30) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
Hapus Field/Kolom
Bentuk perintahnya adalah sebagai berikut :
ALTER TABLE nama_tabel DROP COLUMN nama_kolom;
Misalnya kita ingin menghapus kolom telepon, maka contohnya bisa dilihat seperti di bawah ini:
mysql> desc peserta;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| NIP     | int(5)      | NO   |     | NULL    |       |
| nama    | varchar(30) | NO   |     | NULL    |       |
| telepon | varchar(30) | YES  |     | NULL    |       |
| alamat  | varchar(30) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> ALTER TABLE peserta DROP COLUMN telepon;
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc peserta;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| NIP    | int(5)      | NO   |     | NULL    |       |
| nama   | varchar(30) | NO   |     | NULL    |       |
| alamat | varchar(30) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
Ubah Nama Field/Kolom
Mengubah nama kolom/field dapat menggunakan option change. Sebelumnya, kita buat kolom baru dulu bernama jenis_kelamin dengan jenis data “char” yang berjumlah 1 dan diletakkan setelah kolom alamat.
mysql> alter table peserta add jenis_kelamin char(1) after alamat;
Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc peserta;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| NIP           | int(5)      | NO   |     | NULL    |       |
| nama          | varchar(30) | NO   |     | NULL    |       |
| alamat        | varchar(30) | YES  |     | NULL    |       |
| jenis_kelamin | char(1)     | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
4 rows in set (0.07 sec)
Setelah berhasil, kita rubah kolom jenis_kelamin tersebut menjadi sex.Berikut ini contoh perintahnya:
mysql> alter table peserta change jenis_kelamin sex char(1);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc peserta;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| NIP    | int(5)      | NO   |     | NULL    |       |
| nama   | varchar(30) | NO   |     | NULL    |       |
| alamat | varchar(30) | YES  |     | NULL    |       |
| sex    | char(1)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
Ubah Type Data Field/Kolom
Tadi kita sudah membuat kolom/field baru bernama sex. Kita ingin membuat kolom/field tersebut hanya terisi oleh karakter “L” untuk laki-laki dan “P” untuk perempuan. Jadi kita merubah dari type data char(1) menjadi enum (‘L’,’P’). Kita bisa mengubah hal tersebut dengan perintah MODIFY. Berikut ini adalah contohnya :
mysql> desc peserta;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| NIP    | int(5)      | NO   |     | NULL    |       |
| nama   | varchar(30) | NO   |     | NULL    |       |
| alamat | varchar(30) | YES  |     | NULL    |       |
| sex    | char(1)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> alter table peserta modify sex enum('L','P') not null;
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc peserta;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| NIP    | int(5)        | NO   |     | NULL    |       |
| nama   | varchar(30)   | NO   |     | NULL    |       |
| alamat | varchar(30)   | YES  |     | NULL    |       |
| sex    | enum('L','P') | NO   |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
Skenario selanjutnya adalah : kita ingin merubah NIP menjadi auto_increment. Hal tersebut bisa kita lakukan dengan option modify dengan catatan yang di-auto_increment-kan harus sebagai primary key. Langkahnya ada 2 tahap, yaitu :
    • Ubah kolom NIP menjadi primary key
mysql> desc peserta;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| NIP    | int(5)        | NO   |     | NULL    |       |
| nama   | varchar(30)   | NO   |     | NULL    |       |
| alamat | varchar(30)   | YES  |     | NULL    |       |
| sex    | enum('L','P') | NO   |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> alter table peserta add primary key (NIP);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc peserta;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| NIP    | int(5)        | NO   | PRI | NULL    |       |
| nama   | varchar(30)   | NO   |     | NULL    |       |
| alamat | varchar(30)   | YES  |     | NULL    |       |
| sex    | enum('L','P') | NO   |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
    • Seting kolom NIP menjadi auto_increment
mysql> alter table peserta modify NIP int(5) not null auto_increment;
Query OK, 1 row affected (0.05 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> desc peserta;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| NIP    | int(5)        | NO   | PRI | NULL    | auto_increment |
| nama   | varchar(30)   | NO   |     | NULL    |                |
| alamat | varchar(30)   | YES  |     | NULL    |                |
| sex    | enum('L','P') | NO   |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
Misalnya kita ingin men-SET auto_increment menjadi 11111 sebagai angka awal, karena kita sudah set auto_increment sebelumnya, kita bisa melakukannya sebagai berikut :
mysql> alter table peserta auto_increment=11111;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into peserta values ('','testing','klaten bersinar','L');
Query OK, 1 row affected, 1 warning (0.05 sec)

mysql> select * from peserta;
+-------+---------+-----------------+-----+
| NIP   | nama    | alamat          | sex |
+-------+---------+-----------------+-----+
| 11111 | testing | klaten bersinar | L   |
+-------+---------+-----------------+-----+
1 row in set (0.00 sec)
Karena sudah auto_increment, maka kolom NIP bisa dikosongkan dan akan terisi otomatis sesuai angka yang kita SET sebelumnya.
Ganti Nama Tabel
mengganti nama table bisa memakai perintah alter table juga lho.. Syntax-nya adalah sebagai berikut ini :
ALTER TABLE nama_table_lama RENAME TO nama_table_baru;
berikut ini contoh before-afternya
mysql> show tables;
+----------------+
| Tables_in_coba |
+----------------+
| peserta        |
+----------------+
1 row in set (0.00 sec)

mysql> alter table peserta rename to percobaan;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+----------------+
| Tables_in_coba |
+----------------+
| percobaan      |
+----------------+
1 row in set (0.00 sec)

ads

Ditulis Oleh : Muhammad ilham Hari: 17.58 Kategori:

0 komentar: