Rabu, 07 April 2010

My SQL

MySQL merupakan SQL database server. Jangan bandingan kehandalan MySQL terhadap database Visual dBase, Visual FoxPro, Paradox ataupun MS-Acces karena keempat produk tersebut awalnya memang hanya didisain untuk penanganan database pada aplikasi desktop saja.

Beberapa fitur dari MySQL diantaranya, tabel pada database dapat menampung sampai dengan 50.000.000+ record. Cross-platform antar operating sistem. Kemampuan tanpa batas dalam jumlah user, yang bisa mengakses database dalam waktu bersamaan.


Untuk aplikasi database berbasis internet maka PHP dan MySQL —ditinjau dari berbagai segi— jelas adalah merupakan kombinasi yang sangat sempurna.

Yang menarik, kita dapat mengembangkan aplikasi database PHP + database MySQL pada operating sistem Windows 95/98/2000 —jika sudah rampung — aplikasi tersebut dapat diletakan pada sever yang berbasis Unix ataupun Linux dimana biasanya digunakan Apache Web Server.


Artikel ini akan membahas hal dasar, step-by-step, di fokuskan pada proses pembuatan Database & struktur Table (SQL DDL - data defenition language). Studi kasus yang digunakan adalah pembuatan database rumah sakit serta tabel pasien.

MEMBUAT DATABASE

Sebelum membuat database baru, kita bisa melihat database apa saja yang telah ada. Untuk melihat semua database yang ada pada sistem gunakan perintah SHOW DATABASES;

mysql> SHOW DATABASES;
+------------+
| Database |
+------------+
| dbboro |
| dbfooinfo |
| mysql |
| test |
+------------+
4 row in set (0.01 sec)

Sebagai ilustrasi kita akan membuat database 'dbrumahsakit'. Jika kita berkerja secara lokal maka database yang dibuat akan diletakan oleh MySQL pada folder C:\mysql\data (diasumsikan kita menginstall MySQL ke drive C:\MySQL).

mysql > CREATE DATABASE dbrumahsakit;
Query OK, 1 row affected (0.01 sec)
Setelah selesai proses pembuatan database 'dbrumahsakit', maka database yang ada pada sistem adalah;
mysql> SHOW DATABASES;
+--------------+
| Database |
+--------------+
| dbboro |
| dbfooinfo |
| dbrumahsakit |
| mysql |
| test |
+--------------+
5 row in set (0.01 sec)

Menghapus database bernama 'dbfooinfo'

mysql > DROP DATABASE dbfooinfo;
Query OK, 1 row affected (0.01 sec)
Melihat database yang ada pada sistem;
mysql> SHOW DATABASES;
+--------------+
| Database |
+--------------+
| dbboro |
| dbrumahsakit |
| mysql |
| test |
+--------------+
4 row in set (0.01 sec)

Memilih atau mengaktifkan database 'dbrumahsakit'

mysql > USE dbrumahsakit;
Database changed

MEMBUAT TABEL

Pilih atau aktifkan database sebelum kita bekerja dengan tabel. Jika kita belum memilih atau mengaktifkan sebuah database maka pada saat pembuatan tabel, MySQL akan menampilkan pesan error.

mysql > CREATE TABLE pasien;
ERROR 1046: No Database Selected

Untuk memilih atau mengaktifkan database gunakan perintah.
mysql > USE

Mengaktifkan database 'dbrumahsakit';

mysql > USE dbrumahsakit;
Database changed

Melihat semua tabel yang berada pada database aktif (database terpilih —dipilih dengan perintah USE—).

mysql > SHOW TABLES;
Empty set (0.01 sec)

Karena 'dbrumahsakit' adalah sebuah database baru, maka belum ada tabel didalamnya (empty set).

Kita akan membuat tabel 'pasien' dengan struktur ;
Nama Field Type Size Null Keterangan
nocm
nama
sex
tglahir VARCHAR
VARCHAR
CHAR
DATE 6
30
1 NOT NULL
NULL
NULL
NULL Primary Key
Catatan: nocm adalah no catatan medis, tidak boleh NULL dan bersifat unique.

Perintah berikut akan membuat tabel 'pasien', tanpa disertai pendefenisian primary key;

mysql> CREATE TABLE pasien
-> (nocm VARCHAR (6) NOT NULL,
-> nama VARCHAR (30),
-> sex CHAR (1),
-> tglahir DATE );
Query OK, 0 rows affected (0.01 sec)

Tidak seperti contoh diatas, contoh dibawah ini akan membuat tabel 'pasien' langsung disertai dengan pendefenisian primary key.

Membuat tabel 'pasien', tanpa disertai pendefenisian primary key;

mysql> CREATE TABLE pasien
-> (nocm VARCHAR (6) NOT NULL,
-> nama VARCHAR (30),
-> sex CHAR (1),
-> tglahir DATE,
-> PRIMARY KEY (nama));
Query OK, 0 rows affected (0.01 sec)

Membuat primary key pada tabel 'pasien'.

mysql> ALTER TABLE pasien ADD PRIMARY KEY(nocm);
Query OK, 0 rows affected (0.11 sec)
Records:0 Duplicates: 0 Warnings: 0

Perlu diperhatikan hanya boleh terdapat satu primary key pada sebuah tabel, jika kita pendefenisian primary key pada tabel yang telah memilikinya, maka MyQSL akan menampilkan pesan error. Contoh dibawah ini mengasumsikan kita telah memiliki primary key pada tabel pasien;

mysql> ALTER TABLE pasien ADD PRIMARY KEY(nocm);
Error 1068: Multiple primary key defined

Sebagai alternatif saat pembuatan primary key, kita bisa menggunakan perintah dibawah ini. Perintah ini akan menghapus (DROP) primary key yang mungkin telah ada, kemudian pendefenisian primary key baru;

mysql> ALTER TABLE pasien DROP PRIMARY KEY, ADD PRIMARY KEY(nocm)
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0

Setelah tabel dibuat dengan perintah CREATE TABLE, selanjutnya kita bisa melihat tabel tersebut pada database aktif (dalam hal ini adalah dbrumahsakit).

mysql > SHOW TABLES;
+-------------------------+
| Tables_in_dbrumahsakit |
+-------------------------+
| pasien |
+-------------------------+
1 row in set (0.01 sec)

Melihat struktur dari tabel 'pasien'. Gunakan perintah DESCRIBE untuk melihat struktur tabel.

mysql> DESCRIBE pasien;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| nocm | varchar(4) | | PRI | | |
| nama | varchar(30) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| tglahir | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)

Membuat secondary key.

Diasumsikan kita akan membuat secondary key yang bersifat tidak unique —pada Visual FoxPro dikenal dengan istilah Regular Index— Index yang akan dibuat kita namakan 'nama' dimana expresinya adalah field nama.

mysql> ALTER TABLE pasien ADD INDEX(nama);
Query OK, 0 rows affected (0.11 sec)
Records:0 Duplicates: 0 Warnings: 0

Lihat perubahan struktur tabel :

mysql> DESCRIBE pasien;
+---------+-------------+------+------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+------+---------+-------+
| nocm | varchar(4) | | PRI | | |
| nama | varchar(30) | YES | MUL | NULL | |
| sex | char(1) | YES | | NULL | |
| tglahir | date | YES | | NULL | |
+---------+-------------+------+------+---------+-------+
4 rows in set (0.04 sec)

MEMODIFIKASI STRUKTUR TABEL (RE-STRUKTUR)

Ubah nama field.

Bukan cuma ekonomi saja yang bisa direstuktur dan agaknya memang perlu segara direstruktur —setidaknya ekonomi aku sendiri—, kadang-kadang kita juga perlu merestruktur tabel yang telah dibuat sebelummnya.

Oke, masih menggunakan tabel 'pasien' yang berada pada database 'dbrumahsakit' untuk semua contoh dibawah ini.
Karena dirasa nama field 'sex' kurang begitu tepat, lantaran sex adalah kata kerja, maka kita mencoba mengganti nama field 'sex' tersebut menjadi field 'gender'.

mysql> ALTER TABLE pasien CHANGE sex gender CHAR (1);
Query OK, 0 rows affected (0.51 sec)
Records:0 Duplicates: 0 Warnings: 0

Ubah ukuran (lebar) field.

Ukuran field nama pasien saat ini adalah 30, akan diubah menjadi 40;

mysql> ALTER TABLE pasien CHANGE nama nama VARCHAR(40);
Query OK, 0 rows affected (0.43 sec)
Records:0 Duplicates: 0 Warnings: 0

Ubah jenis (tipe) field.

Tipe field 'gender' saat ini adalah CHAR dengan lebar 1, akan kita ubah menjadi type data interger dengan range terkecil yang tersedia pada MySQL yaitu type TINYINT, dengan asumsi nantinya data yang akan dimasukan bernilai 1 untuk laki-laki, dan nilai 2 untuk perempuan.

Untuk merubah jenis / tipe field dari CHAR ke TINYINT untuk field 'gender' pada tabel pasien adalah;
mysql> ALTER TABLE pasien CHANGE gender gender TINYINT(1);
Query OK, 0 rows affected (0.53 sec)
Records:0 Duplicates: 0 Warnings: 0

Tambah field baru : pada akhir struktur tabel.

Perintah dibawah ini akan menambah field baru diberi nama 'catatan' dengan tipe data MEDIUMTEXT (pada MS Access / FoxPro MEDIUMTEXT dikenal dengan nama MEMO).

Dibawah ini adalah struktur tabel saat ini, sebelum dilakukan penambah field baru pada bagian akhir dari struktur tabel.

mysql> DESCRIBE pasien;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| nocm | varchar(4) | | PRI | | |
| nama | varchar(40) | YES | MUL | NULL | |
| gender | tinyint(1) | YES | | NULL | |
| tglahir | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)

Menambah field baru : pada akhir struktur tabel;

mysql> ALTER TABLE pasien ADD catatan MEDIUMTEXT;
Query OK, 0 rows affected (0.53 sec)
Records:0 Duplicates: 0 Warnings: 0

Setelah melakukan perubahan, maka struktur tabel pasien menjadi;

mysql> DESCRIBE pasien;
+---------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| nocm | varchar(4) | | PRI | | |
| nama | varchar(40)| YES | MUL | NULL | |
| gender | tinyint(1) | YES | | NULL | |
| tglahir | date | YES | | NULL | |
| catatan | mediumtext | YES | | NULL | |
+---------+------------+------+-----+---------+-------+
5 rows in set (0.05 sec)

Tambah field baru : sesudah field tertentu.

Contoh dibawah ini akan menambahkan field baru, dengan nama field 'alamat' diletakan sesudah field 'tglahir'.

mysql> ALTER TABLE pasien ADD alamat VARCHAR (50) AFTER tglahir;
Query OK, 0 rows affected (0.53 sec)
Records:0 Duplicates: 0 Warnings: 0

Struktur tabel pasien menjadi;

mysql> DESCRIBE pasien;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| nocm | varchar(4) | | PRI | | |
| nama | varchar(40) | YES | MUL | NULL | |
| gender | tinyint(1) | YES | | NULL | |
| tglahir | date | YES | | NULL | |
| alamat | varchar(50) | YES | | NULL | |
| catatan | mediumtext | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
6 rows in set (0.04 sec)

Hapus field tertentu.

Contoh dibawah ini akan menghapus (DROP) field 'alamat';

mysql> ALTER TABLE pasien DROP alamat;
Query OK, 0 rows affected (0.53 sec)
Records:0 Duplicates: 0 Warnings: 0

Hapus primary key.

mysql> ALTER TABLE pasien DROP PRIMARY KEY;
Query OK, 0 rows affected (0.12 sec)
Records:0 Duplicates: 0 Warnings: 0

Hapus secondary key (regular index).

Contoh dibawah ini akan menghapus (DROP) index 'nama';

mysql> ALTER TABLE pasien DROP INDEX nama;
Query OK, 0 rows affected (0.22 sec)
Records:0 Duplicates: 0 Warnings: 0

Tidak ada komentar: