online stats Tips and tricks about computer: 11/01/2009 - 12/01/2009
Blinkie Text Generator at TextSpace.net
BERANDATENTANG SAYAFACEBOOKFRIENDSTERTWITTERCLIXSENSEGOOGLEYAHOO!MSNBLOGGER

Senin, 23 November 2009

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.

Tujuan Desain

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

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.

Jumlah Pengguna

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.

Arsitektur dan Portabilitas

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.

ACID compliance

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

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.

Kecepatan

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.

Stabilitas

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.

Fungsi Built-In

MySQL terkenal kaya fungsi built-in, seperti modifikasi string (REPLACE, RIGHT, LTRIM, LCASE), matematika (LOG, LOG10), tanggal, dsb. Dalam hal ini MySQL lebih unggul.

Interface

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.

Full Text Indexing

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.

Replikasi

Keduanya 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).

Manajemen User dan Keamanan

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/.

Tool Web/GUI

MySQL AB mengklaim lebih banyak tool grafis/web yang tersedia untuk MySQL, dan ini nampaknya cukup benar.

Tipe Data

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).

Modifikasi Tabel

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.

Fitur OO dan SQL

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.

Fitur Unik

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.

Baca Selengkapnya...

Bagaimana Database Oracle Memandang Perintah SQL?

Sebagaimana lazimnya, sebuah perintah SQL diketik berdasarkan permintaan yang diinginkan. Misal kita ingin melihat seluruh isi tabel dept (deptno, dname, loc) yang dimiliki oleh scott. Perintah-perintah yang bisa dilakukan bervariasi, misalnya :

SQL> connect scott/tiger

à login sebagai scott

SQL> select * from dept;

SQL> select deptno, dname, loc from dept;

SQL> select * from scott.dept;

SQL> select * from SCOTT.dept;

SQL> select * from SCOTT.DEPT;

Semua perintah SQL di atas menghasilkan output sama, yaitu semua isi tabel dept. Seringkali kita menganggap bahwa jika hasil sesuai dengan yang diinginkan, maka apa pun perintah yang kita tulis sah-sah saja. Apakah memang seperti itu? Mari kita lihat bagaimana cara Oracle memandang perintah SQL yang kita kirim.

1. Bila semua user menggunakan perintah sama

a. User scott grant select on dept to public agar semua user bisa mengakses tabel dept

SQL> connect scott/tiger

SQL> grant select on dept to public;

b. Shutdown Oracle untuk memastikan memori (SGA) belum pernah digunakan

SQL> connect sys/inix2009 as sysdba

SQL> shutdown immediate;

SQL> startup

c. Buka SQL window I

SQL> connect scott/tiger

SQL> select * from scott.dept

d. Buka SQL window II

SQL> connect hr/hr

SQL> select * from scott.dept

e. Buka SQL window III

SQL> connect system/inix2009

SQL> select * from scott.dept

f. Buka SQL window IV

SQL> connect sys/inix2009 as sysdba

SQL> select * from scott.dept

g. Lihat bagaimana perintah-perintah tersebut dipandang oleh Oracle

SQL> connect sys/inix2009 as sysdba

SQL> desc v$sqltext;

Name Null? Type

————————— ——– ————

ADDRESS RAW(4)

HASH_VALUE NUMBER

SQL_ID VARCHAR2(13)

COMMAND_TYPE NUMBER

PIECE NUMBER

SQL_TEXT VARCHAR2(64)

SQL> select address, sql_text

from v$sqltext

where lower(sql_text) like ‘%dept%’;

ADDRESS SQL_TEXT

——– ——————————————

51341368 ere lower(sql_text) like ‘%dept%’

513733B8 select * from scott.dept

. . .

Terlihat bahwa Oracle memandang semua perintah sama sehingga hanya terlihat satu buah perintah di Shared Pool, yaitu “select * from scott.dept”. Hal ini menghemat ukuran Shared Pool sekaligus mempercepat proses karena perintah yang ditulis dianggap sama.

2. Bila setiap user menggunakan perintah berbeda yang penting hasil sama

a. Shutdown Oracle untuk memastikan memori (SGA) belum pernah digunakan

SQL> connect sys/inix2009 as sysdba

SQL> shutdown immediate;

SQL> startup

b. Buka SQL window I

SQL> connect scott/tiger

SQL> select * from dept

c. Buka SQL window II

SQL> connect scott/tiger

SQL> select deptno, dname, loc from dept

d. Buka SQL window III

SQL> connect hr/hr

SQL> select * from scott.dept

e. Buka SQL window IV

SQL> connect system/inix2009

SQL> select * from SCOTT.dept

f. Buka SQL window V

SQL> connect sys/inix2009 as sysdba

SQL> select * from SCOTT.DEPT

g. Lihat bagaimana perintah-perintah tersebut dipandang oleh Oracle

SQL> connect sys/inix2009 as sysdba

SQL> select address, sql_text

from v$sqltext

where lower(sql_text) like ‘%dept%’;

ADDRESS SQL_TEXT

——– ———————————————

5238ABEC select * from SCOTT.dept

52305E74 where lower(sql_text) like ‘%dept%’

5237F020 select * from SCOTT.DEPT

52389C30 select * from scott.dept

523A67DC select * from dept

523A21A0 select deptno, dname, loc from dept

Terlihat bahwa Oracle memandang perintah-perintah tersebut berbeda walaupun hasilnya sama, yaitu semua isi tabel dept. Hal ini memboroskan pemakaian Shared Pool sekaligus memperlambat proses karena perintah yang ditulis dianggap berbeda.

Kesimpulan :

Setiap orang harus menggunakan perintah sama untuk sebuah hasil yang diinginkan. DBA berkewajiban membuat standardisasi perintah SQL untuk digunakan oleh programmer dan siapa pun yang berkaitan.

Baca Selengkapnya...

Kamis, 19 November 2009

Mengambil isi URL dengan PHP

Ada beberapa pendekatan yang bisa Anda pilih ketika ingin mengambil isi halaman suatu URL. Anda bisa menggunakan fungsi fopen(), ekstensi CURL (Client URL), atau paket HTTP (PEAR).

Bagaimanapun juga, fopen() memiliki keterbatasan, pada saat Anda ingin mengambil isi halaman web dengan konfigurasi spesifik. Di sisi lain, ekstensi HTTP bukan ekstensi built-in sehingga perlu diinstal terlebih dahulu. Adapun solusinya, Anda bisa memanfaatkan ekstensi CURL. kode programnya seperti berikut:

/**
* Mengambil isi URL dan menyimpan ke file
* @param $page alamat URL
* @param $file nama file
* /

function getURLPage($page, $file) {
$ch = curl_init($page);
curl_setopt($ch, CURlOPT_FILE, $cf);
curl_exec($ch) or die(curl_error($sh));

echo 'Size download: ',
curl_getInfo($ch, CURLINFO_SIZE_DOWNLOAD);
echo '
Speed download: ',
curl_getInfo($ch, CURL_SPEED_DOWNLOAD);

curl_close($ch);
fclose($cf);
echo '

View page';
}
getURLPage('http://localhost/', 'page.html');

Secara default, fungsi-fungsi ekstensi CURL belum diaktifkan. Oleh karena itu, Anda terlebih dahulu harus mengaktifkan ekstensi php_curl.dll atau php_curl.so (Unix/Linux).

Baca Selengkapnya...

Mendeteksi Proxy Server dengan PHP

Atribut REMOTE_ADDR dari superglobal $_SERVER merepresentasikan alamat IP user yang me-request halaman web. Dimana alamat yang dikembalikan bisa berupa alamat IP komputer user atau web cache (proxy server) dari ISP user.

Apabila nilai REMOTE_ADDR adalah proxy server, maka atribut HTTP_X_FORWARDED_FOR juga ditampilkan. Atribut ini bisa Anda gunakan untuk mengetahui alamat IP proxy server. Implementasi kodenya seperti berikut:

if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
echo 'Anda mengakses dengan proxy server
';
echo 'IP Anda: ', $_SERVER['HTTP_X_FORWARDED_FOR'], '
';
echo 'Terkoneksi lewat engine: ', $_SERVER['HTTP_VIA'], '
';
echo 'IP Proxy Server:', $_SERVER['REMOTE_ADDR'];
} else {
echo 'Anda terkoneksi tanpa proxy
';
echo 'IP Anda: ', $_SERVER['REMOTE_ADDR'];
}

Baca Selengkapnya...

DDL, DML, DCL

Data Definition Language

Data Definition Language (DDL) adalah bahasa komputer untuk mendefinisikan struktur data. Istilah ini pertama kali diperkenalkan dalam kaitannya dengan model database Codasyl, di mana skema database ditulis dalam Data Definition Language menggambarkan catatan, field, dan "set" yang membentuk pengguna Model Data. Awalnya itu disebut subset SQL, namun kini digunakan dalam arti umum untuk mengacu pada bahasa formal untuk mendeskripsikan struktur data atau informasi, seperti skema XML.

CREATE

Untuk membuat database baru, tabel, indeks, atau query. Sebuah pernyataan CREATE dalam SQL menciptakan suatu benda dalam sebuah sistem manajemen database relasional (RDBMS). Jenis objek yang dapat dibuat tergantung pada RDBMS yang digunakan, tetapi kebanyakan mendukung penciptaan tabel, indeks, pengguna, dan database. Beberapa sistem (seperti PostgreSQL) memungkinkan CREATE dan perintah DDL lain dalam sebuah transaksi dan dengan demikian mereka dapat digulung kembali.

CREATE TABLE

Perintah CREATE yang paling umum adalah perintah CREATE TABLE. Digunakan untuk membuat tabel. Penggunaan yang khas adalah:

CREATE TABLE [IF NOT EXISTS] [table name] ( [column definitions] ) [table parameters];

Parameter IF NOT EXISTS untuk memeriksa tabel jika tidak ada atau belum dibuat.

Untuk menampilkan nama-nama tabel yang telah dibuat gunakan perintah:

SHOW TABLES;

Untuk menampilkan deskripsi sebuah tabel dapat menggunakan perintah:

DESCRIBE [table name];

Contoh:

CREATE TABLE karyawan (

id INTEGER PRIMARY KEY,

first_name CHAR (50) NULL,

last_name CHAR (75) NOT NULL,

dateofbirth DATE NULL ; )

SHOW TABLES;

DESCRIBE karyawan;

CREATE DATABASE

Perintah ini digunakan untuk membuat database. Penggunaan yang khas adalah:

CREATE DATABASE [database name];

Setelah itu, untuk menggunakan database yang telah dibuat gunakan perintah:

USE [database name];

Contoh:

CREATE DATABASE karyawan;

USE karyawan;

CREATE TRIGGER

Perintah ini digunakan untuk membuat TRIGGER. Trigger adalah sebuah obyek dalam database yang berupa prosedur yang merespon setiap kali terdapat proses modifikasi (insert, update, dan delete) pada tabel. Penggunaan yang khas adalah:

CREATE TRIGGER nama_trigger ON TABLE nama_tabel FOR [DELETE] [,] [INSERT] [,] [UPDATE] AS perintah_SQL;

Contoh:

CREATE TRIGGER LogUbahNilai ON TABLE PesertaKul FOR UPDATE, INSERT AS INSERT INTO LogHistoris (Tanggal, Proses);

CREATE INDEX

Untuk membuat index. Perintahnya adalah:

CREATE [UNIQUE] INDEX nama_index ON nama_tabel (nama_kolom);

Contoh:

CREATE INDEX Mahasiswa ON KRS (kode_mata_kuliah);

Ket : Spesifikasi unique akan menolak key yang sama dalam file.

CREATE SYNONYM

Untuk membuat Synonym. Synonym adalah cara untuk mengantikan nama view atau tabel yang panjang agar dapat dideklarasikan menjadi sebuah kata yang pendek. Perintahnya adalah:

CREATE SYNONYM synonym_name FOR [view_name / table_name];

Contoh:

CREATE SYNONYM mhs FOR mahasiswa;

CREATE VIEW

Untuk membuat View. View adalah tabel bayangan. Tidak menyimpan data secara fisik. Biasanya berupa hasil query dari tabel-tabel dalam sebuah database. Perintahnya adalah:

CREATE VIEW view_name [(column1, column2,….)] AS SELECT statement FROM table_name [WITH CHECK OPTION];

Contoh:

CREATE VIEW MHSv AS SELECT * FROM MHS;

Ket :

view_name : nama view yang akan dibuat.

Column : nama atribut untuk view.

Statement : atribut yang akan dipi;ih dari table basis Data.

Table_name : nama table basis data.

DROP

Untuk menghancurkan database, tabel, indeks, atau view yang sudah ada. Pernyataan DROP dalam SQL menghapus sebuah objek dari suatu sistem manajemen database relasional (RDBMS). Jenis objek yang dapat dihapus tergantung pada RDBMS yang digunakan, tetapi kebanyakan mendukung menghapus tabel, pengguna, dan database. Beberapa sistem (seperti PostgreSQL) memungkinkan DROP dan perintah DDL lain terjadi dalam suatu transaksi dan dengan demikian akan berputar ke belakang.

Penggunaan DROP untuk menghapus tabel adalah:

DROP TABLE [tablename];

Sebagai contoh, perintah untuk drop tabel bernama karyawan akan menjadi:

DROP TABLE karyawan;

Penggunaan DROP untuk menghapus database adalah:

DROP DATABASE [database_name];

Sebagai contoh, perintah untuk drop database bernama perusahaan akan menjadi:

DROP DATABASE perusahaan;

Penggunaan DROP untuk menghapus view adalah:

DROP VIEW [view_name];

Sebagai contoh, perintah untuk drop view bernama mahasiswa akan menjadi:

DROP VIEW mahasiswa;

Penggunaan DROP untuk menghapus index adalah:

DROP INDEX [index_name];

Sebagai contoh, perintah untuk drop index bernama karyawati akan menjadi:

DROP INDEX karyawati;

Penggunaan DROP untuk menghapus trigger adalah:

DROP TRIGGER [trigger_name];

Sebagai contoh, perintah untuk drop trigger LogUbahNilai bernama akan menjadi:

DROP TRIGGER LogUbahNilai;

Pernyataan DROP ini berbeda dengan pernyataan DELETE dan TRUNCATE (non-standar), dalam arti bahwa mereka tidak menghapus tabel itu sendiri. Sebagai contoh, sebuah pernyataan DELETE mungkin menghapus beberapa (atau semua) data dari meja sementara meninggalkan meja itu sendiri dalam database, sedangkan pernyataan DROP akan menghapus seluruh tabel dari database.

ALTER

Untuk memodifikasi objek database yang sudah ada. Sebuah pernyataan ALTER dalam SQL mengakibatkan perubahan sifat-sifat suatu objek dalam sebuah sistem manajemen database relasional (RDBMS). Jenis objek yang dapat diubah tergantung pada RDBMS yang sedang digunakan.

Penggunaan khas ALTER objecttype objectname parameters;. Objecttype dapat berupa tabel (table), database, fungsi (function), prosedur (produce), view. Objectname merupakan nama yang dipakai untuk menyatakan sebuah objek. Sedangkan parameters merupakan pilihan yang digunakan untuk mengubah struktur tabel, yaitu CHANGE, RENAME, DROP, dan ADD.

Perintah untuk menambah kolom baru dalam tabel:

ALTER TABLE table_name ADD new_column_name type(length) [FIRST | AFTER old_column];

Perintah untuk mengubah nama kolom pada tabel:

ALTER TABLE table_name CHANGE old_column_name new_column_name type(length);

Perintah untuk menghapus kolom yang ada pada tabel:

ALTER TABLE table_name DROP column_name;

Perintah untuk menganti nama tabel:

ALTER TABLE old_table_name RENAME [TO] new_column_name;

Misalnya, perintah untuk menambahkan lalu mengubah dan kemudian menghapus kolom bernama gelembung untuk tabel yang ada akan bernama wastafel yang namanya kan diubah menjadi bak.

ALTER TABLE wastafel ADD gelembung INTEGER;

ALTER TABLE wastafel CHANGE gelembung busa DOUBLE;

ALTER TABLE wastafel DROP COLUMN busa;

ALTER TABLE wastafel RENAME TO bak;

RENAME

Untuk mengubah nama tabel yang telah dibuat. Perintah untuk mengubah nama tabel yang telah dibuat adalah:

RENAME TABLE old_table_name TO new_table_name;

.


Data Manipulation Language

Data Manipulation Language (DML) adalah keluarga bahasa komputer yang digunakan oleh program komputer atau pemakai database untuk menyisipkan, menghapus dan memutakhirkan data dalam database. Yang saat ini paling populer adalah bahasa manipulasi data yang bearasl dari SQL, yang digunakan untuk mengambil dan memanipulasi data dalam database relasional. Bentuk-bentuk lain dari DML adalah yang digunakan oleh database IMS, CODASYL (seperti IDMS), dan lain-lain.

Bahasa Manipulasi Data terdiri dari pernyataan 'perubahan data SQL' yang mengubah data yang disimpan tetapi bukan skema atau objek database. Manipulasi objek database persisten (misalnya tabel atau prosedur yang disimpan) melalui pernyataan 'Skema SQL' bukan data yang tersimpan di dalamnya, dianggap sebagai bagian dari Data Definition Language yang terpisah. Dalam SQL dua kategori serupa dalam rincian sintaks mereka, tipe data, ekspresi dan sebagainya, tetapi berbeda dalam fungsi mereka secara keseluruhan.

Bahasa Manipulasi Data mempunyai kemampuan fungsional yang diselenggarakan oleh kata awal dalam sebuah pernyataan, yang hampir selalu merupakan kata kerja. Dalam kasus SQL, verba ini adalah:

SELECT

INSERT

UPDATE

DELETE

TRUNCATE

INSERT

Berfungsi untuk menyisipkan atau menyimpan data dari luar database ke dalam database. Ada beberapa cara dalam menyisipkan data ke dalam database yaitu dengan menyamakan kolom dan data, menyebutkan kolom, tanpa menyebutkan kolom, memasukkan hanya pada sebagian kolom yang ada pada tabel.

Menyamakan kolom dan data. Perintahnya adalah sebagai berikut:

INSERT INTO table_name SET column_name=’column_data’;

Contoh:

INSERT INTO karyawan SET nip=’110909’;

INSERT INTO karyawan SET nip=’110909’, nama=’SISWONO’;

Menyebutkan kolom. Perintahnya adalah sebagai berikut:

INSERT INTO table_name(first_column_name, next_column_name) VALUES (first_column_data, next_column_data);

Contoh:

INSERT INTO karyawan(nip, nama) VALUES(‘110909’, ‘SISWONO’);

Tanpa menyebutkan kolom. Perintahnya adalah sebagai berikut:

INSERT INTO table_name VALUES (new_first_column_data, new_next_column_data);

Contoh:

INSERT INTO karyawan VALUES (‘110909’, ‘SISWONO’);

SELECT

Perintah ini digunakan untuk menyeleksi atau memilih atau menampilkan data-data yang ada dalam tabel. Baik menampilkan semua kolom, sebagian kolom, serta berdasarkan kondisi.

Menampilkan semua kolom. Perintahnya adalah sebagai berikut:

SELECT * FROM table_name;

Contoh:

SELECT * FROM karyawan;

Menampilkan beberapa / sebagian kolom dalam tabel. Perintahnya adalah sebagai berikut:

SELECT column_name FROM table_name;

Contoh:

SELECT nip FROM karyawan;

Menampilkan semua kolom dengan kondisi. Perintahnya adalah sebagai berikut:

SELECT * FROM table_name WHERE condition;

Contoh:

SELECT * FROM karyawan WHERE nip=’110909’;

Menampilkan beberapa / sebagian kolom dengan kondisi. Perintahnya adalah sebagai berikut:

SELECT column_name FROM table_name WHERE condition;

Contoh:

SELECT nama FROM karyawan WHERE nip=’110909’;

Ket:

Kondisi juga dapat diimplementasikan dengan menambahkan operator relasional seperti ‘=’, ‘>’, ‘<’, ‘<>’, ‘<=’, ‘>=’ atau dengan menggunakan operator logika yaitu OR, AND dan NOT.

Menampilkan data sesuai urutan sehingga memudahkan pencarian. Perintahnya adalah sebagai berikut:

SELECT [column_name / *] FROM table_name [WHERE condition] ORDER BY column_name [DESC];

Contoh:

SELECT * FROM daftar_barang WHERE harga_barang=’10000’ ORDER BY harga_barang;

Ket:

Parameter DESC akan mengurutkan data secara terbalik.

Menampilkan data dengan membuat kelompok. Perintahnya adalah sebagai berikut:

SELECT nama_kolom FROM nama_tabel GROUP BY nama_kolom;

Contoh:

SELECT alamat, COUNT(*) FROM Mahasiswa GROUP BY alamat;

Menampilkan data dengan membuat kelompok dan menentukan syaratnya. Perintahnya adalah sebagai berikut:

SELECT nama_kolom FROM nama_tabel GROUP BY nama_kolom HAVING syarat;

Contoh:

SELECT alamat, COUNT(*) FROM Mahasiswa GROUP BY alamat HAVING COUNT(*)>1;

Menampilkan data secara unik atau data yang sama hanya ditampilkan satu kali saja. Perintahnya adalah sebagai berikut:

SELECT DISTINCT column_name FROM table_name;

Contoh:

SELECT DISTINCT nim FROM KRS;

Menampilkan data dalam nilai range tertentu. Perintahnya adalah sebagai berikut:

SELECT [daftar_kolom / *] FROM table_name WHERE kondisi [NOT] BETWEEN batas_bawah AND batas_atas;

Contoh:

SELECT * FROM pengajar WHERE id_pengajar BETWEEN 7 AND 15;

Ket:

Operator NOT digunakan untuk menyatakan tidak atau negasi dari BETWEEN, sehingga jika ditambahkan maka hasil akhirnya tidak akan menampilkan kolom dalam kondisi yang diberikan.

Menampilkan beberapa data paling atas dari hasil perintah SELECT. Perintahnya adalah sebagai berikut:

SELECT TOP n [daftar_kolom] FROM table_name;

Contoh:

SELECT TOP 3 * FROM mahasiswa;

Menampilkan data-data null (tidak memiliki nilai). Null berbeda dengan 0 atau spasi. Perintahnya adalah sebagai berikut:

SELECT [column_name / *] FROM table_name WHERE [condition / column_name] IS NULL;

Contoh:

SELECT * FROM Mahasiswa WHERE nim IS NULL;

Menampilkan data-data yang tidak null (memiliki nilai). Null berbeda dengan 0 atau spasi. Perintahnya adalah sebagai berikut:

SELECT [column_name / *] FROM table_name WHERE [condition / column_name] IS NOT NULL;

Contoh:

SELECT * FROM Mahasiswa WHERE nim IS NOT NULL;

Menampilkan hasil perintah SELECT dan mengganti namanya. Perintahnya adalah sebagai berikut:

SELECT column_name_1 AS column_alias_name_1, column_name_2 AS column_alias_name_2,…etc FROM table_name;

Contoh:

SELECT nim AS nim_mahasiswa, gender AS jenis_kelamin FROM Mahasiswa;

Menampilkan hasil perintah SELECT dan mengganti namanya dengan memakai kondisi. Perintahnya adalah sebagai berikut:

SELECT column_name_1 AS column_alias_name_1, column_name_2 AS column_alias_name_2,…etc FROM table_name WHERE condition;

Contoh:

SELECT nim AS nim_mahasiswa, gender AS jenis_kelamin FROM Mahasiswa;

UPDATE

Untuk memperbaharui data lama menjadi data yang baru, dalam penggunaannya harus disertai dengan klausa WHERE. Perintahnya adalah sebagai berikut:

UPDATE table_name SET kolom1 = ‘data_baru_kolom1’, kolom2 = ‘data_baru_kolom2’,…dst WHERE kondisi;

Contoh:

UPDATE Mahasiswa SET kelas = ‘A’, nama = ‘Muhammad Solihin’ WHERE nim = ‘082406013’;

DELETE

Untuk menghapus record yang ada pada baris data yang terdapat pada tabel. Perintahnya adalah sebagai berikut:

DELETE FROM nama_tabel WHERE kondisi;

Contoh:

DELETE FROM Mahasiswa WHERE nim = ‘082406001’;

TRUNCATE

Untuk menghapus seluruh record data pada tabel atau dapat dikatakan sebagai pengosongan isi tabel bukan menghapus field atau tabel tersebut. Perintahnya adalah sebagai berikut:

TRUNCATE TABLE nama_tabel;

Contoh:

TRUNCATE TABLE Mahasiswa;


Data Control Language

Data Control Language (DCL) adalah bahasa komputer dan subset SQL, digunakan untuk mengontrol akses ke data dalam database.

Contoh perintah DCL meliputi:

GRANT untuk mengizinkan user tertentu untuk melakukan tugas-tugas tertentu.

REVOKE untuk membatalkan sebelumnya izin diberikan atau ditolak.

Hak berikut dapat diberikan kepada atau dicabut dari pengguna atau peran:

· ALL, Hak akses untuk semua perintah.

· ALTER, Mengubah struktur tabel.

· CREATE, Membuat tabel.

· DELETE, Menghapus record/baris

· DROP, Menghapus database atau tabel.

· GRANT, Mengubah hak akses suatu account.

· INSERT, Menambahkan data pada suatu tabel.

· SELECT, Menampilkan data dari tabel.

· UPDATE, Mengedit atau memperbaiki data pada suatu tabel.

· USAGE, Tidak mendapat hak akses apapun

Untuk melihat nama account (user) yang telah terdaftar, anda dapat menggunakan perintah:

SELECT HOST, USER FROM USER;

Untuk mengatur hak aksesnya, perintahnya sebagai berikut:

GRANT hak_akses (field) ON nama_tabel TO nama_account@namahost IDENTIFIED BY 'password';

Contoh:

GRANT SELECT (nim) ON mahasiswa TO dosen@localhost;

Setidaknya satu hak akses harus diberikan, nama_tabel : merupakan nama tabel yang diberi hak. nama_account@namahost : akan memperbaharui hak akses jika account sudah ada sebelumnya. password : tidak perlu menggunakan tambahan IDENTIFIED BY 'password' apabila tidak ada perubahan password.

Dalam menghapus batasan hak akses yang sudah diatur dengan perintah GRANT, maka kita harus menggunakan REVOKE. Sintaksnya adalah sebagai berikut.

REVOKE hakakses (field) ON nama_tabel FROM nama_account@namahost;

Contoh:

REVOKE SELECT (nim) ON mahasiswa FROM dosen@localhost;

Baca Selengkapnya...