Anda di halaman 1dari 59

BAB I

MEMAHAMI DATABASE

Materi :
1.1 Mengenal Database
1.2 Mengenal DBMS
1.3 Perancangan Basis Data

Mengenal Database

Basis data terdiri dari dua kata, yaitu basis dan data. Basis dapat diartikan sebagai markas
atau gudang yaitu tempat bersarang/berkumpul. Sedangkan data adalah representasi fakta
dunia nyata yang mewakili suatu objek seperti manusia, barang, hewan, peristiwa,
konsep, keadaan dan sebagainya, yang direkam dalam bentuk angka, huruf, symbol, teks,
gambar, bunyi atau kombinasinya.

Beberapa definisi tentang basis data :


1. Basis data merupakan himpunan kelompok data (arsip) yang saling berhubungan
yang diorganisasi sedemikian rupa agar kelak dapat dimanfaatkan kembali dengan
cepat dan mudah.
2. Kumpulan data yang saling berhubungan yang disimpan secara bersama sedemikian
rupa dan tanpa pengulangan (redudansi) yang tidak perlu, untuk memenuhi berbagai
kebutuhan.
3. kumpulan file/tabel/arsip yang saling berhubungan yang disimpan dalam media
penyimpanan elektronis.

Prinsip utama basis data adalah pengaturan data/arsip. Sedangkan tujuan utamanya
adalah kemudahan dan kecepatan dalam pengambilan kembali data/arsip. Satu hal yang
juga harus diperhatikan, bahwa basis data bukan hanya sekedar penyimpanan data secara

Praktikum Basis Data D3 REKMED FMIPA UGM 1


elektronis (dengan bantuan computer). Artinya, tidak semua bentuk penyimpanan data
secara electronis disebut basis data. Kita dapat menyimpan dokumen berisi data dalam
file teks (dengan program pengolah kata), file spread sheet, dan lain-lain, tetapi tidak bisa
disebut sebagai basis data karena di dalamnya tidak ada pemilihan dan pengelompokan
data sesuai jenis/fungsi data, sehingga akan menyulitkan pencarian kelak. Dalam sebuah
basis data yang sangat ditonjolkan adalah pengaturan/pemilihan/pengelompokan/
pengorganisasian data yang akan kita simpan sesuai dengan fungsinya/jenisnya.

Operasi Dasar Basis Data


Operasi-operasi dasar basis data yang dapat kita lakukan berkenaan dengan basis data
meliputi :
• pembuatan basis data baru (create database), yang identik dengan pembuatan lemari
arsip yang baru
• penghapusan basis data (drop database), yang identik dengan perusakan lemari arsip
(sekaligus beserta isinya jika ada)
• pembuatan file/tabel baru ke suatu basis data (create table), yang identik dengan
penambahan map arsip baru ke sebuah lemari arsip yang telah ada.
• Penghapusan file/tabel dari suatu basis data (drop table), yang identik dengan
perusakan map arsip lama yang ada disebuah lemari map.
• Penambahan/pengisian data baru ke sebuah file/tabel di sebuah basis data (insert),
yang identik dengan penambahan lembaran arsip dari sebuah map arsip.
• Pengambilan data dari sebuah file/tabel (retrieve/search), yang identik dengan
pencarian lembaran arsip dari map arsip.
• Perubahan data dari sebuah file/tabel (update), yang identik dengan perbaikan isi
lembaran arsip yang ada di sebuah map arsip.
• Penghapusan data dari sebuah file/tabel (delete), yang identik dengan penghapusan
sebuah lembaran arsip yang ada di sebuah map arsip.

Tujuan Basis Data


Secara lebih lengkap, pemanfaatan basis data dilakukan untuk memenuhi sejumlah tujuan
(objektif) seperti berikut ini:

Praktikum Basis Data D3 REKMED FMIPA UGM 2


• Kecepatan dan kemudahan (Speed)
Pemanfaatan basis data memungkinkan kita untuk menyimpan data atau melakukan
perubahan/manipulasi data atau menampilkan kembali data tersebut dengan cepat dan
mudah
• Efisiensi ruang penyimpanan (Space)
Dengan basis data, efisiensi/optimalisasi penggunaan ruang penyimpanan dapat
dilakukan, karena kita dapat melakukan penekanan jumlah redudansi data, baik dengan
menerapkan sejumlah pengkodean atau dengan membuat relasi-relasi (dalam bentuk file)
antar kelompok data yang saling berhubungan.
• Keakuratan (Accuracy)
Pemanfaatan pengkodean atau pembentukan relasi antar data bersama dengan penerapan
aturan/batasan (constraint) tipe data, domain data, keunikan data, dan sebagainya, yang
secara ketat dapat diterapkan dalam sebuah basis data, sangat berguna untuk menekan
ketidakakuratan pemasukan/penyimpanan data.
• Ketersediaan(Availability)
Karena kepentingan pemakaian data, sebuah basis data dapat memiliki data yang disebar
di banyak lokasi geografis. Dengan pemanfaatan teknologi jaringan computer, data yang
berada di suatu lokasi/cabang, dapat juga diakses (menjadi tersedia/available) bagi
lokasi/cabang lain.
• Kelengkapan(Completeness)
Untuk mengakomodasi kebutuhan kelengkapan data yang semakin berkembang, maka
kita tidak hanya dapat menambah record-record data, tetapi juga dapat melakukan
perubahan struktur dalam basis data, baik dalam bentuk penambahan objek baru (tabel)
atau dengan penambahan field-field baru pada suatu tabel.
• Keamanan(Security)
Memang ada sejumlah sistem (aplikasi) pengelola basis data yang tidak menerapkan
aspek keamanan dalam penggunaan basis data. Tetapi untuk sistem yang besar dan serius,
aspek keamanan juga dapat diterapkan dengan ketat. Dengan begitu, kita dapat
menentukan siapa-siapa (pemakai) yang boleh menggunakan basis data beserta objek-
objek di dalamnya dan menentukan jenis-jenis operasi apa saja yang boleh dilakukannya.
• Kebersamaan pemakaian (Sharability)

Praktikum Basis Data D3 REKMED FMIPA UGM 3


Basis data yang dikelola oleh sistem (aplikasi) yang mendukung lingkungan multiuser,
akan dapat memenuhi kebutuhan, tetapi tetap terjaga/menghindari terhadap munculnya
persoalan baru seperti inkonsistensi data.

Penerapan Basis Data


Secara lebih nyata/teknis, bidang-bidang fungsional yang telah umum memanfaatkan
basis data demi efisiensi, akurasi dan kecepatan operasi antara lain:
• Kepegawaian
• Pergudangan (inventory)
• Akuntansi
• Reservasi
• Layanan Pelanggan (customer care)
• Dan lain-lain

Sedangkan bentuk organisasi/perusahaan yang memanfaatkan basis data dapat berupa :


• Perbankan
• Asuransi
• Rumah Sakit
• Produsen Barang
• Industri Manufaktur
• Pendidikan/Sekolah
• Telekomunikasi
• Dan lain-lain

Mengenal DBMS

Sistem adalah sebuah tatanan atau keterpaduan yang terdiri dari sejumlah komponen
fungsional (dengan satuan fungsi/tugas khusus) yang saling berhubungan dan secara
bersama-sama bertujuan untuk memenuhi suatu proses/pekerjaan tertentu. Suatu sistem
terdiri dari sejumlah komponen yang saling berinteraksi, artinya saling bekerja sama

Praktikum Basis Data D3 REKMED FMIPA UGM 4


membentuk satu kesatuan. Karena itu, secara umum sebuah sistem basis data merupakan
sistem yang terdiri atas kumpulan file (tabel) yang saling berhubungan (dalam sebuah
basis data di sebuah computer) dan sekumpulan program (DBMS) yang memungkinkan
beberapa pemakai dan/atau program lain untuk mengakses dan memanipulasi file-file
(tabel-tabel) tersebut.

Komponen Sistem Basis Data

• Perangkat keras (hardware)


Perangkat keras yang biasa terdapat dalam sebuah sistem basis data adalah computer,
memori sekunder online (harddisk), memori sekunder offline (tape/removable disk)
dan media perangkat komunikasi.
• Sistem Operasi (operating system)
Sistem operasi merupakan program yang mengaktifkan/memfungsikan sistem
computer (operasi I/O, pengelolaan file dan lain-lain). Sejumlah sistem operasi yang
banyak digunakan seperti : MS-DOS, MS-Windows 3.1, MS-WINDOWS 98
(computer stand alone atau computer untuk computer client dalam sistem jaringan)
atau Novel-Netware, MS Windows NT, Unix dan Sun Solaris (untuk computer server
dan jaringan). Program pengelola basis data hanya dapat aktif (running) jika sistem
operasi yang dikehendaki aktif.
• Basis Data (database)
Setiap basis data dapat memiliki/berisi sejumlah objek basis data (seperti file/tabel,
indeks dan lain-lain). Disamping berisi/menyimpan data, setiap basis data juga
mengandung dan menyimpan definisi struktur (baik untuk basis data maupun
objeknya secara detail).
• Sistem pengelolaan basis data (Database Management System/DBMS)
Perangkat DBMS akan menentukan bagaimana data diorganisasi, disimpan, diubah
dan diambil kembali serta menerapkan mekanisme pengamanan data, pemakaian data
bersama dan pemaksaan keakuratan/konsistensi data. Perangkat lunak yang termasuk
DBMS seperti dBase III+, dBase IV, FoxBase, Rbase, Ms Access dan Borland
Paradox (untuk kelas sederhana) atau Borland Interbase., MS SQLL Server, CA-
Open Ingres, Infomix dan SysBAse (untuk kelas Kompleks/berat)

Praktikum Basis Data D3 REKMED FMIPA UGM 5


• Pemakai (user)
Ada beberapa jenis/tipe pemakai terhadap suatu sistem basis data yang dibedakan
berdasarkan cara berinteraksi terhadap sistem :
1. programmer aplikasi, pemakai yang berinteraksi dengan basis data melalui Data
Manipulation Language (DML) yang disertakan (embedded) dalam program.
2. User mahir (casual user), pemakai yang berinteraksi dengan menyatakan query
untuk mengakses data dengan bahasa query yang telah disediakan oleh suatu
DBMS.
3. User umum (end user/native user), pemakai yang berinteraksi dengan sistem basis
data melalui pemanggilan suatu program aplikasi permanent (executable program)
yang telah ditulis/disediakan sebelumnya.
4. User Khusus (specialized user), pemakai yang menulis aplikasi basis data non
konvensional, tetapi keperluan-keperluan, seperti untuk aplikasi AI (Artificial
intelligence), sistem pakar, pengolahan citra dan lain-lain yang bisa saja
mengakses basis data dengan/tanpa DBMS yang bersangkutan.
• Aplikasi Perangkat Lunak
Aplikasi (perangkat lunak) lain ini bersifat opsional. Artinya ada/tidaknya tergantung
pada kebutuhan pemakai. DBMS yang pemakai gunakan lebih berperan dalam
pengorganisasian data dalam sistem basis data, sementara bagi pemakai basis data
(khususnya yang menjadi end-user/native-user) dapat dibuatkan/disediakan program
khusus/lain untuk melakukan pengisian, pengubahan dan pengambilan data.

Abstraksi Data
Salah satu tujuan dari DBMS adalah untuk menyediakan fasilitas antar muka (interface)
dalam melihat data (yang lebih ramah/user oriented) kepada pemakai/user. Untuk itu,
sistem tersebut akan menyembunyikan detail tentang bagaimana data disimpan dan
dipelihara. Abstraksi data merupakan tingkatan/level dalam bagaimana melihat data
dalam sistemn basis data. Ada 3 level abstraksi data, yaitu :
1. Level Fisik (physical level)
Level ini merupakan level terendah dalam abstraksi data, yang menunjukkan
bagaimana sesungguhnya suatu data disimpan. Pada level ini pemakai melihat data

Praktikum Basis Data D3 REKMED FMIPA UGM 6


sebagai gabungan dari struktur dan datanya sendiri. Pemakai juga berkompeten dalam
mengetahui bagaimana representasi fisik dari penyimpanan/pengorganisasian data.
Pada level ini pemakai berurusan dengan data sebagai teks, angka atau bahkan
melihatnya sebagai hinpunan bit data.
2. Level Konseptual (conceptual level)
Level ini merupkan data apa yang sebenarnya (secara fungsional) disimpan dalam
basis data dan hubungannya dengan data yang lain. Pada level ini misalnya
mengetahui bahwa data pegawai disimpan/direpresentasikan dalam beberapa
file/tabel.
3. Level Penampakan (view level)
Level ini merupakan level tertinggi dari abstraksi data yang hanya menunjukkan
sebagian dari basis data. Banyak user dalam sistem basis data tidak akan terlibat
(concern) dengan semua data/informasi dalam basis data yang kemunculannya dimata
pemakai diatur oleh aplikasi end user. Data yang diperhatikan juga bisa saja tidak
berasal dari hanya sebuah tabel tapi mewakili relasi antar tabel, tapi bagi pemakai
menggunakannya terasa sebagai satu kesatuan yang kompak.

Perancangan Basis Data

Untuk merancang basis data kita perlu mengetahui terlebih dahulu komponen-komponen
basis data tersebut. Komponen yang paling penting adalah entitas dan atribut.
1. Entitas
Entitas digunakan untuk menerapkan integritas pada tingakt entity (tabel), agar setiap
instance (record/baris) pada sustu entity bersifat unique yang disebut sebagai primary
key sehingga dapat dibedakan antara yang satu dengan yang lainnya.
Contohnya :
• Semua pelanggan atau pelanggan saja dengan entitas Ani, Budi, Amin dan
seterusnya
• Semua mobil atau mobil apa saja dengan entitas mobil kijang, starlet dan lain-lain
• Semua mahasiswa atau mahasiswa saja dengan entitas Eti, Ahmad dll
2. Atribut

Praktikum Basis Data D3 REKMED FMIPA UGM 7


Setiap entitas pasti memiliki atribut yang mendeskripsikan karakteristik dari entitas
tersebut. Penentuan/pemilihan atribut-atribut yang relevan bagi sebuah entitas
merupakan hal penting lainnya dalam pembentukan model data. Penetapan atribut
bagi sebuah entitas umumnya memang didasarkan pada fakta yang ada. Tetapi tidak
selalu sepeti itu. Istilah atribut sebenarnya identik dengan pemakaian kolom data.
Macam-macam atribut :
• Atribut deskriptif
Adalah atribut-atribut yang tidak menjadi atau merupakan anggota dari primary
key. Contoh : atribut-atribut nama_mhs, alamat_mhs dan tanggal_lahir
• Atribut sederhana dan atribut komposit
Atribut sederhana adalah atribut atomic yang tidak dapat diuraikan lagi.
Sedangkan atribut komposit adalah atribut yang masih dapat diuraikan lagi
menjadi sub-sub atribut yang masing-masing memiliki makna.
Contoh atribut sederhana : atribut nama_mhs
Contoh atribut komposit : atribut alamat_mhs dimana alamat masih dapat
diuraikan lagi menjadi alamat, nama kota, kode pos yang masing-masing
memiliki makna
• Atribut bernilai tunggal dan atribut bernilai banyak
Atribut yang bernilai tunggal ditujukan pada atribut-atribut yang memiliki paling
banyak satu nilai untuk setiap basis data.
Contoh atribut bernilai tunggal : nim, nama_mhs, alamat_mhs dan tgl_lahir
karena atribut-atribut tersebut hanya dapat bernilai satu nilai.
Contoh atribut bernilai banyak : atribut hobi karena bisa diisi dengan banyak nilai.
Seseorang bisa memiliki hobi lebih dari satu.
• Atribut harus bernilai
Ada sejumlah atribut pada sebuah tabel yang kita tetapkan harus berisi data. Jadi
nilainya tidak boleh kosong (mandatory atribut).
Contoh : nim, nama_mhs karena setiap mahasiswa yang ingin datanya disimpan
di tabel tersebut paling tidak harus diketahui nama dan nimnya.
• Atribut turunan

Praktikum Basis Data D3 REKMED FMIPA UGM 8


Atribut turunan adalah atribut yang nilai-nilainya diperoleh dari pengolahan atau
dapat diturunkan dari atribut atau tabel lain yang berhubungan. Contoh
penambahan atribut angkatan dan ip.
3. Normalisasi
Dalam perancangan basis data perlu dilakukan secara cermat agar dihasilkan basis
data yang kompak dan efisien dalam penggunaan ruang penyimpanan, cepat dalam
pengaksesan dan mudah dalam manipulasi data. Salah satu cara yang dapat dilakukan
dalam merancang basis data adalah dengan melakukan normalisasi.
Normalisasi adalah proses penyusunan tabel-tabel yang tidak redundant (dobel), yang
dapat menyebabkan anomaly pada saat terjadi operasi manipulasi data seperti tambah,
ubah dan hapus. Anomali yaitu proses basis data yang memberikan efek samping
yang tidak diharapkan (misalnya menyebabkan ketidakkonsistenan data atau
membuat sesuatu data menjadi hilang ketika data lain dihapus).
Sebuah tabel dikategorikan efisien atau normal jika telah mengalami tiga criteria,
yaitu:
1. jika ada dekomposisi tabel dimana dekomposisinya dijamin aman (Lossless Join
Decomposition). Dekomposisi adalah proses pemisahan satu tabel menjadi dua
atau lebih tabel baru.
2. terpeliharanya ketergantungan fungsional pada saat perubahan data (dependency
preservation)
3. tidak melanggar Boyce-Codd Normal Form (BCNF)

Tahap-tahap Normalisasi
1. membawa suatu relasi tak ternomalisasi ke bentuk normal kesatu (1NF) dengan cara
menghapus semua pengulangan group dan mungkin diperlukan pemecahan relasi
menjadi 2 atau lebih. Pada langkah ini diperlukan pula penentuan kunci primer
(primary key). Suatu relasi dikatakan berada dalam bentuk normal kesatu (1NF) bila
tidak terjadi pengulangan group atau semua data bersifat atomic.
2. menghilangkan ketergantungan parsial atribut yaitu merubah/memecah relasi
sehingga semua atribut bergantung fungsi kepada kunci primer. Ini disebut bentuk
normal kedua (2NF).

Praktikum Basis Data D3 REKMED FMIPA UGM 9


3. mengeliminasi ketergantungan transitif yaitu merubah/memecah sebagai relasi
sehingga semua atribut yang bukan kunci tergantung fungsi secara penuh kepada
kunci primer/tidak ada ketergantungan parsial yaitu ketergantungan atribut kepada
atribut yang bukan kunci. Ini disebut bentuk normal ketiga (3NF).
Contoh :
Terdapat suatu informasi seperti berikut ini :
ISBN Judul Halaman Topik
979-533-791-2 PHP 631 Pemrograman
Internet
979-522-897-1 MySQL dan PHP 500 Basisdata
Pemrograman

Bentuk normal pertama


ISBN Judul Halaman Topik
979-533-791-2 PHP 631 Pemrograman
979-533-791-2 PHP 631 Internet
979-522-897-1 MySQL dan PHP 500 Basisdata
979-522-897-1 MySQL dan PHP 500 Pemrograman

Bentuk normal kedua


ISBN Judul Halaman
979-533-791-2 PHP 631
979-522-897-1 MySQL dan PHP 500

ISBN Topik
979-533-791-2 Pemrograman
979-533-791-2 Internet
979-522-897-1 Basisdata
979-522-897-1 Pemrograman

Praktikum Basis Data D3 REKMED FMIPA UGM 10


BAB II

PERANCANGAN BASIS DATA DI MySQL

Materi :
2.1 Membuat Database
2.2 Membuat Tabel
2.3 Relasi

MySQL merupakan software sistem manajemen database (Database Management


System,DBMS) yang sangat popular. MySQL bersifat open source. Website MySQL
www.mysql.com menyediakan informasi terkini tentang MySQL.

Pengelolaan database dapat dilakukan dengan menggunakan perintah-perintah SQL


(Struktur Query Language), bahasa yang khusus digunakan untuk melakukan akses
database relasional.
Perintah SQL dikelompokkan menjadi :
1. DDL (Data Definition Language)
DDL merupakan perintah yang digunakan untuk membuat dan mendefinisikan
database dan struktur datanya.
2. DML (Data Manipulation Language)
DML adalah perintah yang digunakan untuk melakukan manipulasi atau pengelolaan
data yang ada dalam database.
3. DCL (Data Control Language)

Membuat Database

Praktikum Basis Data D3 REKMED FMIPA UGM 11


Dalam membuat database, yang sangat penting untuk diperhatikan adalah penulisan nama
database tidak boleh menggunakan spasi dan karakter non standar. Bentuk penulisan
untuk membuat database adalah :
CREATE DATABASE nama_database;

Sebagai contoh untuk membuat sebuah database yang diberi nama db_karyawan,
syntaxnya adalah sebagai berikut :
mysql> CREATE DATABASE db_karyawan;
Query OK, 1 row affected (0.06 sec)

Catatan :
‰ Dalam penulisan nama database tidak diperbolehkan menggunakan spasi atau
karakter khusus lainnya.
‰ Nama sebuah database tidak boleh diawali dengan angka

Melihat database
Untuk melihat database yang baru saja dibuat atau database lain yang ada dalam server,
dapat menggunakan perintah SHOW. Bentuk penulisan untuk melihat database yang ada di
server adalah sebagai berikut :
SHOW DATABASES;
Contoh :
mysql> SHOW DATABASES;
+------------------------------------------+
| Database |
+------------------------------------------+
| information_schema |
| camels |
| db_karyawan |
| konsultasi |
| mysql |
| pasar |
| pasar_3 |
| phpmyadmin |
| sim_pasar |
| simpasar |
| test |
| tuxpaint |
+------------------------------------------+
12 rows in set (0.01 sec)

Praktikum Basis Data D3 REKMED FMIPA UGM 12


Mengaktifkan database
Setelah database dibuat, untuk dapat menggunakannya diperlukan perintah USE. Perintah
ini selalu digunakan setiap user/pengguna akan mengakses table-table yang ada di
dalamnya. Struktur penulisannya adalah sebagai berikut:
USE nama_database;

Sebagai contoh :
mysql> USE db_karyawan;
Database changed

Menghapus database
Untuk menghapus database yang tidak dipakai atau database yang rusak, pengguna dapat
mengunakan perintah DROP. Struktur penulisan untuk menghapus database adalah sebagai
berikut :
DROP DATABASE nama_database;

Contoh :
mysql> DROP DATABASE db_karyawan;
Query OK, 0 rows affected (0.09 sec)

Tabel
1. membuat tabel
Perlu diperhatikan dalam pembuatan tabel, apakah database sudah diaktifkan
sebelumnya. Jika belum, aktifkan database tersebut atau buat database baru jika
belum tersedia. Hal ini dilakukan agar tabel yang akan dibuat mempunyai tempat
dalam database. Tabel sebagai tempat penampungan data mempunyai dua bagian
utama yaitu nama dan tipe data. Tipe data yang bisa digunakan dalam MySQL dapat
dilihat dibawah ini.
Tipe data untuk bilangan
Tipe Data Keterangan
TINYINT Ukuran 1 byte. Bilangan bulat terkecil, dengan jangkauan
untuk bilangan bertanda: -128 sampai dengan 127 dan untuk
yang tidak bertanda : 0 sampai dengan 255. Bilangan tak
bertanda ditandai dengan tanda UNSIGNED
SMALLINT Ukuran 2 byte. Bilangan bulat dengan jangkauan untuk
bilangan bertanda : -32768 sampai dengan 32767 dan untuk

Praktikum Basis Data D3 REKMED FMIPA UGM 13


yang tidak bertanda : 0 sampai dengan 65535.
MEDIUMINT Ukuran 3 byte. Bilangan bulat dengan jangkauan untuk
bilangan bertanda : -8388608 sampai dengan 8388607 dan
untuk bertanda : 0 sampai dengan 16777215
INT Ukuran 4 byte. Bilangan bulat dengan jangkauan untuk
bilangan bertanda : - 2147483648 sampai dengan 2147483647
dan untuk yang tidak bertanda : 0 sampai dengan 4294967295
INTEGER Ukuran 4 byte. Sinonim dari INT
BIGINT Ukuran 8 byte. Bilangan bulat terbsar dengan jangkauan
untuk bilangan bertanda : -9223372036854775808 sampai
dengan 9223372036854775807 dan untuk yang tidak bertanda
: 0 sampai dengan 18446744073709551615
FLOAT Ukuran 4 byte. Bilangan pecahan
DOUBLE Ukuran 8 byte. Bilangan pecahan
DOUBLE PRECISION Ukuran 8 byte. Bilangan pecahan berpresisi ganda
REAL Ukuran 8 byte. Sinonim dari DOUBLE
DECIMAL(M,D) Ukuran M byte. Bilangan pecahan. Misalnya DECIMAL(5,2)
dapat digunakan untuk menyimpan bilangan -99,99 sampai
dengan 99,99
NUMERICAL(M,D) Ukuran M byte. Sinonim dari DECIMAL. Misalnya
NUMERICAL(5,2) dapat digunakan untuk menyimpan
bilangan -99,99 sampai dengan 99,99

Tipe data untuk tanggal dan jam


Tipe Data Keterangan
DATETIME Ukuran 8 byte. Kombinasi tanggal dan jam, dengan jangkauan
dari ‘100-01-01 00:00:00’ sampai dengan ‘9999-12-31
23:59:59’
DATE Ukuran 3 byte. Tanggal dengan jangkauan dari ‘100-01-01’
sampai dengan ‘9999-12-31’
TIMESTAMP Ukuran 4 byte. Kombinasi tanggal dan jam dengan jangkauan
‘1970-01-01 00:00:00’ sampai dengan tahun 2037
TIME Ukuran 3 byte. Waktu dengan jangkauan dari ‘-838:59:59’
sampai dengan ‘838:59:59’
YEAR Ukuran 1 byte. Data tahun antara 1901 sampai dengan 2155

Tipe data untuk karakter dan lain-lain


Tipe Data Keterangan
CHAR(M) Ukuran M byte, 1 ≤ M ≤ 255 . Data string dengan panjang
yang tetap. CHAR(1) cukup ditulis dengan CHAR.
VARCHAR(M) Ukuran L=1 byte dengan L ≤ M dan 1 ≤ M ≤ 255 . Data
string dengan panjang bervariasi, tergantung datanya
TINYBLOB, L+1 byte, dengan L < 2 8 . Tipe TEXT atau BLOB dengan

Praktikum Basis Data D3 REKMED FMIPA UGM 14


TINYTEXT panjang maksimum 255 karakter
BLOB,TEXT L+2 byte, dengan L < 216 . Tipe TEXT atau BLOB dengan
panjang maksimum 65535 karakter
MEDIUMBLOB, L+3 byte, dengan L < 2 24 . Tipe TEXT atau BLOB dengan
MEDIUMTEXT panjang maksimum 16777215 karakter
LONGBLOB, L+4 byte, dengan L < 2 32 . Tipe TEXT atau BLOB dengan
LONGTEXT panjang maksimum 4294967295 karakter
ENUM(‘nilai1’, Ukuran 1 atau 2 byte tergantung jumlah enumerasinya
’nilai2’,…) (maksimum 65535 nilai)
SET(‘nilai1’, 1, 2, 3, 4 atau 8 byte, tergantung jumlah anggota himpunan
‘nilai2’, …) (maksimum 64 anggota)

Di dalam database db_karyawan dibuat 4 tabel yaitu pribadi, pekerjaan, bagian


dan gaji. Hubungan keempat tabel ini adalah sebagai berikut :

pribadi

PK nip bagian

nama PK kode_bagian
alamat
kota nama_bagian
kelamin
tgl_lahir

pekerjaan
gaji
PK,FK3 nip
PK gol
FK1 kode_bagian
FK2 gol gaji_pokok
jabatan tunj_gol

Berikut ini perintah SQL untuk membuat tabel-tabelnya :


ƒ Perintah untuk membuat tabel pribadi :
mysql> CREATE TABLE pribadi (
-> nip SMALLINT PRIMARY KEY,
-> nama CHAR(25),
-> alamat CHAR(35),
-> kota CHAR(15),
-> kelamin ENUM('P','W'),
-> tgl_lahir DATE);

Praktikum Basis Data D3 REKMED FMIPA UGM 15


Query OK, 0 rows affected (0.26 sec)

Keterangan :
Æ field nip didefinisikan bertipe SMALLINT dan berkedudukan sebagai kunci
primer
Æ field nama bertipe CHAR yang dapat menampung hingga 25 karakter
Æ field alamat bertipe CHAR yang dapat menampung hingga 35 karakter
Æ field kota bertipe CHAR yang dapat menampung hingga 15 karakter
Æ field kelamin bertipe ENUM yang dapat menampung huruf P (menyatakan pria)
dan W (menyatakan wanita)
Æ field tgl_lahir bertipe DATE yang menyatakan tanggal lahir

ƒ Perintah untuk membuat tabel pekerjaan :


mysql> CREATE TABLE pekerjaan (
-> nip SMALLINT PRIMARY KEY,
-> kode_bagian CHAR,
-> gol CHAR(2),
-> jabatan CHAR(15));
Query OK, 0 rows affected (0.12 sec)

Keterangan :
Æ field nip didefinisikan bertipe SMALLINT dan berkedudukan sebagai primary key
Æ field kode_bagian bertipe CHAR yang menampung sebuah karakter
Æ filed gol bertipe CHAR yang dapat menampung hingga 2 karakter
Æ field jabatan bertipe CHAR yang dapat menampung hingga 15 karakter

ƒ Perintah untuk membuat tabel bagian :


mysql> CREATE TABLE bagian (
-> kode_bagian CHAR PRIMARY KEY,
-> nama_bagian CHAR(12));
Query OK, 0 rows affected (0.11 sec)

Keterangan :
Æ field kode_bagian didefinisikan bertipe CHAR dengan panjang sebuah karakter
dan berkedudukan sebagai primary key
Æ field nama_bagian bertipe CHAR yang menampung hingga 12 karakter

Praktikum Basis Data D3 REKMED FMIPA UGM 16


ƒ Perintah untuk membuat tabel gaji :
mysql> CREATE TABLE gaji (
-> gol CHAR(2) PRIMARY KEY,
-> gaji_pokok INTEGER UNSIGNED,
-> tunj_gol INTEGER UNSIGNED);
Query OK, 0 rows affected (0.15 sec)

Keterangan :
Æ field gol didefinisikan bertipe CHAR dengan panjang 2 karakter dan
berkedudukan sebagai kunci primer
Æ field gaji_pokok bertipe INTEGER
Æ field tunj_gol bertipe INTEGER
Æ UNSIGNED menyatakan bilangan tak bertanda (artinya hanya bilangan positif)
Gunakan perintah
SHOW TABLES ;

untuk melihat tabel-tabel yang telah dibuat.


mysql> SHOW TABLES;
+------------------------------------------+
| Tables_in_db_karyawan |
+------------------------------------------+
| bagian |
| gaji |
| pekerjaan |
| pribadi |
+------------------------------------------+
4 rows in set (0.04 sec)

2. melihat struktur tabel


Perintah
DESCRIBE nama_tabel;

digunakan untuk melihat struktur tabel yang telah dibuat. Namun sebelumnya
pastikan sudah berada pada database yang mempunyai tabel tersebut. Perhatikan
contoh di bawah ini :
mysql> DESCRIBE pribadi;
+------------------+----------------------------+-------------------+-------+-----------------------+---------+
| Field | Type | Null | Key | Default | Extra |
+------------------+----------------------------+-------------------+-------+-----------------------+---------+
| nip | smallint(6) | NO | PRI | NULL | |

Praktikum Basis Data D3 REKMED FMIPA UGM 17


| nama | char(25) | YES | | NULL | |
| alamat | char(35) | YES | | NULL | |
| kota | char(15) | YES | | NULL | |
| kelamin | enum('P','W') | YES | | NULL | |
| tgl_lahir | date | YES | | NULL | |
+------------------+----------------------------+-------------------+--------+----------------------+---------+
6 rows in set (0.15 sec)

3. mengubah struktur tabel


Jika struktur tabel yang telah dibuat terdapat kesalahan atau menginginkan
penggantian, dapat menggunakan perintah alter untuk mengubahnya. Ada empat
macam perubahan dalam struktur tabel, yaitu :
‰ perubahan nama field/kolom
perubahan yang terjadi hanya sebatas pada nama field/kolom saja. Nama field/kolom
yang lama diganti dengan nama filed/kolom yang baru
Struktur penulisan:
ALTER TABLE nama_tabel CHANGE nama_field_lama nama_filed_baru
tipe_data;

Contoh :
Mengubah field nama_bagian menjadi nama_departemen.
mysql> ALTER TABLE bagian CHANGE nama_bagian nama_departemen CHAR(12);
Query OK, 0 rows affected (0.39 sec)
Records: 0 Duplicates: 0 Warnings: 0

‰ perubahan tipe data


perubahan yang terjadi hanya terbatas pada tipe data yang digunakan oleh field/kolom
tertentu. Tipe data yang baru langsung disebutkan dibelakang nama field/kolom,
tanpa harus menyebutkan tipe data yang lama. Struktur penulisan:
ALTER TABLE namatabel MODIFY nama_field tipe_data_baru;

Contoh :
Mengubah tipe data nama_departemen dari CHAR(12) menjadi VARCHAR(20)
mysql> ALTER TABLE bagian MODIFY nama_departemen VARCHAR(20);
Query OK, 0 rows affected (0.28 sec)
Records: 0 Duplicates: 0 Warnings: 0

‰ penambahan field

Praktikum Basis Data D3 REKMED FMIPA UGM 18


struktur tabel akan tambah dengan bertambahnya field/kolom baru didalamnya.
Struktur penulisan :
ALTER TABLE nama_tabel ADD nama_field tipe_data_baru;

Contoh :
Menambahkan field bonus pada tabel gaji
mysql> ALTER TABLE gaji ADD bonus INTEGER UNSIGNED;
Query OK, 0 rows affected (0.32 sec)
Records: 0 Duplicates: 0 Warnings: 0

‰ penghapusan field
struktur tabel mengalamai perubahan akibat berkurangnya field/kolom tertentu.
Struktur penulisan :
ALTER TABLE nama_tabel DROP COLUMN namafield;

Contoh :
Menghapus field bonus pada tabel gaji.
mysql> ALTER TABLE gaji DROP COLUMN bonus;
Query OK, 0 rows affected (0.28 sec)
Records: 0 Duplicates: 0 Warnings: 0

4. mengganti nama tabel


seringkali, penggantian tabel juga meliputi nama tabel itu sendiri. Struktur penulisan :
ALTER TABLE nama_tabel_lama RENAME nama_tabel_baru;

Contoh :
Mengubah nama tabel bagian menjadi departemen.
mysql> ALTER TABLE bagian RENAME departemen;
Query OK, 0 rows affected (0.07 sec)

5. menghapus tabel
tabel dapat saja dihapus karena sudah tidak dibutuhkan lagi atau terjadi kesalahan.
Perintah untuk menghapus tabel adalah drop table. Struktur penulisan :
DROP TABLE nama_tabel;

Contoh :
Menghapus tabel gaji.
mysql> DROP TABLE gaji;
Query OK, 0 rows affected (0.07 sec)

Praktikum Basis Data D3 REKMED FMIPA UGM 19


Relasi
Relasi dalam basis data digunakan untuk menghubungkan beberapa tabel, sehingga data-
data yang disimpan dalam tabel tetap normal. Dalam MySQL relasi antar tabel dapat
dibuat jika tipe tersebut innoDB. Secara otomatis saat membuat tabel baru, tipe tabel
tersebut adalah MyISAM. Untuk merubah ke tipe innoDB dapat menggunakan perintah
SQL sebagai berikut
Struktur penulisan :
ALTER TABLE name_tabel type=type_tabel;

Sebagai contoh pembuatan relasi dalam MySQL adalah sebagai berikut :


1. membuat tabel baru dan langsung direlasikan
mysql> CREATE TABLE pekerjaan(
-> nip SMALLINT PRIMARY KEY,
-> kode_bagian CHAR,
-> gol CHAR(2),
-> jabatan CHAR(15),
-> FOREIGN KEY(nip) REFERENCES pribadi(nip));
Query OK, 0 rows affected (0.14 sec)
2. membuat relasi pada tabel lama
Jika telah mempunyai tabel dalam database dan ingin direlasikan dengan tabel lain.
Struktur penulisannya adalah sebagai berikut :
ALTER TABLE nama_tabel ADD FOREIGN KEY (nama_field) REFERENCES
tabel_master(nama_field);

Contoh :
Field nip pada tabel pekerjaan direlasikan dengan field nip pada tabel pribadi.
mysql> ALTER TABLE pekerjaan ADD FOREIGN KEY (nip) REFERENCES
pribadi(nip);
Query OK, 0 rows affected (0.53 sec)
Records: 0 Duplicates: 0 Warnings: 0

Praktikum Basis Data D3 REKMED FMIPA UGM 20


BAB III

DATA MANIPULATION LANGUAGE (DML)

Materi :
3.1 Insert
3.2 Update
3.3 Delete
3.4 Select
3.5 Kondisi
3.6 View

Setelah struktur database dibuat dengan tabel-tabelnya maka berikutnya adalah


bagaimana melakukan pengisian, perbaikan, penghapusan, pengambilan dan pencarian
kembali data.

INSERT
Perintah :
INSRT INTO nama_tabel (field1 [,field2 [field3 [,…]]]) VALUES (nilai1
[,nilai2 [,nilai3 [,..]]]);

Nama_tabel adalah tabel yang akan diisi data. Field1, field2, field3,… adalah field-field
(kolom) dari tabel yang akan diisi. Nilai1, nilai2, nilai3, … adalah data yang akan
dimasukkan ke dalam tiap kolom yang disebutkan pada bagian field.
Penulisan nilai1, nilai2, nilai3,… disesuaikan dengan tipe datanya jika tipe data
merupakan kelompok tipe data karakter maka data harus diapit dengan menggunakan
tanda petik (apostrophe).
Contoh :
mysql> INSERT INTO pribadi(nip,nama,alamat,kota,kelamin,tgl_lahir)
-> VALUES (12340, 'Dian Sastro', 'Karangwaru II/3B', 'Yogya', 'W',
-> '1968/12/03');
Query OK, 1 row affected (0.17 sec)

Praktikum Basis Data D3 REKMED FMIPA UGM 21


Perintah insert dapat juga dituliskan langsung sebagai berikut :
INSERT INTO nama_tabel VALUES(nilai1 [,nilai2 [,..]]);

Penulisan tanpa menyebutkan nama field dapat diberikan apabila akan mengisi ke seluruh
field yang ada dalam tabel, urutan data dalam bagian values menunjukkan urutan field
yang akan diisi. Jadi harus hati-hati menggunakan perintah insert apabila tidak
menyatakan nama field karena bisa tertukar.
Contoh :
mysql> INSERT INTO pribadi
-> VALUES (12341, 'Hamdan Arif', 'Jl. Krapyak 2', 'Bantul', 'P',
-> '1964/05/12');
Query OK, 1 row affected (0.06 sec)

Kelebihan dengan menyebutkan nama field adalah kita tidak harus berurutan
menyebutkan nama field dan datanya pada saat mengisikan, yang penting adalah urutan
pasangan yang benar agar tidak tertukar.

UPDATE
Perintah :
UPDATE nama_tabel SET field1=nilai1 [,field2=nilai2 [,…]] [WHERE
kondisi];

Nama_tabel adalah nama dari tabel yang akan diperbaiki datanya. Field1 adalah nama
field dalam tabel yang akan diubah. Nilai1 adalah data yang akan dimasukkan ke dalam
field1. field2 dan nilai2 adalah nama field dan datanya, dan seterusnya. Kondisi adalah
criteria data dalam tabel yang akan diperbaiki.
Contoh :
mysql> UPDATE pribadi SET kota='Yogyakarta' WHERE kota='Yogya';
Query OK, 1 row affected (0.15 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Perintah update digunakan untuk memperbaiki data dalam satu record (baris) dalam satu
tabel. Perbaikan dapat dilakukan untuk satu record, beberapa atau seluruh record.
Hati-hati saat memberikan perintah update ini, jangan sampai lupa menuliskan kondisi
data dalam tabel yang akan diperbaiki datanya. Jika kondisi tidak dituliskan maka bisa
menyebabkan seluruh record dalam tabel akan diubah sesuai dengan field yang akan
diperbaiki datanya.

Praktikum Basis Data D3 REKMED FMIPA UGM 22


DELETE
Perintah:
DELETE FROM nama_tabel [WHERE kondisi];

Nama_tabel adalah nama tabel yang akan dihapus datanya. Kondisi adalah criteria data
dalam tabel yang akan dihapus.
Perintah delete digunakan untuk melakukan penghapusan record dari suatu tabel yang
memilik kondisi yang dinyatakan dalam pernyataan kondisi.
Hati-hati dalam memberikan perintah delete ini karena jika terlupa memberikan
pernyataan kondisi, perintah ini akan menyebabklan terhapusnya seluruh isi tabel.

SELECT
Perintah :
SELECT (* |field1 [,field2 [,…]]) FROM nama_tabel [WHERE kondisi];

Nama_tabel adalah nama tabel yang akan ditampung datanya. Field1, field2, … adalah
nama field yang akan ditampilkan datanya. * digunakan untuk menampilkan seluruh field
dari tabel. Kondisi adalah criteria data dalam tabel yang akan ditampilkan.
Contoh :
mysql> SELECT * FROM pribadi;
+-----------+-------------------+------------------------------+--------------------+--------------+----------------+
| nip | nama | alamat | kota | kelamin | tgl_lahir |
+----------+--------------------+-------------------------------+--------------------+-------------+-----------------+
| 12340 | Dian Sastro | Karangwaru II/3B | Yogyakarta | W | 1968-12-03 |
| 12341 | Hamdan Arif | Jl. Krapyak 2 | Bantul |P | 1964-05-12 |
+----------+---------------------+-----------------------------+--------------------+--------------+-----------------+
2 rows in set (0.01 sec)

Perintah select digunakan untuk menampilkan isi dari suatu tabel. Bentuk perintah di
atas adalah bentuk perintah select yang sederhana yang digunakan untuk menampilkan
data dari satu tabel saja. Perintah select ini dapat digunakan untuk menampilkan data dari
berbagai tabel.
Data dari tabel dapat dipilih filed mana saja yang akan ditampilkan, dinyatakan pada
pernyataan select. Jika ingin menampilkan seluruh field maka dapat digunakan tanda *
pada pernyataan select.

Praktikum Basis Data D3 REKMED FMIPA UGM 23


Kondisi pada perintah select digunakan untuk membatasi data yang akan ditampilkan
berdasarkan kriteria yang diinginkan pemakai.
ƒ Inner Join
Contoh :
SELECT pribadi.nip, pribadi.nama, pribadi.alamat, pribadi.kota, pribadi.kelamin,
pribadi.tgl_lahir, pekerjaan.kode_bagian, pekerjaan.gol, pekerjaan.jabatan FROM pribadi
INNER JOIN pekerjaan ON pribadi.nip=pekerjaan.nip;

nip nama alamat kota Kelamin tgl_lahir kode_bagian gol jabatan


Karangwaru
12340 Dian Sastro Yogya W 1968-12-03 1 5A Manajer
II/3B
Hamdan
12341 Jl. Krapyak 2 Bantul P 1964-05-12 2 5A Manajer
Arif
Restyo Adi Garuda
12342 Yogya P 1970-05-24 3 5A Manajer
Nugroho IV/10B
Jl. Cakrawala
12343 Sita Devi Yogya W 1968-12-03 4 5A Manajer
6
12344 Soemarno Jl. Jatiwangi 1 Yogya P 1969-11-13 5 5A Manajer
Wahyu Analis
12345 Jl. Paku 12 Yogya P 1972-12-23 5 4B
Budi Sistem
Hasta
12346 Jl. Surya 12 Yogya P 1974-10-11 2 4A Staff
Nugraha
Riwin
12347 Jl. Jago I/3 Yogya P 1971-04-01 1 4A Staff
Mirhadi
Jl. Abimanyu
12348 Triana Sleman W 1973-06-23 3 4A Staff
7
12349 Iswahyudi Jl. Semar 4 Bantul P 1971-02-24 5 3A Pemrogram
Setya
12350 Jl. Karsa 103 Klaten P 1979-11-04 2 3A Staff
Abadi
Rita
12351 Jl. Dargo 6 Yogya W 1971-08-01 2 3A Sekretaris
Setyawati
12352 Rifan Jl. Selo 12A Bantul P 1980-02-24 3 2A Pemasar
Jl. Jogolawang
12353 Wawan Yogya P 1977-04-04 3 2A Pemasar
III/1B
12354 Anjasmara Jl. Selo 12A Bantul P 1978-09-04 3 2A Pemasar
Jl. Ratna
12355 Hapsari Yogya W 1977-04-04 3 2A Pemasar
Manikam 4
Astuti Jl. Warna
12356 Yogya W 1981-12-24 3 2A Pemasar
Rianawati Ceria 75
Jl. Hanoman
12357 Jaswadi Yogya P 1975-10-04 3 2A Pemasar
34
12358 Arswendo Jl. Hanoman Yogya P 1975-10-04 3 4A Asisten

Praktikum Basis Data D3 REKMED FMIPA UGM 24


nip nama alamat kota Kelamin tgl_lahir kode_bagian gol jabatan
34 Manajer
Jl. Hayam
Asisten
12359 Ratna Sari Wuruk III No. Yogya W 1979-08-01 4 4A
Manager
4
Karang
Sinung Asisten
12360 Malang RT Bantul P 1978-11-14 2 4A
Wikantoro Manager
04/ RW 07
Jl. Bina Marga
12361 Dahlan Yogya P 1982-06-06 5 3A Pemrogram
5
Retno Gambiran
12362 Yogya W 1980-01-27 4 3A Staff
Wulandari IV/7

ƒ Straight Join
Straight join identik dengan join.
SELECT pribadi.nip, pribadi.nama, pribadi.alamat, pribadi.kota, pribadi.kelamin,
pribadi.tgl_lahir, pekerjaan.kode_bagian, pekerjaan.gol, pekerjaan.jabatan FROM pribadi
STRAIGHT_JOIN pekerjaan ON pribadi.nip=pekerjaan.nip;

nip nama alamat kota kelamin tgl_lahir kode_bagian gol jabatan


Karangwaru
12340 Dian Sastro Yogya W 1968-12-03 1 5A Manajer
II/3B
Hamdan
12341 Jl. Krapyak 2 Bantul P 1964-05-12 2 5A Manajer
Arif
Restyo Adi Garuda
12342 Yogya P 1970-05-24 3 5A Manajer
Nugroho IV/10B
Jl. Cakrawala
12343 Sita Devi Yogya W 1968-12-03 4 5A Manajer
6
12344 Soemarno Jl. Jatiwangi 1 Yogya P 1969-11-13 5 5A Manajer
Wahyu Analis
12345 Jl. Paku 12 Yogya P 1972-12-23 5 4B
Budi Sistem
Hasta
12346 Jl. Surya 12 Yogya P 1974-10-11 2 4A Staff
Nugraha
Riwin
12347 Jl. Jago I/3 Yogya P 1971-04-01 1 4A Staff
Mirhadi
Jl. Abimanyu
12348 Triana Sleman W 1973-06-23 3 4A Staff
7
12349 Iswahyudi Jl. Semar 4 Bantul P 1971-02-24 5 3A Pemrogram
12350 Setya Abadi Jl. Karsa 103 Klaten P 1979-11-04 2 3A Staff
Rita
12351 Jl. Dargo 6 Yogya W 1971-08-01 2 3A Sekretaris
Setyawati
12352 Rifan Jl. Selo 12A Bantul P 1980-02-24 3 2A Pemasar

Praktikum Basis Data D3 REKMED FMIPA UGM 25


nip nama alamat kota kelamin tgl_lahir kode_bagian gol jabatan
Jl. Jogolawang
12353 Wawan Yogya P 1977-04-04 3 2A Pemasar
III/1B
12354 Anjasmara Jl. Selo 12A Bantul P 1978-09-04 3 2A Pemasar
Jl. Ratna
12355 Hapsari Yogya W 1977-04-04 3 2A Pemasar
Manikam 4
Astuti Jl. Warna
12356 Yogya W 1981-12-24 3 2A Pemasar
Rianawati Ceria 75
Jl. Hanoman
12357 Jaswadi Yogya P 1975-10-04 3 2A Pemasar
34
Jl. Hanoman Asisten
12358 Arswendo Yogya P 1975-10-04 3 4A
34 Manajer
Jl. Hayam
Asisten
12359 Ratna Sari Wuruk III No. Yogya W 1979-08-01 4 4A
Manager
4
Karang
Sinung Asisten
12360 Malang RT Bantul P 1978-11-14 2 4A
Wikantoro Manager
04/ RW 07
Jl. Bina Marga
12361 Dahlan Yogya P 1982-06-06 5 3A Pemrogram
5
Retno
12362 Gambiran IV/7 Yogya W 1980-01-27 4 3A Staff
Wulandari

ƒ Left (outer) Join


Left outer join akan menampilkan tabel di sebelah kanannya dengan NULL jika tidak
terdapat hubungan dengan tabel di sebelah kiri.
SELECT pribadi.nip, pribadi.nama, pribadi.alamat, pribadi.kota, pribadi.kelamin,
pribadi.tgl_lahir, pekerjaan.kode_bagian, pekerjaan.gol, pekerjaan.jabatan FROM pribadi
LEFT JOIN pekerjaan ON pribadi.nip=pekerjaan.nip;

nip nama alamat kota kelamin tgl_lahir kode_bagian gol jabatan


Karangwaru
12340 Dian Sastro Yogya W 1968-12-03 1 5A Manajer
II/3B
Hamdan
12341 Jl. Krapyak 2 Bantul P 1964-05-12 2 5A Manajer
Arif
Restyo Adi Garuda
12342 Yogya P 1970-05-24 3 5A Manajer
Nugroho IV/10B
Jl. Cakrawala
12343 Sita Devi Yogya W 1968-12-03 4 5A Manajer
6
12344 Soemarno Jl. Jatiwangi 1 Yogya P 1969-11-13 5 5A Manajer
Wahyu Analis
12345 Jl. Paku 12 Yogya P 1972-12-23 5 4B
Budi Sistem

Praktikum Basis Data D3 REKMED FMIPA UGM 26


nip nama alamat kota kelamin tgl_lahir kode_bagian gol jabatan
Hasta
12346 Jl. Surya 12 Yogya P 1974-10-11 2 4A Staff
Nugraha
Riwin
12347 Jl. Jago I/3 Yogya P 1971-04-01 1 4A Staff
Mirhadi
Jl. Abimanyu
12348 Triana Sleman W 1973-06-23 3 4A Staff
7
12349 Iswahyudi Jl. Semar 4 Bantul P 1971-02-24 5 3A Pemrogram
12350 Setya Abadi Jl. Karsa 103 Klaten P 1979-11-04 2 3A Staff
Rita
12351 Jl. Dargo 6 Yogya W 1971-08-01 2 3A Sekretaris
Setyawati
12352 Rifan Jl. Selo 12A Bantul P 1980-02-24 3 2A Pemasar
Jl. Jogolawang
12353 Wawan Yogya P 1977-04-04 3 2A Pemasar
III/1B
12354 Anjasmara Jl. Selo 12A Bantul P 1978-09-04 3 2A Pemasar
Jl. Ratna
12355 Hapsari Yogya W 1977-04-04 3 2A Pemasar
Manikam 4
Astuti Jl. Warna
12356 Yogya W 1981-12-24 3 2A Pemasar
Rianawati Ceria 75
Jl. Hanoman
12357 Jaswadi Yogya P 1975-10-04 3 2A Pemasar
34
Jl. Hanoman Asisten
12358 Arswendo Yogya P 1975-10-04 3 4A
34 Manajer
Jl. Hayam
Asisten
12359 Ratna Sari Wuruk III No. Yogya W 1979-08-01 4 4A
Manager
4
Karang
Sinung Asisten
12360 Malang RT Bantul P 1978-11-14 2 4A
Wikantoro Manager
04/ RW 07
Jl. Bina Marga
12361 Dahlan Yogya P 1982-06-06 5 3A Pemrogram
5
Retno
12362 Gambiran IV/7 Yogya W 1980-01-27 4 3A Staff
Wulandari

ƒ Right (outer) Join


Kebalikan dengan left outer join, jika data di sebelah kanan tabel tidak dapat menemukan
hubungannya dengan tabel disebelah kiri, akan ditampilkn NULL.
SELECT pribadi.nip, pribadi.nama, pribadi.alamat, pribadi.kota, pribadi.kelamin,
pribadi.tgl_lahir, pekerjaan.kode_bagian, pekerjaan.gol, pekerjaan.jabatan FROM pribadi
RIGHT JOIN pekerjaan ON pribadi.nip=pekerjaan.nip;
nip nama alamat kota kelamin tgl_lahir kode_bagian gol jabatan
12340 Dian Sastro Karangwaru Yogya W 1968-12-03 1 5A Manajer

Praktikum Basis Data D3 REKMED FMIPA UGM 27


nip nama alamat kota kelamin tgl_lahir kode_bagian gol jabatan
II/3B
Hamdan
12341 Jl. Krapyak 2 Bantul P 1964-05-12 2 5A Manajer
Arif
Restyo Adi Garuda
12342 Yogya P 1970-05-24 3 5A Manajer
Nugroho IV/10B
Jl. Cakrawala
12343 Sita Devi Yogya W 1968-12-03 4 5A Manajer
6
12344 Soemarno Jl. Jatiwangi 1 Yogya P 1969-11-13 5 5A Manajer
Wahyu Analis
12345 Jl. Paku 12 Yogya P 1972-12-23 5 4B
Budi Sistem
Hasta
12346 Jl. Surya 12 Yogya P 1974-10-11 2 4A Staff
Nugraha
Riwin
12347 Jl. Jago I/3 Yogya P 1971-04-01 1 4A Staff
Mirhadi
Jl. Abimanyu
12348 Triana Sleman W 1973-06-23 3 4A Staff
7
12349 Iswahyudi Jl. Semar 4 Bantul P 1971-02-24 5 3A Pemrogram
12350 Setya Abadi Jl. Karsa 103 Klaten P 1979-11-04 2 3A Staff
Rita
12351 Jl. Dargo 6 Yogya W 1971-08-01 2 3A Sekretaris
Setyawati
12352 Rifan Jl. Selo 12A Bantul P 1980-02-24 3 2A Pemasar
Jl. Jogolawang
12353 Wawan Yogya P 1977-04-04 3 2A Pemasar
III/1B
12354 Anjasmara Jl. Selo 12A Bantul P 1978-09-04 3 2A Pemasar
Jl. Ratna
12355 Hapsari Yogya W 1977-04-04 3 2A Pemasar
Manikam 4
Astuti Jl. Warna
12356 Yogya W 1981-12-24 3 2A Pemasar
Rianawati Ceria 75
Jl. Hanoman
12357 Jaswadi Yogya P 1975-10-04 3 2A Pemasar
34
Jl. Hanoman Asisten
12358 Arswendo Yogya P 1975-10-04 3 4A
34 Manajer
Jl. Hayam
Asisten
12359 Ratna Sari Wuruk III No. Yogya W 1979-08-01 4 4A
Manager
4
Karang
Sinung Asisten
12360 Malang RT Bantul P 1978-11-14 2 4A
Wikantoro Manager
04/ RW 07
Jl. Bina Marga
12361 Dahlan Yogya P 1982-06-06 5 3A Pemrogram
5
Retno
12362 Gambiran IV/7 Yogya W 1980-01-27 4 3A Staff
Wulandari

Praktikum Basis Data D3 REKMED FMIPA UGM 28


ƒ Natural (Right|Left (Outer)) Join
SELECT pribadi.nip, pribadi.nama, pribadi.alamat, pribadi.kota, pribadi.kelamin,
pribadi.tgl_lahir, pekerjaan.kode_bagian, pekerjaan.gol, pekerjaan.jabatan FROM pribadi
NATURAL RIGHT JOIN pekerjaan

nip nama alamat kota kelamin tgl_lahir kode_bagian gol jabatan


Karangwaru
12340 Dian Sastro Yogya W 1968-12-03 1 5A Manajer
II/3B
Hamdan
12341 Jl. Krapyak 2 Bantul P 1964-05-12 2 5A Manajer
Arif
Restyo Adi
12342 Garuda IV/10B Yogya P 1970-05-24 3 5A Manajer
Nugroho
12343 Sita Devi Jl. Cakrawala 6 Yogya W 1968-12-03 4 5A Manajer
12344 Soemarno Jl. Jatiwangi 1 Yogya P 1969-11-13 5 5A Manajer
Analis
12345 Wahyu Budi Jl. Paku 12 Yogya P 1972-12-23 5 4B
Sistem
Hasta
12346 Jl. Surya 12 Yogya P 1974-10-11 2 4A Staff
Nugraha
Riwin
12347 Jl. Jago I/3 Yogya P 1971-04-01 1 4A Staff
Mirhadi
12348 Triana Jl. Abimanyu 7 Sleman W 1973-06-23 3 4A Staff
12349 Iswahyudi Jl. Semar 4 Bantul P 1971-02-24 5 3A Pemrogram
12350 Setya Abadi Jl. Karsa 103 Klaten P 1979-11-04 2 3A Staff
Rita
12351 Jl. Dargo 6 Yogya W 1971-08-01 2 3A Sekretaris
Setyawati
12352 Rifan Jl. Selo 12A Bantul P 1980-02-24 3 2A Pemasar
Jl. Jogolawang
12353 Wawan Yogya P 1977-04-04 3 2A Pemasar
III/1B
12354 Anjasmara Jl. Selo 12A Bantul P 1978-09-04 3 2A Pemasar
Jl. Ratna
12355 Hapsari Yogya W 1977-04-04 3 2A Pemasar
Manikam 4
Astuti Jl. Warna Ceria
12356 Yogya W 1981-12-24 3 2A Pemasar
Rianawati 75
12357 Jaswadi Jl. Hanoman 34 Yogya P 1975-10-04 3 2A Pemasar
Asisten
12358 Arswendo Jl. Hanoman 34 Yogya P 1975-10-04 3 4A
Manajer
Jl. Hayam
Asisten
12359 Ratna Sari Wuruk III No. Yogya W 1979-08-01 4 4A
Manager
4
Sinung Karang Malang Asisten
12360 Bantul P 1978-11-14 2 4A
Wikantoro RT 04/ RW 07 Manager

Praktikum Basis Data D3 REKMED FMIPA UGM 29


nip nama alamat kota kelamin tgl_lahir kode_bagian gol jabatan
Jl. Bina Marga
12361 Dahlan Yogya P 1982-06-06 5 3A Pemrogram
5
Retno
12362 Gambiran IV/7 Yogya W 1980-01-27 4 3A Staff
Wulandari

Kondisi
Kondisi yang dibentuk pada perintah-perintah SQL dapat dalam criteria yang sifatnya
pembandingan dengan menggunakan tanda= untuk mencari suatu record.
LIKE merupakan kata kunci dalam SQL yang digunakan untuk mendefinisikan suatu
criteria yang lebih luwes (fleksibel). Kondisi yang dinyatakan dengan menggunakan
LIKE dapat memfilter data sehingga kita dapat menampilkan suatu criteria seolah dengan
menggunakan bahasa inggris.
Criteria yang dibentuk juga dapat digunakan untuk melakukan pemfilteran data secara
mudah dengan menggunakan tanda %, yang memerintahkan agar database mencari
semua data yang memiliki karakter apa saja, karena % mewakili karakater apa saja.
Perintah dengan kondisi LIKE
SELECT * FROM nama_tabel WHERE nama_field LIKE ‘data_yang_dicari’;

Contoh :
mysql> SELECT * FROM pribadi WHERE kota LIKE 'Yogyakarta';
+----------+------------------+-----------------------------+------------------+-------------+-----------------+
| nip | nama | alamat | kota | kelamin | tgl_lahir |
+----------+------------------+-----------------------------+------------------+-------------+-----------------+
| 12340 | Dian Sastro | Karangwaru II/3B | Yogyakarta | W | 1968-12-03 |
+-----------+-----------------+-----------------------------+------------------+-------------+-----------------+
1 row in set (0.00 sec)

Perintah ini akan menampilkan seluruh record dalam tabel yang memiliki data dalam
nama field yang disebutkan sama dengan ‘data_yang_dicari’. Perintah ini sama seperti
menggunakan perintah select yang menggunakan tanda sama dengan pada bagian
kondisi.
SELECT * FROM nama_tabel WHERE nama_field LIKE ‘data_yang_dicari%’;

Contoh :
mysql> SELECT * FROM pribadi WHERE kota LIKE 'Ban%';

Praktikum Basis Data D3 REKMED FMIPA UGM 30


+----------+---------------------+---------------------+----------+-------------+-----------------+
| nip | nama | alamat | kota | kelamin | tgl_lahir |
+----------+---------------------+---------------------+-----------+------------+-----------------+
| 12341 | Hamdan Arif | Jl. Krapyak 2 | Bantul | P | 1964-05-12 |
+----------+---------------------+---------------------+-----------+------------+------------------+
1 row in set (0.00 sec)

Perintah ini akan menampilkan seluruh record dalam tabel yang memiliki data dalam
nama_field yang disebutkan diawali deangan ‘data_yang_dicari’.

SELECT * FROM nama_tabel WHERE nama_field LIKE ‘%data_yang_dicari’;

Contoh :
mysql> SELECT * FROM pribadi WHERE kota LIKE '%tul';
+----------+---------------------+---------------------+----------+-------------+-----------------+
| nip | nama | alamat | kota | kelamin | tgl_lahir |
+----------+---------------------+---------------------+-----------+------------+-----------------+
| 12341 | Hamdan Arif | Jl. Krapyak 2 | Bantul | P | 1964-05-12 |
+----------+---------------------+---------------------+-----------+------------+------------------+
1 row in set (0.00 sec)

Perintah ini akan menampilkan seluruh record dalam tabel yang memiliki data dalam
nama_field yang disebutkan pada bagian akhirnya ada ‘data_yang_dicari’.

SELECT * FROM nama_tabel WHERE nama_field LIKE ‘%data_yang_dicari%’;

Contoh :
mysql> SELECT * FROM pribadi WHERE kota LIKE '%ntu%';
+----------+---------------------+---------------------+----------+-------------+-----------------+
| nip | nama | alamat | kota | kelamin | tgl_lahir |
+----------+---------------------+---------------------+-----------+------------+-----------------+
| 12341 | Hamdan Arif | Jl. Krapyak 2 | Bantul | P | 1964-05-12 |
+----------+---------------------+---------------------+-----------+------------+------------------+
1 row in set (0.00 sec)

Perintah ini akan menampilkan seluruh record dalam tabel yang data dalam nama_field
yang disebutkan mengandung ‘data_yang_dicari’. % di awal dan % di akhir
menunjukkan agar database mencarikan semua record yang di awal atau di akhir data
pada nama field yang disebutkan terdiri atas karakter apa saja asalkan ada
‘data_yang_dicari’ dalam field tersebut.

Praktikum Basis Data D3 REKMED FMIPA UGM 31


VIEW
CREATE VIEW nama_view AS ekspresi_Query;

Nama_view adalah nama dari view yang akan dibuat. Ekspresi_Query adalah perintah
select dan kondisi query yang ditentukan sama seperti halnya pada saat kita melakukan
perintah select dengan menggunakan kondisi (criteria).
Contoh :
mysql> CREATE VIEW karyawan_bantul(nip,nama) AS SELECT nip,nama FROM
pribadi
-> WHERE kota='Bantul';
Query OK, 0 rows affected (0.08 sec)

Untuk menampilkan view :


mysql> SELECT * FROM karyawan_bantul;
+-----------+-----------------------------+
| nip | nama |
+----------+------------------------------+
| 12341 | Hamdan Arif |
+----------+------------------------------+
1 row in set (0.00 sec)

View mempermudah proses select, jika ada perintah join maka perintah tersebut sudah
disimpan dalam definisi view. Adanya view memungkinkan kita untuk melakukan proses
pemfilteran lebih rinci, karena hasil dari suatu view dapat dianggap sebagai tabel virtual.
Sebagai suatu tabel virtual, view akan memiliki kolom-kolom yang sesuai dengan nama-
nama kolom yang ada pada ekspresi query.
View merupakan alias yang berupa isi sebagian suatu tabel atau gabungan beberapa tabel
yang disederhanakan proses pembacaannya.
Pembuatan view seringkali berhubungan dengan masalah keamanan agar pengakses data
tidak perlu mengetahui secara fisik ada di mana data tersebut berada dan apa criteria yang
digunakan untuk membuat view tersebut, sehingga sebagian pemakai hanya diberikan
akses hanya kepada view.

Praktikum Basis Data D3 REKMED FMIPA UGM 32


Praktikum Basis Data D3 REKMED FMIPA UGM 33
BAB IV

FUNGSI MYSQL

Materi :
4.1 Fungsi Sistem
4.2 Fungsi Agregat
4.3 Fungsi Matematika
4.4 Fungsi String
4.5 Fungsi Tanggal
4.6 Fungsi Logika

Fungsi (function) merupakan fasilitas yang disediakan oleh database secara umum untuk
memanipulasi data yang kompleks, seperti mencari jumlah data, mencari rata-rata nilai
yang ada dalam suatu tabel dan lain-lain, bukan hanya sekedar membaca data dari tabel
saja. Fungsi adalah suatau rutin khusus yang disediakan oleh MySQL untuk melakukan
manipulasi suatu data.

Secara anatomi maka suatu fungsi terdiri atas nama fungsi diikuti dengan parameter
(argument) fungsi yang diapit dalam tanda kurung. Tidak ada spasi antara nama fungsi
dengan tanda kurung pembuka. Berikut adalah bentuk umum fungsi dalam MySQL :
Namafungsi([argument_1 [,argument_2 [,…]]])
Argument_1,argument_2,… adalah argument atau parameter yang dibutuhkan oleh
fungsi. Jumlah parameter telah didefinisikan oleh sistem, harus dilihat pada manual
database.
Fungsi digunakan (disertakan) sebagai bagian dari suatu perintah query SQL (select).
Secara umum fungsi dinyatakan dalam SQL select adalah sebagai berikut :
SELECT fungsi (ekspresi) [FROM namatabel];

FROM namatabel tidak harus diberikan dalam MySQL.

Praktikum Basis Data D3 REKMED FMIPA UGM 34


Fungsi dalam MySQL seperti halnya perintah SQL dapat dituliskan dalam huruf besar
ataupun huruf kecil.
Fungsi dalam MySQL dibedakan menjadi :
• Fungsi sistem
• Fungsi agregat
• Fungsi aritmatika
• Fungsi string
• Fungsi tanggal
• Fungsi logika
Pengelompokkan fungsi di atas didasarkan pada kegunaan dari fungsi-fungsi tersebut.

Fungsi Sistem
Kelompok fungsi sistem adalah kelompok yang memberikan informasi tentang
pemakaian server database oleh pemakai. Kelompok ini terdiri atas :
‰ DATABASE()
Fungsi ini digunakan untuk memberikan informasi database apa yang sedang digunakan
oleh pemakai.
‰ LAST_INSSERT_ID()
Digunakan untuk menampilkan informasi data yang telah dihasilkan (digenerate) oleh
MySQL pada kolom yang menggunakan tipe data AUTOINCREMENT.
‰ SESSION_USER()
Fungsi yang digunakan untuk menampilkan informasi pemakai yang sedang melakukan
akses ke dalam server MySQL saat ini. Fungsi ini kadang digunakan oleh pemakai untuk
mengetahui siapa yang sedang login ke dalam MySQL pada suatu terminal yang sedang
ditinggalkan oleh pemakai lain atau kadang juga kita ingin tahu kita sedang mengakses
MySQL dengan nama pemakai yang mana, karena kita memiliki banyak nama pemakai
berbeda-beda privilege-nya demi keamanan.
‰ SYSTEM_USER()
Fungsi ini sama dengan fungsi SESSION_USER()
‰ USER()
Fungsi ini sama dengan fungsi SESSION_USER() dan SYSTEM_SESSION().

Praktikum Basis Data D3 REKMED FMIPA UGM 35


‰ VERSION()
Fungsi ini digunakan untuk mengetahui versi server MySQL yang sedang digunakan saat
ini.
‰ BENCHMARK(x,ekspresi)
Mengerjakan perintah pada ekspresi sejumlah count kali. Nilai yang dihasilkan selalu 0.
Hal penting dari fungsi ini adalah nilai waktu yang digunakan (elapsed time) yang
diberikan pada bagian akhir, memungkinkan kita menilai berapa cepat server
mengevaluasi query.
‰ LOAD_FILE(nama_file)
Digunakan untuk membuka file dan memberikan isinya sebagai string. File harus ada
dalam server dan pemakai untuk menggunakan fungsi ini memiliki privelege File.
Contoh :
mysql> SELECT VERSION(), DATABASE(), USER();
+--------------------------------+-----------------------+------------------------+
| VERSION() | DATABASE() | USER() |
+--------------------------------+-----------------------+------------------------+
| 5.0.22-community-nt | db_karyawan | root@localhost |
+--------------------------------+-----------------------+------------------------+
1 row in set (0.00 sec)

Fungsi Agregat
Fungsi agregat adalah fungsi standar di dalam SQL, suatu fungsi yang digunakan untuk
melakukan summary, merupakan fungsi stastistik standar yang dikenakan pada suatu
tabel atau query.
‰ AVG(ekspresi)
Fungsi ini digunakan untuk mencari rata-rata nilai dalam suatu kolom dari satu tabel atau
ekspresi. Ekspresi dalam fungsi AVG umumnya adalah nama kolom. Kolom yang dicari
nilai rata-ratanya adalah kolom dengan tipe data numerik.
Nilai rata-rata yang dihasilkan oleh fungsi ini tidak melibatkan dalam perhitungannya
baris yang memiliki nilai pada kolom yang dicari rata-ratanya bernilai NULL.
‰ COUNT(x)
Fungsi ini digunakan untuk menghitung jumlah record (baris) dari suatu kolom atau suatu
tabel. X adalah nama kolom dari tabel yang diinginkan dicari jumlah record (baris)nya
‰ MAX(ekspresi)

Praktikum Basis Data D3 REKMED FMIPA UGM 36


Fungsi ini digunakan untuk mencari nilai terbesar dari suatu kolom dari suatu tabel atau
ekspresi. Kolom yang dicari nilai terbesarnya memiliki tipe data numerik.
Fungsi MAX() tidak melibatkan dalam perhitungannya, data yang bernilai NULL dari
suatu baris yang kolomnya memiliki nilai NULL.
‰ MIN(ekspresi)
Fungsi MIN() merupakan lawan dari fungsi MAX(). Fungsi ini mencari nilai terkecil dari
suatu kolom dalam suatu tabel atau ekspresi.
‰ STD(ekspresi) dan STDDEV(ekspresi)
Fungsi ini digunakan untuk mendapatkan standar deviasi dari data suatu kolom dalam
tabel. Ekspresi umumnya menyatakan kolom suatu tabel dengan tipe datanya numerik.
‰ SUM(ekspresi)
Fungsi ini digunakan untuk mendapatkan nilai total dari suatu kolom suatu tabel atau
ekspresi.
Contoh :
mysql> SELECT COUNT(*) FROM pribadi;
+------------------+
| COUNT(*) |
+------------------+
| 23 |
+------------------+
1 row in set (0.00 sec)

mysql> SELECT MAX(gaji_pokok) FROM gaji;


+----------------------------+
| MAX(gaji_pokok) |
+----------------------------+
| 1800000 |
+----------------------------+
1 row in set (0.02 sec)

mysql> SELECT MIN(gaji_pokok) FROM gaji;


+---------------------------+
| MIN(gaji_pokok) |
+---------------------------+
| 350000 |
+---------------------------+
1 row in set (0.00 sec)

Praktikum Basis Data D3 REKMED FMIPA UGM 37


Fungsi Aritmetika
MySQL memiliki fasilitas dasar untuk melakukan manipulasi data numerik, seperti
penjumlahan, pengurangan, perkalian dan pembagian yang disertakan dalam suatu
perintah select. Fasilitas tersebut dikenal dengan operator aritmatika.
• Penjumlahan(+)
Digunakan untuk menjumlahkan dua buah data numerik, hasil dari operasi ini adalah data
numerik juga.
mysql> SELECT 5+23;
+---------+
| 5+23 |
+---------+
| 28 |
+--------+
1 row in set (0.00 sec)

• Pengurangan(-)
Digunakan untuk melakukan operasi pengurangan dua buah data numerik, bilangan yang
disebelah kiri dikurangi dengan bilangan yang disebelah kanan. Hasil dari operasi ini
adalah data numerik.
mysql> SELECT 20-5;
+--------+
| 20-5 |
+--------+
| 15 |
+--------+
1 row in set (0.00 sec)

• Perkalian(*)
Digunakan untuk melakukan operasi perkalian dua data numerik. Hasil dari operasi ini
adalah data numerik juga.
mysql> SELECT 3*4;
+-----+
| 3*4 |
+-----+
| 12 |
+-----+
1 row in set (0.00 sec)

Praktikum Basis Data D3 REKMED FMIPA UGM 38


• Pembagian(/)
Digunakan untuk melakukan operasi pembagian dua data numerik. Bilangan di sebelah
kiri dibagi dengan bilangan yang ada disebelah kanan operator, hasil dari operasi ini
adalah data numerik.
mysql> SELECT 10/2;
+--------+
| 10/2 |
+--------+
| 5.0000 |
+--------+
1 row in set (0.03 sec)

• Pembagian sisa(%)
Digunakan untuk mendapatkan sisa pembagian dari suatu operasi pembagian, bilangan di
sebelah kiri dibagi dengan bilangan disebelah kanan, sisa dari hasil pembagian ini yang
menjadi hasil dari operasi ini. Operasi pembagian sisa biasa disebut modulus.
mysql> SELECT 10%2;
+------+
| 10%2 |
+------+
| 0|
+------+
1 row in set (0.02 sec)

Fungsi Tanggal
Tanggal dalam MySQL menggunakan tanggal dari sistem Unix, tidak ada masalah
sampai dengan 2069. Semua tahun yang dinyatakan dengan dua digit diasumsikan tahun
tersebut pada range tanggal antara tahun 1970 sampai dengan 2069. Jika dimasukkan
tahun 01 maka akan dianggap tahun 2001.
Format tanggal dan jam dalam MySQL adalah dengan menggunakan format tahun, bulan,
tangal, jam, menit dan detik
yyyy-mm-dd HH:ii:ss
yyyy adalah tahun dalam format angka
mm adalah nomor bulan dalam format 2 angka
dd adalah tanggal dalam bulan dengan format 2 angka
HH adalah jam dalam format jam 00-23

Praktikum Basis Data D3 REKMED FMIPA UGM 39


ii adalah menit dalam format 00-59
ss adalah detik dalam format 00-59
Berikut ini fungsi built-in untuk data tanggal dalam MySQL :
‰ ADDDATE(date, INTERVAL ekspresi_interval)
‰ CURDATE() dan CURRENT_DATE()
‰ CURTIME() dan CURRENT_TIME()
‰ CURRENT_TIMESTAMP()
‰ DATE_ADD(date, INTERVAL ekspresi_interval)
‰ DATE_FORMAT(date, simbolformat)
‰ DATE_SUB(date, INTERVAL ekspresi_interval)
‰ DAYNAME(date)
‰ DAYOFMONTH(date)
‰ DAYOFWEEK(date)
‰ DAYOFYEAR(date)
‰ EXTRACT(value FROM date)
‰ FROM_DAYS(days)
‰ FROM_UNIXTIME(unixtime[,simbolformat])
‰ HOUR(time)
‰ MINUTE(time)
‰ MONTH(date)
‰ MONTHNAME(date)
‰ NOW()
‰ PERIOD_ADD(x,y)
‰ PERIOD_DIFF(x,y)
‰ QUARTER(date)
‰ SECOND(time)
‰ SEC_TO_TIME(second)
‰ SUBDATE()
‰ SYSDATE()
‰ TIME_FORMAT(time,simbolformat)
‰ TIME_TO_SEC(time)

Praktikum Basis Data D3 REKMED FMIPA UGM 40


‰ TO_DAYS(date)
‰ UNIX_TIMESTAMP([date])
‰ WEEK(date[,start])
‰ WEEKDAY(date)
‰ YEAR(date)
Contoh :
mysql> SELECT NOW();
+-------------------------------+
| NOW() |
+-------------------------------+
| 2007-08-02 06:35:43 |
+-------------------------------+
1 row in set (0.12 sec)

Fungsi String
Fungsi string digunakan untuk manipulasi teks (string). MySQL menyediakan banyak
fungsi built-in untuk melakukan manipulasi teks ini. Berikut ini adalah daftar fungsi
string yang telah disediakan :
• ASCII(x)
• CHAR(x,y,z,…)
• CHARACTER_LENGTH, CHAR_LENGTH
• COALES(ekspresi1, ekspresi2, …)
• CONCAT(x,y,z,…)
• DECODE(string_biner,string_enkripsi)
• ELT(x,a,b,c,…)
• ENCODE(owrd,string_enkripsi)
• ENCRYPT(word[,seed])
• FIELD(x,y,z,…)
• FIND_IN_SET(x,stringlist)
• INSERT(x,y,z,j)
• INSTR(x,y)
• LCASE(x)
• LEFT(x,y)

Praktikum Basis Data D3 REKMED FMIPA UGM 41


• LENGTH(x)
• LOAD_FILE(namafile)
• LOCATE(x,y,z)
• LOWER(x)
• LPAD(x,y,z)
• LTRIM(x)
• MID(x,y,z)
• OCTET_LENGTH()
• PASSWORD(password)
• POSITION(x,y)
• REPEAT(x,y)
• REPLACE(x,y)
• REVERSE(x)
• RIGHT(string,length)
• RPAD(x,y,z)
• RTRIM(x)
• SOUNDEX(x)
• SPACE(x)
• STRCMP(string1,string2)
• SUBSTRING_INDEX(x,y,z)
• TRIM([[BOTH OR LEADING or TRAILING][x] FROM] y)
• UCASE(x)
• UPPER(x)

Fungsi Logika
Fungsi logika merupakan fungsi yang disediakan oleh MySQL untuk melakukan evaluasi
suatu ekspresi. Berdasarkan nilai ekspresi ini akan dihasilkan suatu nilai yang akan
ditampilkan pada hasil query.
Berikut adalah fungsi built-in yang disediakan untuk melakukan evaluasi ekspresi :
‰ IF(ekspresi1, ekspresi2, ekspresi3)

Praktikum Basis Data D3 REKMED FMIPA UGM 42


Fungsi if() mengevaluasi ekspresi1, jika ekspresi1 bernilai benar(true) maka ekspresi2
akana menjadi hasil, jika ekspresi1 bernilai salah (false) maka ekspresi3 akan menjadi
hasilnya.
mysql> SELECT IF(1,"Benar","Salah");
+--------------------------------+
| IF(1,"Benar","Salah") |
+--------------------------------+
| Benar |
+---------------------------------+
1 row in set (0.00 sec)

‰ IFNULL(ekspresi1, ekspresi2)
Fungsi ini akan mengevaluasi ekspresi1, jika ekspresi1 berisi NULL, maka ekspresi2
menjadi hasilnya, sedangkan jika ekspresi1 bukan NULL maka ekspresi1 itu sendiri yang
menjadi hasilnya
mysql> SELECT IFNULL(gol,"6A") FROM gaji WHERE tunj_gol="1200000";
Empty set (0.00 sec)

‰ ISNULL(ekspresi)
Menghasilkan nilai 1 jika ekspresi bernilai NULL, nilai 0 jika ekspresi salah
mysql> SELECT ISNULL(gol) FROM gaji WHERE tunj_gol="1200000";
Empty set (0.00 sec)

Praktikum Basis Data D3 REKMED FMIPA UGM 43


BAB V

STORE PROCEDURE

Materi :
5.1 Membuat Store Prosedur
5.2 Alter Procedure
5.3 Call Procedure
5.4 Drop Procedure

Store procedure adalah pernyataan SQL yang dapat disimpan didalam server. Sekali store
prosedur itu dijalankan, klien tidak perlu membuat lagi tetapi cukup memanggil store
procedure yang ada.

Membuat Store Prosedur


Perintah :
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body

CREATE
[DEFINER = { user | CURRENT_USER }]
FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body

proc_parameter:
[ IN | OUT | INOUT ] param_name type

func_parameter:
param_name type

type:
Any valid MySQL data type

characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

Praktikum Basis Data D3 REKMED FMIPA UGM 44


| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'

routine_body:
Valid SQL procedure statement

Secara default, rutin dihubungkan dengan database default. Untuk menghubungkan rutin
secara eksplisit dengan databases yang diberikan, sebutkan nama db_name.sp_name
ketika menciptakan rutin.
Secara default, masing-masing parameter adalah parameter IN. Untuk menentukan
parameter lainnya, gunakan kata kunci OUT atau INOUT sebelum nama parameter.
RETURNS hanya digunakan untuk fungsi. Hal itu mengindikasikan tipe kembalian dari

fungsi, dan fungsi harus berisi pernyataan RETURN value.


routine_body terdiri dari pernyataan SQL yang valid. Dapat berupa pernyataan yang

sederhana seperti SELECT atau INSERT, atau dapat berupa pernyataan yang banyak ditulis
dengan menggunakan BEGIN…END.
Jika tidak disebutkan DETERMINISTIC atau NOT DETERMINISTIC maka defaultnya
adalah NOT DETERMINISTIC.
mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
-> RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT hello('world');

+----------------+
| hello('world') |
+----------------+
| Hello, world! |
+----------------+
1 row in set (0.03 sec)

ALTER STORE PROCEDURE


Perintah yang digunakan untuk mengubah karakteristik dari sebuah store prosedure
adalah :
ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]

characteristic:
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'

Praktikum Basis Data D3 REKMED FMIPA UGM 45


Pernyataan CALL
Pernyataan CALL meminta sebuah prosedur yang telah didefinisikan sebelumnya melalui
pernyataan CREATE PROCEDURE.
CALL sp_name([parameter[,...]])

Contoh :
mysql> delimiter //
mysql> CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param
INT)
-> BEGIN
-> # Set value of OUT parameter
-> SELECT VERSION() INTO ver_param;
-> # Increment value of INOUT parameter
-> SET incr_param = incr_param + 1;
-> END;
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> SET @increment = 10;//
Query OK, 0 rows affected (0.00 sec)

mysql> CALL p(@version, @increment);//


Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @version, @increment;//


+---------------------+------------+
| @version | @increment |
+---------------------+------------+
| 5.0.22-community-nt | 11 |
+---------------------+------------+
1 row in set (0.00 sec)

DROP Prosedur
Perintah yang digunakan untuk menghapus store prosedur adalah :
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

Contoh :
mysql> DROP PROCEDURE p;
-> //

Praktikum Basis Data D3 REKMED FMIPA UGM 46


Query OK, 0 rows affected (0.01 sec)
BAB VI

TRIGGER

Materi :
6.1 Membuat Trigger
6.2 Menghapus Trigger

Trigger berisi program yang dihubungkan dengan suatu tabel yang secara otomatis
melakukan suatu tindakan ketika suatu baris di dalam tabel dikenai operasi.

Membuat Trigger
Sintax :
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
Trigger diasosiasikan dengan sebuah tabel yang bernama tbl_name, yang harus berupa
tabel permanen, tidak boleh berupa tabel sementara atau view.
Ketika trigger diaktifkan, DEFINER memperkirakan privilege yang berlaku untuk user
tersebut.
Triger_time adalah waktu aksi bagi trigger, dapat berupa BEFORE atau AFTER yang
mengindikasikan bahwa trigger aktif sebelum atau sesudah pernyataan yang
mengaktifkan trigger.
Trigger_event mengindikasikan macam pernyataan yang mengaktifkan trigger, yaitu :
‰ INSERT. Trigger aktif ketika sebuah baris baru dimasukkan ke dalam tabel melalui

pernyataan INSERT, LOAD DATA dan REPLACE


‰ UPDATE. Trigger aktif ketika sebuah baris data dirubah melalui pernyataan UPDATE

Praktikum Basis Data D3 REKMED FMIPA UGM 47


‰ DELETE. Trigger aktif ketika sebuah baris dihapus dari tabel melalui pernyataan

DELETE atau REPLACE. Meskipun demikian, DROP TABLE dan TRUNCATE pada sebuah

tabel tidak mengaktifkan trigger karena tidak menggunakan pernyataan DELETE.


trigger_stmt adalah pernyataan yang dieksekusi ketika trigger aktif. Jika ingin
mengeksekusi multiple pernyataan digunakan BEGIN … END.
Contoh :
mysql> CREATE TABLE test1(a1 INT);
Query OK, 0 rows affected (0.61 sec)

mysql> CREATE TABLE test2(a2 INT);


Query OK, 0 rows affected (0.08 sec)

mysql> CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY


KEY);
Query OK, 0 rows affected (0.17 sec)

mysql> CREATE TABLE test4(


-> a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> b4 INT DEFAULT 0
-> );
Query OK, 0 rows affected (0.11 sec)

mysql> DELIMITER |
mysql>
mysql> CREATE TRIGGER testref BEFORE INSERT ON test1
-> FOR EACH ROW BEGIN
-> INSERT INTO test2 SET a2 = NEW.a1;
-> DELETE FROM test3 WHERE a3 = NEW.a1;
-> UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
-> END;
-> |
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> DELIMITER ;

mysql> INSERT INTO test3 (a3) VALUES


-> (NULL), (NULL), (NULL), (NULL), (NULL),
-> (NULL), (NULL), (NULL), (NULL), (NULL);
Query OK, 10 rows affected (0.03 sec)
Records: 10 Duplicates: 0 Warnings: 0

mysql> INSERT INTO test4 (a4) VALUES


-> (0), (0), (0), (0), (0), (0), (0), (0), (0), (0);
Query OK, 10 rows affected (0.03 sec)
Records: 10 Duplicates: 0 Warnings: 0

Praktikum Basis Data D3 REKMED FMIPA UGM 48


mysql> INSERT INTO test1 VALUES
-> (1), (3), (1), (7), (1), (8), (4), (4);
Query OK, 8 rows affected (0.06 sec)
Records: 8 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM test1;


+------+
| a1 |
+------+
| 1|
| 3|
| 1|
| 7|
| 1|
| 8|
| 4|
| 4|
+------+
8 rows in set (0.03 sec)

mysql> SELECT * FROM test2;


+------+
| a2 |
+------+
| 1|
| 3|
| 1|
| 7|
| 1|
| 8|
| 4|
| 4|
+------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM test3;


+----+
| a3 |
+----+
| 2|
| 5|
| 6|
| 9|
| 10 |
+----+
5 rows in set (0.00 sec)

mysql> SELECT * FROM test4;


+----+------+
| a4 | b4 |

Praktikum Basis Data D3 REKMED FMIPA UGM 49


+----+------+
| 1| 3|
| 2| 0|
| 3| 1|
| 4| 2|
| 5| 0|
| 6| 0|
| 7| 1|
| 8| 1|
| 9| 0|
| 10 | 0 |
+----+------+
10 rows in set (0.01 sec)

Menghapus Trigger
Perintah :
DROP TRIGGER [schema_name.]trigger_name
Contoh :
mysql> DROP TRIGGER testref;
Query OK, 0 rows affected (0.02 sec)

Praktikum Basis Data D3 REKMED FMIPA UGM 50


BAB VII

GRANT/REVOKE

Materi :
7.1 Privilege
7.2 Pengelolaan User dengan DML
7.3 Pengelolaan User dengan DCL

Salah satu fungsi administrasi yang harus dilakukan agar MySQL dapat digunakan secara
aman, dalam pengertian harus ada pengaturan siapa saja yang berhak mengakses sistem
database adalah mengkonfigurasi bagaimana server mengelola pemakainya (kliennya).

Privilege
Privilege adalah hak dan wewenang yang diberikan kepada pemakai yang telah
didefinisikan untuk mengakses dan mengelola database MySQL. Privilege dalam bahasa
yang lebih sederhana adalah hak akses atau permission.

Privilege melakukan pengaturan hak siapa saja yang boleh mengakses data, data mana
saja yang bisa dilihat oleh user. Privilege setiap pemakai berbeda-beda, ditentukan oleh
yang berwenang dalam hal ini ditentukan oleh super user database.

MySQL menggunakan tabel-tabel khusus untuk melakukan pengeloaan pemakai dan


privilege-nya, yaitu :
‰ Table db
Berisi informasi database mana saja yang bisa diakses oleh setiap pemakai dan dari
komputer mana
‰ Tabel user
Digunakan untuk menyimpan data pemakai database dan data privilege-nya pada saat
melakukan akses ke dalam database.
‰ Tabel host

Praktikum Basis Data D3 REKMED FMIPA UGM 51


Digunakan untuk menyimpan informasi komputer mana saja yang dapat mengakses
database MySQL, siapa nama pemakainya.
‰ Tabel tables_priv
Tabel ini menyimpan informasi privilege pemakai pada level tabel.
‰ Tabel column_priv
Tabel ini digunakan untuk menyimpan informasi privilege pemakai sampai pada level
kolom (field).

Struktur tabel
Saat pertama kali MySQL diaktifkan maka akan ada dua database penting yaitu database
mysql dan test. Database mysql adalah database sistem, database yang berisi informasi
yang digunakan oleh server MySQL untuk melakukan kendali terhadap siapa saja yang
bisa mengakses server MySQL dan dari mana saja, kemudian apa saja hak (privilege)
yang diberikan oleh pemakai tersebut pada saat telah berada dalam lingkungan MySQL.
Tabel user
Data yang dimasukkan ke dalam tabel user:
1. host, data alamat komputer yang bisa digunakan untuk mengakses server database
Host merupakan alamat komputer atau nama komputer yang digunakan untuk
mengakses server MySQL. Alamat komputer didefinisikan dengan menggunakan
nomor IP atau nama server. Alamat IP dapat juga dinyatakan dengan tanda % untuk
menyatakan semua nomor IP.
2. user, nama pemakai
Dalam field user disimpan nama pemakai atau userid sebagai identifikasi pemakai
(user identification, atau userid), pengenal yang digunakan untuk melakukan
otentikasi untuk mengakses ke dalam server MySQL.
3. password, password untuk pemakai
Password adalah kata sandi yang digunakan oleh setiap pemakai untuk memverifikasi
bahwa userid yang dimasukkan tadi memang sah milik pemakai tersebut.
4. privilege-privilege untuk pemakai tersebut di dalam mengakses dan mengelola data
dalam server MySQL.

Praktikum Basis Data D3 REKMED FMIPA UGM 52


Field lain dari tabel user ini adalah informasi privilege yang diberikan kepada host
untuk mengakses database yang didefinisikan.
Berikut ini adalah daftar field yang menunjukkan privilege :
Nama Field Kegunaan
Select_priv Digunakan untuk mendefinisikan hak untuk melakukan query yang
menggunakan perintah Select
Insert_priv Mendefinisikan hak untuk dapat melakukan penambahan data
Update_priv Mendefinisikan hak untuk dapat melakukan perubahan data
Delete_priv Mendefinisikan hak untuk dapat melakukan penghapusan tabel
Create_priv Mendefinisikan hak untuk dapat membuat tabel atau database baru
Drop_priv Mendefinisikan hak untuk dapat menghapus tabel atau database
Grant_priv Hak untuk dapat memberikan privilege kepada pemakai lain. Privilege
ini sebaiknya diberikan kepada pemakai dengan level administrator
Index_priv Hak untuk dapat melakukan pembuatan, perubahan, dan penghapusan
index
Alter_priv Hak untuk mengubah struktur tabel
Reload_priv Mendefinisikan apakah pemakai berhak mengaktifkan definisi privilege
yang diacu database secara lansung atau tidak. Menentukan pemakai
boleh memberikan perintah FLUSH PRIVELEGES atau tidak
Shutdown_priv Menentukan apakah pemakai boleh mematikan server atau tidak
Process_priv Mendefinisikan agar pemakai dapat mematikan proses-proses yang
dibuat oleh MySQL
File_priv Mendefinisikan apakah pemakai dapat melakukan opearsi file di dalam
server atau tidak, seperti perintah untuk melakukan LOAD DATA
INFILE

Field-field untuk privilege diisi dengan data ‘Y’ atau ‘N’. jika diisi ‘Y’ maka pada
record tersebut diijinkan untuk memiliki privilege tersebut, sebaliknya jika diisi ‘N’
maka record tersebut tidak memiliki privilege.

Tabel db
Struktur tabel db hampir sama dengan tabel user, hanya saja tabel db memiliki tambahan
field yaitu field db. Field db digunakan untuk mendefinisikan nama tabel yang dapat
diakses oleh setiap pemakai, dari host mana dan apa saja privilegenya.

Praktikum Basis Data D3 REKMED FMIPA UGM 53


Tabel host
Tabel ini digunakan untuk memudahkan pendefinisian akses kepada suatu database dari
suatu host, sehingga entri dalam tabel db tidak perlu mendefinisikan nama host, cukup
pada tabel host saja didefinisikan, field host pada tabel db dapat dikosongkan.

Tabel tables_priv
Tabel tables_priv mendefinisikan privilege lebih detail untuk seorang pemakai pada level
tabel mana saja yang diberikan privilegenya kepada pemakai tersebut dan privilege apa
yang dimiliki.
Host adalah nama host untuk mengakses database
Db adalah nama database yang didefinisikan.
User mendefinisikan pemakai yang diberi privelege untuk tabel yang didefinisikan.
Table_name mendefinisikan nama tabel yang didefinisikan
Grantor adalah pemakai yang memberikan privilege kepada pemakai
Timestamp mencatat kapan (waktu) perubahan dilakukan.

Tabel columns_priv
Isi tabel columns_priv seperti halnya tables_priv, digunakan untuk lebih merinci lagi
privilege yang dimiliki oleh seseorang pemakai sampai dengan level kolom dari suatu
tabel.

Pengelolaan Pemakai dengan menggunakan DML


Pengelolaan privilege pemakai meliputi penambahan, perubahan dan penghapusan data
pemakai disertai dengan penentuan privilegenya.

Menambah pemakai
Penambahan pemakai dilakukan dengan memasukkan data pemakai ke dalam tabel user
yang ada pada database mysql.
Proses menambahkan pemakai langsung dengan menggunakan perintah sebagai berikut:
INSERT INTO USER (Host,User) VALUES (‘alamatkomputer’,’namapemakai’);

Praktikum Basis Data D3 REKMED FMIPA UGM 54


Contoh :
mysql> INSERT INTO user(Host,User)VALUES('localhost','praktikan');
Query OK, 1 row affected, 3 warnings (0.05 sec)

Mendefinisikan privilege pemakai


Pendefinisian privilege pemakai dengan SQL adalah dengan memberikan perintah update
untuk suatu record dalam tabel user, dengan kriteria user sama dengan pemakai yang
didefinisikan.
Perintah :
UPDATE user
SET NamaKol1_priv=’Y’ [,NamaKol2_priv=’Y’[,…]]
WHERE User=’namapemakai’;

Nama tabel adalah nama tabel tempat didefinisikannya privilege untuk pemakai atau
komputer untuk suatu database atau tabel.
NamaKol_priv adalah nama-nama kolom yang digunakan untuk mendefinisikan privilege
seperti Select_priv, Update_priv dan lainnya.
Namapemakai adalah nama pemakai yang akan diubah privilege
Contoh
mysql> UPDATE user SET Select_priv='Y' WHERE User='praktikan';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Pencabutan privilege
Perintah :
UPDATE user
SET NamaKol1_priv=’N’ [,NamaKol2_priv=’N’[,…]]
WHERE User=’namapemakai’;

Namatabel adalah nama tabel tempat didefinisikannya privelege untuk pemakai atau
komputer untuk suatu database atau tabel
NamaKol_priv adalah nama-nama kolom yang digunakan untuk mendefinisikan privilege
seperti Select_priv, Update_priv dan lainnya.
Namapemakai adalah nama pemaki yang diubah privilege.
Contoh :

Praktikum Basis Data D3 REKMED FMIPA UGM 55


mysql> UPDATE user SET Select_priv='N' WHERE User='praktikan';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Mendefinisikan database untuk pemakai


Perintah:
INSERT INTO db(Host,Db, User)
VALUES(‘namahost’,’namadatabase’,’namapemakai’);

Contoh :
mysql> INSERT INTO db(host,Db,User)VALUES('localhost','db_karyawan','praktikan');
Query OK, 1 row affected (0.00 sec)

Pengelolaan privilege dengan menggunakan DCL


Mendefinisikan pemakai dan privilegenya
Perintah :
GRANT [privileges] [nama-nama kolom]
ON namadatabase.namatabel
TO namapemakai@hostkomputer
IDENTIFIED BY “”password”
[WITH GRANT OPTION]

privileges adalah daftar privilege yang akan diberikan kepada pemakai


nama-nama kolom adalah nama-nama kolom/field dalam tabel
namadatabase adalah nama database yang akan diberikan
namatabel adalah nama tabel yang dari database yang diberikan
namapemakai adalah nama pemakai atau userid
hostkomputer adalah alamat komputer dari pemakai yang diberi hak
password adalah password untuk pemakai
Perintah grant secara otomatis akan menambah data pemakai apabila data nama pemakai
yang disertakan pada perintah grant tersebut belum ada dalam tabel user.
Contoh :
mysql> GRANT SELECT ON db_karyawan.* TO pemakai@localhost;
Query OK, 0 rows affected (0.04 sec)

mysql> SELECT * FROM user WHERE user="pemakai" \G;


*************************** 1. row **************************
Host: localhost

Praktikum Basis Data D3 REKMED FMIPA UGM 56


User: pemakai
Password:
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
1 row in set (0.01 sec)

mysql> SELECT * FROM db WHERE user="pemakai" \G;


*************************** 1. row ***************************
Host: localhost
Db: db_karyawan
User: pemakai
Select_priv: Y
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Grant_priv: N
References_priv: N

Praktikum Basis Data D3 REKMED FMIPA UGM 57


Index_priv: N
Alter_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Execute_priv: N
1 row in set (0.03 sec)

Macam privilege dalam grant


Nama Privilege Penjelasan
ALL Digunakan untuk memberikan semua privilege kepada pemakai
ALTER Privilege yang diberikan agar pemakai dapat melakukan perubahan
pada tabel dan indeks
CREATE Privilege yang memungkinkan pemakai untuk membuat tabel atau
database
DROP Memungkinkan pemakai untuk menghapus tabel atau database
FILE Privilege yang diberikan kepada pemakai agar dapat melakukan
proses menulis dan membaca file dalam server
INDEX Privilege yang diberikan kepada pemakai agar dapat menambah atau
menghapus index
INSERT Privilege yang memungkinkan pemakai untuk menambah record ke
dalam database
PROCESS Privilege yang diberikan agar pemakai dapat melihat dan mematikan
proses sistem MySQL
RELOAD Privilege yang memungkinkan pemakai untuk dapat memberikan
perintah FLUSH
SELECT Privilege yang diberikan agar pemakai dapat melakukan query
dengan menggunakan perintah SELECT
SHUTDOWN Privilege ini memungkinkan pemakai untuk mematikan server
MySQL
UPDATE Privelege yang diberikan kepada pemakai agar dapat mengubah suati
record dalam database.

Pencabutan privilege
Perintah :
REVOKE [privileges] [nama-nama kolom]
ON namadatabase.namatabel
FROM namauser@hostkomputer

Praktikum Basis Data D3 REKMED FMIPA UGM 58


privileges adalah daftar privilege yang akan diberikan kepada pemakai
nama-nama kolom adalah nama-nama kolom/field dalam tabel
namadatabase adalah nama database yang akan diberikan
namatabel adalah nama tabel dari database yang diberikan
namapemakai adalah nama pemakai atau userid
hostkomputer adalah alamat komputer dari pemakai yang diberi hak
Contoh :
mysql> REVOKE SELECT ON db_karyawan.* FROM pemakai@localhost;
Query OK, 0 rows affected (0.03 sec)

mysql> SELECT * FROM db WHERE user="pemakai" \G;


Empty set (0.00 sec)

Mengaktifkan pemakai dan privilege


Setiap data pemakai dan privilege yang didefinisikan tidak secara otomatis akan aktif
atau dikenal langsung oleh server MySQL, karena pada saat pertama kali MySQL
dijalankan, MySQL akan membaca data yang telah ada dari tabel-taebl privilege dan di
load ke dalam memori.
Perintah
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Flush privilege merupakan perintah yang memaksa MySQL untuk menggunakan daftar
pemakai dan privilegenya dari data pemakai dan privilege database yang baru.

Praktikum Basis Data D3 REKMED FMIPA UGM 59

Anda mungkin juga menyukai