Dasar Teori
1. Membuat user baru disertasi password pada mysql
Sering ketika kita ingin menginstall suatu aplikasi
berbasis LAMP (Linux-Apache-MySQL-PHP), kita harus membuat user MySQL dan
databasenya. Cara paling mudah adalah membuat username MySQL dengan opsi GRANT
PRIVILEGES, agar tidak ada masalah ketika akan mengakses ke database yang kita
buat.Hari ini saya akan tunjukan langkah-langkah untuk membuat User pada
Database MySQL dengan nama Rizal_Mutaqin
Berikut langkah-langkah detailnya semoga dapat
membantu :
1.
Masuk ke MySQL sebagai root
$ mysql -u root -p
$ mysql -u root -p
2.
Setelah masuk console MySQL, buat user baru dengan
command berikut.
mysql> CREATE USER ‘Rizal_Mutaqin’@'localhost’ IDENTIFIED BY ‘13650109’;
Query OK, 0 rows affected (0.00 sec)
Perintah diatas akan membuat user baru dengan nama: “Rizal_Mutaqin” dengan password “13650109” dimana aksesnya hanya dari localhost
mysql> CREATE USER ‘Rizal_Mutaqin’@'localhost’ IDENTIFIED BY ‘13650109’;
Query OK, 0 rows affected (0.00 sec)
Perintah diatas akan membuat user baru dengan nama: “Rizal_Mutaqin” dengan password “13650109” dimana aksesnya hanya dari localhost
3.
Kemudian Set privileges-nya menjadi GRANT.
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘Rizal_Mutaqin’@'localhost’ WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘Rizal_Mutaqin’@'localhost’ WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
4.
Keterangan :
1.
GRANT ALL PRIVILEGES ON *.*
: Pada perintah ini kita memeberikan Hak penuh kepada user untuk melakukan
apapun pada database
2.
TO ‘aufklarung’@'localhost’
: Perintah ini menyatakan User dapat menggunakan haknya apabila terhubung
melalui loalhost
3.
WITH GRANT
OPTION;
: Perintah ini menyatakan User dapat memberikan
haknya kepada user lainnya.
Atau kita dapat juga membuat user dengan database
dan Set Privileges tertentu.
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON db_test.* TO ‘Rizal_Mutaqin’@'localhost’ ;
Query OK, 0 rows affected (0.00 sec)
pada perintah diatas saya membuatkan user dengan nama Rizal_Mutaqin dan memberikan hak SELECT,INSERT,UPDATE,DELETE,CREATE hanya pada database db_test.
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON db_test.* TO ‘Rizal_Mutaqin’@'localhost’ ;
Query OK, 0 rows affected (0.00 sec)
pada perintah diatas saya membuatkan user dengan nama Rizal_Mutaqin dan memberikan hak SELECT,INSERT,UPDATE,DELETE,CREATE hanya pada database db_test.
5.
Selesai! Username siap dipakai. Keluar dari
MySQL dengan perintah exit.
mysql>exit
mysql>exit
Untuk lebih meyakinkan cobalah buat database dengan
masuk kedalam user yang telah di buat.
$ mysql -u Rizal_Mutaqin -p
enter password : (isikan password yang telah dibuat
mysql> create database forum;
Query OK, 1 row affected (0.00 sec)
$ mysql -u Rizal_Mutaqin -p
enter password : (isikan password yang telah dibuat
mysql> create database forum;
Query OK, 1 row affected (0.00 sec)
Sumber :
http://catatanzidni.blogspot.com/2013/03/membuat-user-pada-database-mysql.html
http://www.akusukses.com/php/cara-membuat-username-password-root-mysql-di-phpmyadmin/
2. Membuat Database pada
XAMPP
Setelah kita belajar cara menginstal XAMPP dan menjalankannya, sekarang saatnya kita belajar
bagaimana membuat database di XAMPP dan cara install WordPress di
localhost. Artinya kita menginstal WordPress di komputer kita sendiri atau
menginstal WordPress secara offline. Diasumsikan Anda sudah bisa menjalankan
aplikasi XAMPP. Sehingga sekarang komputer Anda sudah bisa dijadikan server.
Oia, jangan lupa untuk memastikan bahwa aplikasi XAMPP bisa berjalan dengan
baik ya. Cek kembali dengan mengetik http://localhost/xampp di
browser, lalu cek status. Detilnya bisa dilihat pada gambar di bawah ini.
Membuat Database dan User di XAMPP
Sebelum kita menginstal WordPress, kita harus
membuat database dan user terlebih dahulu. Ini harus kita lakukan
karena WordPress merupakan aplikasi website yang membutuhkan database untuk
menyimpan data-data yang kita gunakan.
1.
Pertama-tama kita harus masuk ke phpmyadmin di
XAMPP. Ketik di browser alamat http://localhost/phpmyadmin sehingga
muncul tampilan seperti ini..
2.
Pada menu Database, silahkan
masukkan nama database yang diinginkan, kemudian klik Create.
Ingat-ingat nama database tersebut ya, karena kita akan menggunakannya nanti.
Jika perlu, tuliskan di aplikasi notepad supaya mudah bagi kita untuk
mengingatnya.
NB: Di sini saya menggunakan nama database “blogku“.
NB: Di sini saya menggunakan nama database “blogku“.
3.
Sekarang saatnya kita menambahkan nama user untuk
database yang baru saja kita buat. Silahkan masuk ke database yang sudah
dibuat, Anda bisa menemukannya di bagian sebelah kiri. Begitu masuk, lihat
menu Privileges. Kemudian klik Add user.
4.
Begitu Anda klik Add User maka akan
muncul form pembuatan user baru. Isikan username, Anda bisa
mengisikannya dengan nama apapun teserah Anda, yang penting Anda hafal.
Kemudian isikan juga host, gunakan use text
field saja, lalu isikan dengan localhost. Selanjutnya
isikan password 2 kali dan harus sama. Terakhir, centang grant
all privileges on database.
5.
Eits, tunggu dulu, belum selesai. Scroll ke bawah,
dan Anda akan menemukan opsi Global Privileges guna memberikan hak
akses kepada user untuk mengelola semua database, klik Check All saja.
Setelah itu, pencet tombol Add User.
Sumber :
http://webhostmu.com/membuat-database-dengan-xampp/
http://www.rajaputramedia.com/article/article-programing/cara-membuat-database-dan-table-mysql-menggunakan-phpmyadmin.php
3. Menghapus database
pada mysql
Perintah DROP biasa digunakan untuk
menghapus database,table,kolom/field. Perintah DROP juga bisa
di gabungkan dengan perintah lainnya, misalnya digabungkan dengan perintah ALTER
TABLE yang nantinya akan bisa menghapus kolom atau sebuah primary key.
Sumber :
http://catatanku.web.id/catatan/perintah-drop-pada-mysql/
http://root93.blogspot.com/2013/03/cara-menghapus-table-atau-database.html
4. Query Buffer
Jenis Query pada MySql
MySql query adalah perintah atau instruksi yang dapat digunakan untuk mengelola
database atau tabel dalam database mysql. Query lebih dikenal dengan sebutan
SQL (Structured Query Language) yang artinya adalah sebuah bahasa yang
digunakan untuk mengakses data dalam basis data relasional.
Bahasa ini merupakan bahasa standar yang digunakan dalam mengelola basis data atau database. Banyak database modern seperti mysql, sql server, oracle menggunakan bahasa SQL. Secara umum ada 3 jenis query pada mysql yaitu DDL, DML dan DCL.
Mari kita bahas satu persatu.
1. Query DDL (Data Definition Language).
DDL adalah kumpulan perintah SQL yang digunakan untuk membuat (CREATE), mengubah (ALTER, RENAME) dan menghapus (DROP) struktur dan definisi dari objek-objek database seperti database, tabel, view, index, function, trigger dan field.
Query Jenis DDL, antara lain :
a. CREATE
1) CREATE DATABASE digunakan untuk membuat database baru.
Contoh :
a) Syntax untuk membuat Database
Create database nama_database
b) Syntax untuk membuat table
Create table namatabel (namakolom1 typedata1,namakolom2 typedata2, namakolom3 typedata3
Type data dapat berupa char(), int, numerik dan sebagainya sesuai dengan nama kolom.
2) CREATE VIEW merupakan bentuk alternatif penyajian data dari satu tabelatau lebih, beberapa tujuan membuat view adalah meningkatkan keamanan data serta penyederhanaan bagi para pengguna agar tidak mengulang query yang sama.
Contoh :
Create view namaview (kolom1, kolom2, ...) as select statement from namatabel [with check option]
Keterangan :
namaview : nama view yang dibuat
Column : nama atribut untuk view
statement : atribut yang dipilih dari tabel database
namatabel : nama tabel yang ada pada basis data
3) CREATE FUNCTION digunakan untuk membuat function dalam database
Contoh :
create function nama_function (kolom1 varchar(15), kolom2 varchar(15))
4) CREATE INDEX digunakan untuk membuat index
Contoh :
- create [unique] index namaindex on namatabel (namakolom)
- CREATE INDEX id_index ON NamaTable(kolomtabel_index)
5) CREATE PROCEDURE digunakan untuk membuat prosedure dalama database
Contoh :
CREATE PROCEDURE nama_procedure (parameter_procedure())routine_body
6) CREATE TRIGGER digunakan untuk membuat trigger (perintah sql yang dikerjakan otomatis pada event tertentu)
Contoh :
- CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name
FOR EACH ROW trigger_body
- CREATE TRIGGER NamaTrigger BEFORE UPDATE ON NamaTable
Keterangan :
trigger_name : nama trigger.
trigger_time : kapan kita mengeksekusi trigger,
apakah sebelum atau sesudah perubahan pada row data table.
Jadi pilihannya adalah AFTER atau BEFORE.
trigger_event : merupakan event atau peristiwa yang
menyebabkan trigger dilakukan. Pilihan event tersebut
adalah INSERT, UPDATE, DELETE.
tbl_name : nama table.
trigger_body : statement-statement perintah SQL yang akan
dilakukan. Jika perintahnya lebih dari satu maka gunakan
dalam blok statement BEGIN ... END.
Jika DEFINER dispesifikasikan maka kita memutuskan trigger tersebut dijalankan
hanya oleh user tertentu (dalam format penulisan user@host).
Jika tidak dispesifikasikan, maka user yang melakukan perubahan
(CURRENT_USER) adalah pilihan default.
Sesuai namanya, OLD digunakan untuk referensi sebelum perubahan dan NEW untuk referensi sesudah perubahan.
b. ALTER, RENAME
1) ALTER DATABASE digunakan untuk mengubah pengaturan database
Contoh :
ALTER DATABASE nama_database CHARACTER SET = 'binary';
2) ALTER FUNCTION digunakan untuk mengubah function
Contoh :
CREATE FUNCTION nama_function(str CHAR(20))
3) ALTER PROCEDURE digunakan untuk mengubah procedure
Contoh :
ALTER PROCEDURE Sproc SQL SECURITY DEFINER;
4) ALTER TABLE digunakan untuk mengubah susunan dan pengaturan table
Contoh :
- Alter table namatabel Modify (namakolom typekolom) Untuk mengganti type kolom dan nama kolom.
- Alter table namatabel add (namakolom type kolom[[before, namakolom]]) menambah kolom.
- Alter table namatabel drop (namakolom typekolom) untuk menghapus kolom pada sebuah tabel.
5) ALTER VIEW digunakan untuk mengubah pengaturan laporan
Contoh :
- ALTER VIEW Nama_View(kolom1, kolom2, kolom3) AS SELECT kolom1, kolom2, kolom3 FROM Nama_Table
where kondisi
- View Nama_View
6) RENAME TABLE digunakan untuk mengubah nama table
Contoh :
ALTER TABLE nama_table_lama RENAME nama_table_lama
c. DROP
1) DROP DATABASE digunakan untuk menghapus database
Contoh :
DROP database NamaDatabase
2) DROP FUNCTION digunakan untuk menghapus function
Contoh :
DROP FUNCTION NamaDatabase.NamaFunction
3) DROP INDEX digunakan untuk menghapus index
Contoh :
DROP INDEX indexname ON tablename
4) DROP PROCEDURE digunakan untuk procedure
Contoh :
DROP procedure NamaDatabase.NamaProcedure
5) DROP TABLE digunakan untuk menghapus table
Contoh :
DROP table NamaTable
6) DROP TRIGGER digunakan untuk menghapus trigger
Contoh :
DROP TRIGGER NamaTrigger
7) DROP VIEW digunakan untuk menghapus format laporan
Contoh :
DROP view NamaView
2. Query DML (Data Manipulation Language)
DML adalah kependekan dari Data Manipulation Language. DML adalah kumpulan perintah SQL yang berhubungan dengan proses mengolah dan memanipulasi data dalam table. DML tidak terkait dengan perubahan struktur dan definisi tipe data dari objek database.
Query Jenis DML
a. SELECT digunakan untuk menampilkan nilai atau record yang di pilih
Contoh :
- Select namakolom from namatabel
* = digunakan untuk pilihan semua kolom
- Select * from namatabel
b. INSERT digunakan untuk menambah nilai pada suatu table
Contoh :
insert into namatabel values (‘value1’, ‘value2’,’ ...’)
keterangan : value adalah nilai yang ingin dimasukkan ke dalam kolom
c. UPDATE digunakan untuk mengubah data yang sudah ada
Contoh :
Update namatabel SET namakolom = recordbaru where kondisi
keterangan recordbaru di ubah sesuai dengan nama nilai baru yang akan di ubah
d. DELETE digunakan untuk menghapus data
Contoh :
DELETE namakolom from namatabel where kondisi
Variasi penggunaan jenis query DML lebih banyak karena berhubungan dengan data dalam satu atau banyak tabel database. Setiap kasus manipulasi data akan menciptakan susunan baru dengan perintah dasar yang sama.
3. Query DCL (Data Control Language)
Data Control Language (DCL) merupakan sub bahasa SQL yang digunakan untuk melakukan pengontrolan data dan server databasenya.
a. GRANT
Perintah ini digunakan untuk memberikan hak / izin akses oleh administrator (pemilik utama) server kepada user (pengguna biasa). Hak akses tersebut berupa hak membuat (CREATE), mengambil (SELECT), menghapus (DELETE), mengubah (UPDATE) dan hak khusus berkenaan dengan sistem databasenya.
Contoh :
- Grant privilages on namatabel to namapengguna
- GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED BY 'password'
artinya memberikan izin akses kepada namapengguna
b. REVOKE
yaitu untuk mencabut izin akses kepada pengguna yang telah di beri izin akses
Contoh :
REVOKE privileges ON namatabel from namapengguna
Bahasa ini merupakan bahasa standar yang digunakan dalam mengelola basis data atau database. Banyak database modern seperti mysql, sql server, oracle menggunakan bahasa SQL. Secara umum ada 3 jenis query pada mysql yaitu DDL, DML dan DCL.
Mari kita bahas satu persatu.
1. Query DDL (Data Definition Language).
DDL adalah kumpulan perintah SQL yang digunakan untuk membuat (CREATE), mengubah (ALTER, RENAME) dan menghapus (DROP) struktur dan definisi dari objek-objek database seperti database, tabel, view, index, function, trigger dan field.
Query Jenis DDL, antara lain :
a. CREATE
1) CREATE DATABASE digunakan untuk membuat database baru.
Contoh :
a) Syntax untuk membuat Database
Create database nama_database
b) Syntax untuk membuat table
Create table namatabel (namakolom1 typedata1,namakolom2 typedata2, namakolom3 typedata3
Type data dapat berupa char(), int, numerik dan sebagainya sesuai dengan nama kolom.
2) CREATE VIEW merupakan bentuk alternatif penyajian data dari satu tabelatau lebih, beberapa tujuan membuat view adalah meningkatkan keamanan data serta penyederhanaan bagi para pengguna agar tidak mengulang query yang sama.
Contoh :
Create view namaview (kolom1, kolom2, ...) as select statement from namatabel [with check option]
Keterangan :
namaview : nama view yang dibuat
Column : nama atribut untuk view
statement : atribut yang dipilih dari tabel database
namatabel : nama tabel yang ada pada basis data
3) CREATE FUNCTION digunakan untuk membuat function dalam database
Contoh :
create function nama_function (kolom1 varchar(15), kolom2 varchar(15))
4) CREATE INDEX digunakan untuk membuat index
Contoh :
- create [unique] index namaindex on namatabel (namakolom)
- CREATE INDEX id_index ON NamaTable(kolomtabel_index)
5) CREATE PROCEDURE digunakan untuk membuat prosedure dalama database
Contoh :
CREATE PROCEDURE nama_procedure (parameter_procedure())routine_body
6) CREATE TRIGGER digunakan untuk membuat trigger (perintah sql yang dikerjakan otomatis pada event tertentu)
Contoh :
- CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name
FOR EACH ROW trigger_body
- CREATE TRIGGER NamaTrigger BEFORE UPDATE ON NamaTable
Keterangan :
trigger_name : nama trigger.
trigger_time : kapan kita mengeksekusi trigger,
apakah sebelum atau sesudah perubahan pada row data table.
Jadi pilihannya adalah AFTER atau BEFORE.
trigger_event : merupakan event atau peristiwa yang
menyebabkan trigger dilakukan. Pilihan event tersebut
adalah INSERT, UPDATE, DELETE.
tbl_name : nama table.
trigger_body : statement-statement perintah SQL yang akan
dilakukan. Jika perintahnya lebih dari satu maka gunakan
dalam blok statement BEGIN ... END.
Jika DEFINER dispesifikasikan maka kita memutuskan trigger tersebut dijalankan
hanya oleh user tertentu (dalam format penulisan user@host).
Jika tidak dispesifikasikan, maka user yang melakukan perubahan
(CURRENT_USER) adalah pilihan default.
Sesuai namanya, OLD digunakan untuk referensi sebelum perubahan dan NEW untuk referensi sesudah perubahan.
b. ALTER, RENAME
1) ALTER DATABASE digunakan untuk mengubah pengaturan database
Contoh :
ALTER DATABASE nama_database CHARACTER SET = 'binary';
2) ALTER FUNCTION digunakan untuk mengubah function
Contoh :
CREATE FUNCTION nama_function(str CHAR(20))
3) ALTER PROCEDURE digunakan untuk mengubah procedure
Contoh :
ALTER PROCEDURE Sproc SQL SECURITY DEFINER;
4) ALTER TABLE digunakan untuk mengubah susunan dan pengaturan table
Contoh :
- Alter table namatabel Modify (namakolom typekolom) Untuk mengganti type kolom dan nama kolom.
- Alter table namatabel add (namakolom type kolom[[before, namakolom]]) menambah kolom.
- Alter table namatabel drop (namakolom typekolom) untuk menghapus kolom pada sebuah tabel.
5) ALTER VIEW digunakan untuk mengubah pengaturan laporan
Contoh :
- ALTER VIEW Nama_View(kolom1, kolom2, kolom3) AS SELECT kolom1, kolom2, kolom3 FROM Nama_Table
where kondisi
- View Nama_View
6) RENAME TABLE digunakan untuk mengubah nama table
Contoh :
ALTER TABLE nama_table_lama RENAME nama_table_lama
c. DROP
1) DROP DATABASE digunakan untuk menghapus database
Contoh :
DROP database NamaDatabase
2) DROP FUNCTION digunakan untuk menghapus function
Contoh :
DROP FUNCTION NamaDatabase.NamaFunction
3) DROP INDEX digunakan untuk menghapus index
Contoh :
DROP INDEX indexname ON tablename
4) DROP PROCEDURE digunakan untuk procedure
Contoh :
DROP procedure NamaDatabase.NamaProcedure
5) DROP TABLE digunakan untuk menghapus table
Contoh :
DROP table NamaTable
6) DROP TRIGGER digunakan untuk menghapus trigger
Contoh :
DROP TRIGGER NamaTrigger
7) DROP VIEW digunakan untuk menghapus format laporan
Contoh :
DROP view NamaView
2. Query DML (Data Manipulation Language)
DML adalah kependekan dari Data Manipulation Language. DML adalah kumpulan perintah SQL yang berhubungan dengan proses mengolah dan memanipulasi data dalam table. DML tidak terkait dengan perubahan struktur dan definisi tipe data dari objek database.
Query Jenis DML
a. SELECT digunakan untuk menampilkan nilai atau record yang di pilih
Contoh :
- Select namakolom from namatabel
* = digunakan untuk pilihan semua kolom
- Select * from namatabel
b. INSERT digunakan untuk menambah nilai pada suatu table
Contoh :
insert into namatabel values (‘value1’, ‘value2’,’ ...’)
keterangan : value adalah nilai yang ingin dimasukkan ke dalam kolom
c. UPDATE digunakan untuk mengubah data yang sudah ada
Contoh :
Update namatabel SET namakolom = recordbaru where kondisi
keterangan recordbaru di ubah sesuai dengan nama nilai baru yang akan di ubah
d. DELETE digunakan untuk menghapus data
Contoh :
DELETE namakolom from namatabel where kondisi
Variasi penggunaan jenis query DML lebih banyak karena berhubungan dengan data dalam satu atau banyak tabel database. Setiap kasus manipulasi data akan menciptakan susunan baru dengan perintah dasar yang sama.
3. Query DCL (Data Control Language)
Data Control Language (DCL) merupakan sub bahasa SQL yang digunakan untuk melakukan pengontrolan data dan server databasenya.
a. GRANT
Perintah ini digunakan untuk memberikan hak / izin akses oleh administrator (pemilik utama) server kepada user (pengguna biasa). Hak akses tersebut berupa hak membuat (CREATE), mengambil (SELECT), menghapus (DELETE), mengubah (UPDATE) dan hak khusus berkenaan dengan sistem databasenya.
Contoh :
- Grant privilages on namatabel to namapengguna
- GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED BY 'password'
artinya memberikan izin akses kepada namapengguna
b. REVOKE
yaitu untuk mencabut izin akses kepada pengguna yang telah di beri izin akses
Contoh :
REVOKE privileges ON namatabel from namapengguna
Sumber :
http://masbenpro.blogspot.com/2013/06/jenis-query-pada-mysql.html
http://asepawaludinfajari.wordpress.com/2011/09/12/query-pada-mysql/
Hasil Praktikum
1. Buatlah user baru dengan nama user nama depan pribadi mahasiswa dan password menggunakan nim masing – masing.
2. Buatlah 2 database dengan nama : namaNIM masing-masing praktikan. Misal : “aziz05550057” dan nama database : contoh1.
3. Hapuslah database contoh1.
4. Jawablah soal matematika berikut menggunakan query buffer 9 - 5 + 5 x 0 + 3 : 2 = .... ?
5. Jawablah soal matematika berikut menggunakan query buffer 5%2=...?
6. Tampilkan qurey untuk memperoleh tanggal dan jam sekarang?
7. Tampilkan selisih hari dalam untuk pengurangan waktu sekarang dengan waktu lahir praktikan?
Tugas Rumah
Ø Mengidentifikasi
Entitas
o
Atlet Taekwondo dan Dojang/Tempat
Latihan
Ø Menentukan
Atribut Atlet Taekwondo
o
Nomor Induk
o
Nama
o
Alamat
Ø Menentukan
Atribut Dojang/Tempat Latihan
o
Kode Dojang
o
Nama
o
Lokasi
Ø Menentukan
Primary Key setiap Entitas
o
Atlet Taekwondo : Nomor Induk
o
Dojang/Tempat Latihan : Kode Dojang
Ø Menentukan
Entitas Relasi
o
one-to-one : Sebuah entitas pada A
berhubungan dengan entitas B paling banyak satu, contoh diatas relasi Atlet
Taekwondo dan Dojang dimana setiap Atlet hanya berlatih di 1 Dojang.
o
one-to-many : Sebuah entitas pada A
berhubungan dengan entitas B lebih dari satu, contoh diatas adalah 1 Dojang
memiliki banyak Atlet Taekwondo.
Evaluasi Perbandingan 2 DBMS
PostgreSQL vs MySQL
Saat ini
dengan mudah kita bisa mengatakan, dua produk database open source paling
terkenal dan banyak digunakan adalah MySQL dan PostgreSQL. “Mana yang lebih
bagus?” adalah pertanyaan yang hingga akhir zaman nanti akan selalu terlontar.
Kami tahu pertanyaan ini tidak ada artinya, dan tidak membantu sama sekali.
Namun di artikel ini kami mencoba menyusun beberapa aspek dari kedua database
yang berbeda satu sama lain. Harapan kami, perbandingan ini membantu Anda
menjawab pertanyaan “mana yang sebaiknya dipakai untuk [sebutkan kebutuhan Anda
di sini].” Jangan lupa pula, sebelum memutuskan selalu ceklah dulu homepage
kedua database sebab dari waktu ke waktu fitur tiap database berubah/bertambah.
Perbandingan di artikel ini sendiri menggunakan versi MySQL 3.23.49/4.0.1 dan
PostgreSQL 7.2.
Dari
semula latar belakang dikembangkannya kedua database ini sudah berbeda. MySQL
berkembang dari solusi yang dipakai oleh pembuatnya, TcX AB, dalam memroses
data untuk aplikasi Web. Fokusnya adalah pada kecepatan. PostgreSQL, di lain
pihak, berkembang dari riset akademik. Fokus pengembangan PostgreSQL adalah
pada fitur OO, reliabilitas, dan dukungan SQL yang mantap. Namun, seiring kedua
produk ini bertambah matang, keduanya semakin banyak memiliki sifat-sifat ini.
MySQL versi 4.x misalnya, berjanji menambahkan fitur-fitur yang sejak lama
diidamkan pemakainya: subselect, view, dsb. Sementara PostgreSQL, yang sempat
memiliki masalah stabilitas dan skalabilitas di seri awal versi 6.x, juga kini
telah amat menarik dari segi kecepatan.
Pengembangan
MySQL diatur secara sentral oleh perusahaan komersial di Swedia bernama MySQL
AB (sebelumnya TcX AB). Perusahaan ini memperoleh pemasukan utamanya dari
menjual layanan support dan konsultasi MySQL. PostgreSQL dikembangkan secara
lebih terdesentralisasi dan merakyat, namun tetap diatur oleh sebuah kelompok
online bernama PostgreSQL Development Group.
MySQL
dirilis dalam satuan yang lebih sering (sebulan bisa lebih dari satu kali),
sementara PostgreSQL sekitar 4–6 bulan sekali.
Menurut
MySQL AB, saat ini jumlah instalasi MySQL sekitar 3 juta. PostgreSQL sendiri
tidak diketahui pasti berapa jumlah penggunanya; kemungkinan masih berada di
bawah MySQL karena banyaknya situs Web dan perusahaan webhosting yang hanya
menggunakan MySQL. Plus secara keseluruhan popularitas MySQL (trafik milis,
tutorial/artikel yang membahas, dsb) lebih besar daripada PostgreSQL. Tapi
karena PostgreSQL juga disertakan secara default di distro-distro Linux seperti
Red Hat dan SuSE, jumlah penggunanya pun sudah pasti banyak.
MySQL
memiliki arsitektur multithreading, sementara PostgreSQL multiproses (forking).
Ini berarti PostgreSQL potensial memiliki stabilitas yang lebih tinggi, sebab
satu proses anak yang mati tidak akan menyebabkan seluruh daemon mati—meskipun
pada kenyataannya, dulu ini sering terjadi. Di sisi lain, arsitektur dengan
forking ini sulit diterapkan ke Windows, sebab Windows amat thread-oriented.
Karena itulah, baru MySQL yang memiliki port natif ke Windows. PostgreSQL
sendiri saat ini bisa dijalankan di Windows, tapi melalui lapisan emulasi
Cygwin.
Sampai
sekarang masih banyak yang bilang MySQL itu tidak ACID-compliant. Padahal sejak
2 tahun lalu MySQL sudah mempunyai handler tabel BerkeleyDB, dan belakangan ini
InnoDB, sehingga MySQL sudah mendukung transaksi. Handler tabel MySQL yang
lama, ISAM dan MyISAM, tidak ACID-compliant. PostgreSQL sendiri sejak lama
telah ACID-compliant.
Lisensi
PostgreSQL lebih liberal. Inilah sebabnya ada banyak produk closed-source dan
komersial yang bisa dikembangkan dari source code PostgreSQL. MySQL, karena
dilisensi di bawah GPL, tidak boleh dimodifikasi menghasilkan produk turunan
yang closed-source.
Soal
kecepatan ini relatif dan kadang juga jadi isu sensitif. Baik kedua pihak,
maupun pihak ketiga, pernah menerbitkan benchmark yang lalu ditepis atau
dicibir karena tidak objektif.
Pada
dasarnya perbandingan kecepatan keduanya seperti ini: MySQL terkenal cepat
dalam melakukan query sederhana. Dengan kata lain, dapat memroses lebih banyak
SQL per satuan waktu. Tapi dalam kondisi load tinggi (jumlah koneksi simultan
besar), PostgreSQL sering mengalahkan MySQL untuk query dengan klausa JOIN yang
kompleks, seperti dialami Tim Perdue saat mencoba kedua database untuk
diimplementasikan di SourceForge.net. Penyebab utamanya adalah karena MySQL
menggunakan locking level table dalam UPDATE,
sehingga koneksi yang lain tidak bisa membaca table ybs sama sekali. Locking
inilah juga sebabnya mengapa pada banyak benchmark, MySQL menunjukkan penurunan
kinerja yang cukup drastis untuk kondisi jumlah klien simultan tinggi.
PostgreSQL mendukung locking di level yang lebih rendah, yaitu row. Table
handler baru di MySQL, InnoDB, juga mendukung row level locking. Benchmark
InnoDB pada jumlah koneksi tinggi menunjukkan hasil yang cukup menjanjikan (www.innodb.com/bench.html).
Masalah
locking tabel bisa diakali dengan membelah-belah tabel, agar satu kelompok row
dapat dilock tanpa mengganggu kelompok row lain. Bahkan ada pengguna MySQL yang
membelah sebuah tabel besar berisi jutaan record menjadi ribuan tabel
kecil-kecil.
Keduanya
sudah bisa dibilang cukup hingga amat stabil. Tapi perlu diingat bahwa database
manapun—bahkan Oracle—sesekali dapat menyebabkan kerusakan data. Karena itu
backup/history periodik dan incremental tetap diperlukan.
MySQL
terkenal kaya fungsi built-in, seperti modifikasi string (REPLACE, RIGHT, LTRIM, LCASE),
matematika (LOG, LOG10), tanggal, dsb. Dalam hal ini MySQL lebih unggul.
Keduanya
sudah amat solid. Mulai dari API C/C++, driver database Perl/Python/PHP/Tcl,
ODBC, JDBC telah didukung. Anda tidak akan kesulitan menggunakan database ini
dari berbagai sistem dan bahasa pemrograman. MySQL juga mendukung OLEDB dan
memiliki versi embedded untuk dilink bersama aplikasi buatan Anda sendiri.
MySQL
mendukung indeks full text secara natif. PostgreSQL mendukung full text
searching lewat program lain (contohnya: OpenFTS, openfts.sourceforge.net) yang memanfaatkan tipe data
arraynya untuk menyimpan indeks dokumen. Secara umum dapat dikatakan bahwa
indexing dengan MySQL lebih praktis, tapi dengan program ketiga lebih banyak
fitur dan opsi yang bisa diatur (mis: stemming, parsing kata non-Inggris, dsb).
MySQL juga, tentu saja, dapat dipakai sebagai backend bagi program search
eksternal (contoh: DBIx::KwIndex, search.cpan.org/search?dist=DBIx-KwIndex), meski mungkin tidak seefisien
dibandingkan array di PostgreSQL.
sudah memiliki replikasi, meski replikasi di MySQL barulah satu arah. Replikasi
di PostgreSQL sendiri belum disertakan dalam distribusi standarnya, namun Anda
dapat mengunjungi situs gborg.postgresql.org/project/pgreplication/ (proyek pgreplication).
Kedua
database menyimpan informasi user di sebuah database khusus. Sistem perizinan
MySQL lebih mendetil daripada PostgreSQL. Misalnya, kita dapat mengeset agar
user tertentu yang datang dari host tertentu hanya bisa membaca tabel saja
tanpa bisa UPDATE. Di PostgreSQL ini masih bisa dilakukan dengan VIEW misalnya.
Untuk
masalah enkripsi koneksi, keduanya mendukung SSL. Ada ekstensi PKIX bagi
PostgreSQL yang menarik, sebab dapat membuat tabel terenkripsi: http://www.dimensional.com/~bgiles/pkixdoc/.
MySQL AB
mengklaim lebih banyak tool grafis/web yang tersedia untuk MySQL, dan ini
nampaknya cukup benar.
PostgreSQL
lebih kaya dalam hal tipe data (terutama yang domain-specific seperti tipe data
geometris dan MONEY), tapi MySQL sudah mendukung
semua tipe data umum.
Di
PostgreSQL sebelum 7.1, masih ada keterbatasan yang cukup menyesakkan yaitu
ukuran data BLOB maksimum adalah 8–32KB. Sejak 7.1, PostgreSQL juga dapat
menyimpan data BLOB besar.
CHAR dan VARCHAR di PostgreSQL dapat menampung hingga 8 juta
karakter (bandingkan dengan MySQL yang hanya 255).
MySQL
lebih fleksibel dalam ALTER
TABLE.
PostgreSQL sendiri terbatas hanya bisa melakukan penambahan kolom, penggantian
nama kolom, dan penggantian nama tabel. MySQL mendukung penambahan/penghapusan
kolom, penggantian definisi kolom, dsb.
Dalam
waktu beberapa tahun PostgreSQL akan tetap memiliki fitur yang lebih lengkap
dibandingkan MySQL. Lebih banyak fitur dari standar SQL92 yang diimplementasi
oleh PostgreSQL. MySQL bahkan belum mendukung subselek. View, trigger, foreign
key checking (meski ini sudah ada di InnoDB) dan stored procedure semua hanya
ada di PostgreSQL. Sebagai pengembang yang memutuskan memilih salah satu
database, Anda perlu menanyakan kepada diri sendiri dulu apakah ingin lebih
bersusah-payah melakukan code around fasilitas-fasilitas yang tidak ada di
MySQL tersebut melalui bahasa pemrograman (misalnya, stored procedure diganti
dengan user-defined function, subselek diganti beberapa kali SQL yang dibungkus
dengan locking, dan tidak ada “trigger” berarti Anda harus melakukan pengecekan
secara manual). Jika tidak ingin repot, lebih baik memilih PostgreSQL. Tapi jika
tidak butuh fitur SQL yang rumit-rumit, Anda masih punya kebebasan memilih satu
dari dua.
Di
samping itu MySQL pun tidak memiliki fitur OO seperti pewarisan tabel dan tipe
data, atau tipe data array yang kadang praktis untuk menyimpan banyak item data
di dalam satu record.
MySQL
memiliki arsitektur yang memungkinkan sebuah database terdiri dari beberapa
jenis tabel, misalnya: yang transaksional dan tidak, yang berbasis di memori
atau di disk, yang terkompresi dan yang read-only. MySQL mendukung protokol
terkompresi yang bisa menghemat bandwidth dan mengurangi latensi.
PostgreSQL
memiliki tipe data array, pewarisan tabel dan tipe data, serta sistem rule.
PostgreSQL memiliki tipe-tipe data “antik.” Di PostgreSQL Anda dapat menulis
stored procedure (atau procedural language, istilah di PostgreSQL) dalam
beberapa bahasa: PL/Perl, PL/Tcl, atau PL/PgSQL. PostgreSQL mendukung
set/himpunan.
Kesimpulan
- Rangkuman
Saat ini dengan mudah kita bisa mengatakan, dua produk database open source paling terkenal dan banyak digunakan adalah MySQL dan PostgreSQL. “Mana yang lebih bagus?” adalah pertanyaan yang hingga akhir zaman nanti akan selalu terlontar. Kami tahu pertanyaan ini tidak ada artinya, dan tidak membantu sama sekali. Namun di artikel ini kami mencoba menyusun beberapa aspek dari kedua database yang berbeda satu sama lain. Harapan kami, perbandingan ini membantu Anda menjawab pertanyaan “mana yang sebaiknya dipakai untuk [sebutkan kebutuhan Anda di sini].” Jangan lupa pula, sebelum memutuskan selalu ceklah dulu homepage kedua database sebab dari waktu ke waktu fitur tiap database berubah/bertambah. Perbandingan di artikel ini sendiri menggunakan versi MySQL 3.23.49/4.0.1 dan PostgreSQL 7.2.
-Kritik
Budaya copas/plagiatisme sudah mendarah daging di kalangan bangsa Indonesia
-Saran
Gunakanlah script anti copas/plagiatisme pada blog anda sehingga artikel tidak bisa di copas juga supaya mental bangsa Indonesia bisa diperbaiki agar tidak hobi copas supaya bisa bersaing dengan bangsa-bangsa di negara maju.
-Manfaat bagi pembaca
Dengan membaca blog saya ini para pembaca akan mendapatkan banyak manfaat meliputi akan paham materi tentang PostgreSQL dan MySQL baik dari kemudahan atau kelebihan dan kelemahannya. Juga akan paham tentang ERD.










