ang mungkin mengharuskan kita untuk mengubah pengaturan.
Mengonfigurasi Apache
Pengaturan konfigurasi Apache disimpan dalam file bernama httpd.conf. File ini
memerlukan beberapa arahan agar PHP berfungsi. XAMPP menambahkan arahan ini saat
menginstal perangkat lunak sehingga kita tidak perlu mengkonfigurasi Apache untuk
membuat PHP bekerja. Kita dapat mengubah beberapa perilaku Apache dengan arahan di file
httpd.conf. Misalnya, kita dapat mengubah di mana Apache mencari file halaman web dan
nomor port apa yang didengarkan Apache.. Semua arahan Apache dijelaskan di situs web
Apache di httpd.apache.org. Untuk mengubah konfigurasi Apache yang diinstal memakai
XAMPP, kita perlu menemukan file httpd.conf di folder apache\ conf di folder utama tempat
149
Manajemen Database MySQL
XAMPP telah dipasang. Misalnya, jika XAMPP diinstal di direktori default, file konfigurasi
Apache adalah c:\ xampp \ apache\ conf\ httpd.conf.
Mengkonfigurasi MySQL
MySQL membuat file konfigurasi saat diinstal. Kebanyakan orang tidak perlu
mengubah konfigurasi MySQL. Namun, kita mungkin ingin mengubahnya untuk menyimpan
database MySQL kita di tempat lain selain lokasi default. Faktanya, instalasi XAMPP
mengonfigurasi MySQL untuk mencari direktori data di direktori XAMPP, yang bukan
merupakan lokasi default untuk MySQL, jadi XAMPP mengonfigurasi pengaturan direktori
datanya untuk Anda. Jika kita ingin menyimpan data kita di lokasi yang berbeda, kita dapat
mengubah pengaturannya sendiri. Untuk mengubah konfigurasi MySQL yang diinstal
memakai XAMPP, kita perlu menemukan file my.cnf di folder mysql \ bin di folder utama
tempat XAMPP berada diinstal. Misalnya, jika XAMPP diinstal di direktori default, file
konfigurasi MySQL adalah c:\ xampp \ mysql\ bin\ my.cnf.
Uninstall dan Reinstall XAMPP
Jika kita merasa telah melakukan kesalahan dan ingin menginstal XAMPP lagi, kita
harus menghapusnya terlebih dahulu sebelum menginstal ulang. Untuk menghapus dan
menginstal ulang XAMPP, ikuti langkah-langkah berikut:
1. Hentikan Apache dan MySQL di Control Panel XAMPP.
Jika kita tidak menghentikan Apache dan MySQL sebelum kita menghapus XAMPP, kita
mungkin akan melakukannya saat kita menginstal ulang XAMPP. Ini terutama benar
jika kita memulai Apache dan MySQL sebagai layanan.
2. Mulai uninstall dengan memilih Start➪All Programs➪Apache
Friends➪XAMPP➪Uninstall
Layar pertama dari prosedur uninstall terbuka.
3. Bergerak melalui layar dan menjawab pertanyaan.
Klik tombol Berikutnya untuk menelusuri layar; menjawab pertanyaan dengan memilih
opsi yang sesuai. Kita dapat menyimpan database atau halaman web yang telah kita
buat dengan memilih opsi yang sesuai. Sebuah pesan ditampilkan saat XAMPP benar-
benar dihapus.
4. Mulai lagi prosedur penginstalan dari awal.
Troubleshooting
Kadang-kadang, saat kita melihat di Control Panel XAMPP, kita menemukan Apache
dan/atau MySQL terdaftar tetapi tidak berjalan, dan kotak centang Layanan tidak dipilih. Ini
berarti bahwa XAMPP tidak dapat memulai Apache atau MySQL sebagai layanan selama
instalasi. Jalankan MySQL dan Apache sebagai layanan, tetapi tidak perlu. Kita dapat
memulainya tanpa memilih kotak centang Layanan dan lingkungan pengembangan kita akan
berfungsi dengan baik. Kita hanya perlu me-restart MySQL dan Apache di Control Panel setiap
kali kita memulai komputer Anda. saat MySQL dan Apache keduanya berjalan sebagai
layanan, mereka mulai secara otomatis saat komputer kita mulai. Dalam kebanyakan kasus,
kita dapat memulainya sebagai layanan di Control Panel memakai metode yang
dijelaskan di bagian ini.
Pertama, coba pilih kotak centang Layanan dan klik tombol Mulai. XAMPP mencoba
untuk memulai perangkat lunak sebagai layanan. Jika XAMPP tidak berhasil, kita akan melihat
pesan yang ditampilkan di kotak bawah, yang menyatakan bahwa itu tidak dimulai atau
dihentikan. Percobaan kedua atau ketiga mungkin berhasil. saat XAMPP tidak berhasil
memulai perangkat lunak sebagai layanan selama beberapa percobaan, klik tombol Mulai
dengan kotak centang Layanan tidak dipilih. Perangkat lunak akan dimulai. Kemudian,
hentikan perangkat lunak dengan mengklik tombol Stop. Kemudian, mulai perangkat lunak
lagi dengan kotak centang Layanan dipilih. Biasanya, XAMPP sekarang berhasil memulai kedua
1.1 Pengertian Basis Data
Pangkalan data (disebut juga basis data; bahasa Inggris: database)
yaitu kumpulan data yang terorganisir, yang umumnya disimpan dan
diakses secara elektronik dari suatu sistem komputer. Pada saat pangkalan
data menjadi semakin kompleks, maka pangkalan data dikembangkan
memakai teknik perancangan dan pemodelan secara formal
(https://id.wikipedia.org/wiki/Pangkalan_data).
Perangkat lunak yang dapat dipakai untuk mengelola basis data
disebut sistem manajemen basis data (database management sistem) atau
disingkat DBMS. DBMS merupakan perangkat lunak yang dirancang
untuk dapat melakukan pengaturan dan mengelola koleksi data dalam
jumlah yang besar dan dapat memanipulasi data secara lebih mudah.
DBMS merupakan interface atau antar muka antara pengguna basis data
(baik pengguna DBMS langsung maupun aplikasi) dengan data yang
disimpan.
RDBMS atau relationship database manajemen sistem yaitu salah
satu jenis DBMS yang mendukung hubungan antar tabel. Contoh RDBMS
di antaranya yaitu Oracle, Ms SQL Server, MySQL, DB2, Ms Access.
1.2 Structured Query Language
Structured Query Language atau yang disingkat SQL yaitu sebuah
bahasa yang dipakai untuk mengakses data dalam basis data relasional.
2
Bahasa ini secara de facto merupakan bahasa standar yang dipakai
dalam manajemen basis data relasional. Saat ini hampir semua server basis
data yang ada mendukung bahasa ini untuk melakukan manajemen datanya
(https://id.wikipedia.org/wiki/SQL).
SQL merupakan bahasa pemrograman khusus yang dipakai untuk
memanajemen data dalam RDBMS. SQL biasanya berupa perintah
sederhana yang berisi instruksi-instruksi untuk manipulasi dan
pengambilan data pada relational database atau database yang terstruktur.
Perintah SQL ini sering juga disingkat dengan sebutan ‘query‘.
1.3 MySQL
Seiring berkembangnya zaman, teknologi semakin berkembang
pesat termasuk perangkat lunak. Salah satu contoh perangkat lunak yaitu
MySQL yang selalu di update oleh produsernya masing-masing. MySQL
yaitu pengembangan lanjutan dari proyek UNIREG yang dikerjakan oleh
Michael Monty Widenius dan TcX (perusahaan perangkat lunak asal
Swedia).
MySQL yaitu DBMS yang open source dengan dua bentuk lisensi,
yaitu Free Software (perangkat lunak bebas) dan Shareware (perangkat
lunak berpemilik yang penggunaannya terbatas). Jadi MySQL yaitu
database server yang gratis dengan lisensi GNU General Public License
(GPL) sehingga dapat Anda pakai untuk keperluan pribadi atau komersial
tanpa harus membayar lisensi yang ada.
Seperti yang sudah disebutkan sebelumnya, MySQL masuk ke
dalam jenis RDBMS (Relational database Management Sistem). Maka
dari itu, istilah semacam baris, kolom, tabel, dipakai pada MySQL.
Contohnya di dalam MySQL sebuah database ada satu atau beberapa
tabel.
MySQL merupakan database engine atau server database yang
mendukung bahasa database SQL sebagai bahasa interaktif dalam
mengelola data. MySQL yaitu sebuah perangkat lunak sistem manajemen
basis data SQL atau DBMS yang multithread, multi-user.
3
1.4 Perbedaan SQL dan MySQL
SQL dan MySQL yaitu dua hal yang berbeda. SQL yaitu bahasa
pemrograman yang dipakai untuk mengolah basis data, sedangkan
MySQL yaitu sebuah brand software database management sistem
(DBMS) untuk mengolah basis data memakai bahasa SQL itu sendiri.
1.5 Alasan memakai MySQL
Sebagai pengembang perangkat lunak ada beberapa alasan
memakai MySQL untuk membuat basis data atau database yaitu
sebagai berikut.
1. Speed
MySQL menyediakan sistem basis data berkecepatan tinggi yang
sempurna untuk proyek-proyek kecil hingga menengah. Ini
berfungsi baik untuk perusahaan pemula, tetapi tidak memiliki
banyak fitur seperti Oracle. Namun, sebagian besar perusahaan yang
memakai MySQL tidak memerlukan fitur yang disediakan oleh
Oracle karena mereka membangun fungsionalitas di tingkat
menengah (https://itxdesign.com/MySQL-vs-oracle/).
2. Opensource
MySQL dapat dipakai secara gratis. Meskipun demikian ada juga
untuk versi komersial yang tentu sudah diberikan tambahan fitur
berupa kemampuan spesifik dan layanan technical support dari
MySQL.
3. Scalability
Dapat menangani database dengan skala besar yaitu dengan jumlah
record lebih dari 50 juta.
4. Connectivity and Security
Database MySQL dapat diakses dari semua tempat di Internet
dengan hak akses tertentu. MySQL yaitu database memakai
enkripsi password, jadi database ini cukup aman karena memiliki
password untuk mengaksesnya.
5. Flexibility/Portability
MySQL dapat dipakai untuk mengembangkan aplikasi berbasis
dekstop maupun aplikasi berbasis web dengan memakai
teknologi yang beragam. Hal Ini menunjukkan bahwa MySQL
4
memiliki fleksibilitas terhadap teknologi yang akan dipakai
sebagai membangun aplikasi, yang memakai PHP, Java, C++,
maupun yang lainnya. Membangun aplikasi dilakukan dengan cara
menyediakan plugin dan driver yang spesifik pada masing-masing
teknologi ini .
6. Cross platform operating system/ Lintas Platform Sistem Operasi
MySQL dapat berjalan stabil di berbagai sistem operasi seperti
windows, Linux, Unix. Apabila diperlukan proses migrasi data antar
sistem operasi dapat dilakukan dengan mudah.
Database MySQL memiliki dukungan terhadap stored procedure,
fungsi, trigger, view, SQL standar ANSI, dan lain-lain yang tentu saja akan
mempermudah dan mempercepat proses pengembangan aplikasi.
1.6 Instalasi MySQL
Pada buku ajar ini akan memakai XAMPP untuk dapat
mengakses MySQL.
XAMPP yaitu sebuah aplikasi open source terkait pengelolaan
server yang dikembangkan oleh Apache Friends. Karena bersifat open
source, aplikasi ini bisa Anda dipakai secara gratis. Selain itu, sesuai
namanya, X pada XAMPP berarti cross platform. Artinya, mendukung
berbagai platform seperti Windows, macOS dan Linux. XAMPP sendiri
terdiri dari Apache, MariaDB (yang dikembangkan dari MySQL), PHP
dan Perl. XAMPP juga memberikan solusi sederhana dan cukup ringan
dijalankan, memungkinkan membuat web server lokal untuk melakukan
pengetesan website. XAMPP dapat dijalankan pada Mac dan Linux. Dalam
buku ajar ini penggunaan aplikasi XAMPP diimplementasikan pada sistem
operasi Windows.
Untuk menginstal XAMPP maka lakukan langkah-langkah berikut ini.
1. Unduh XAMPP
Download XAMPP melalui website Apache Friends di link ini
https://www.apachefriends.org/download.html.
5
2. Instal XAMPP
a. Lakukan instalasi sesudah selesai mengunduh. Selama proses
instalasi mungkin akan melihat pesan yang menanyakan apakah
yakin akan menginstalnya. Silakan tekan Yes untuk melanjutkan
instalasi.
b. Klik tombol Next.
Gambar 1.1 Tampilan Awal Website
Gambar 1.2 Tampilan Instalasi XAMPP
Gambar 1.3 Tampilan Awal XAMPP (1)
6
c. Pada tampilan selanjutnya akan muncul pilihan mengenai komponen
mana dari XAMPP yang ingin dan tidak ingin di instal. Beberapa
pilihan seperti Apache dan PHP yaitu bagian penting untuk
menjalankan website dan akan otomatis diinstal. Silakan centang
MySQL dan phpMyAdmin, untuk pilihan lainnya biarkan saja.
d. Berikutnya silakan pilih folder tujuan di mana XAMPP ingin di
instal, pada tutorial ini pada direktori C:\xampp.
Gambar 1.4 Tampilan Awal XAMPP (2)
Gambar 1.5 Tampilan Awal XAMPP (3)
7
e. Pada halaman selanjutnya, akan ada pilihan apakah ingin menginstal
Bitnami untuk XAMPP, di mana nantinya dapat dipakai untuk
memasang aplikasi WordPress, Drupal, dan Joomla secara otomatis.
Gambar 1.6 Tampilan Awal XAMPP (4)
Gambar 1.7 Tampilan Awal XAMPP (5)
8
f. Pada langkah ini proses instalasi XAMPP akan dimulai. Silakan klik
tombol Next.
g. sesudah berhasil diinstal, akan muncul notifikasi untuk langsung
menjalankan control panel. Silakan klik Finish.
Gambar 1.8 Tampilan Awal XAMPP (6)
Gambar 1.9 Tampilan Awal XAMPP (7)
9
h. Pilih Bahasa yang dipakai klik Save.
3. Langkah 3: Jalankan XAMPP
Silakan buka aplikasi XAMPP kemudian klik tombol Start pada
Apache dan MySQL. Jika berhasil dijalankan, Apache dan MySQL akan
berwarna hijau seperti gambar di bawah ini.
Untuk menjalankan MYSQL maka modul MYSQL harus diaktifkan
dengan menekan tombol start pada bagian modul MYSQL.
Gambar 1.10 Tampilan Pilihan Bahasa
Gambar 1.11 Tampilan Control Panel XAMPP
10
1.7 Studi Kasus dalam Praktik dan Latihan
1. Skenario
Judul database yang untuk kegiatan praktikum yaitu database
Penerbangan. Rancangan fisik database ini terdiri dari lima table master
dan tiga table transaksi. Pada table master ada table pelanggan, tiket,
data_penerbangan, bank, no_hp_pel. Sedangkan pada table transaksi ada
table pemesanan, dan cek_jadwal.
Skenario kasus untuk pembuatan database penerbangan ini yaitu
sebagai berikut.
Gambar 1.12 Tampilan Control Panel XAMPP (2)
Pelanggan yang ingin memesan tiket pesawat meminta data
penerbangan terlebih dahulu melalui website yang sudah disediakan
dengan menginputkan tujuan penerbangan dan waktu penerbangan
untuk mengecek jadwal penerbangan yang tersedia. Kemudian
pelanggan memilih jadwal penerbangan yang diinginkan. sesudah itu,
pelanggan melakukan registrasi online untuk mendapatkan username
dan password. Kemudian, menginputkan data-data pelanggan lainnya
berupa nama, alamat, nomor hp serta nama-nama penumpang. sesudah
berhasil melakukan registrasi, pelanggan diminta membayar baik
melalui transfer bank, kartu kredit, internet banking dengan nominal
yang sudah ditentukan. Lalu melakukan konfirmasi pembayaran
melalui form yang telah disediakan di website. sesudah pelanggan
membayar, pelanggan akan menerima e-Mail berupa tiket dan bukti
pembayaran yang nantinya dapat dicetak.
11
2. Desain Relasi Basis Data Penerbangan
inberdasar ilustrasi di atas, dapat menghasilkan desain relasi basis
data penerbangan seperti di bawah ini.
Gambar 1.13 Desain Relasi database Penerbangan
12
3. Entity Relationship Diagram (ERD) Tabel Master
ERD (Entity Relationship Diagram) merupakan suatu model
jaringan yang memakai susunan data yang disimpan pada sistem
secara abstrak. ERD juga menggambarkan hubungan antara satu entitas
yang memiliki sejumlah atribut dengan entitas yang lain dalam suatu
sistem yang terintegrasi.
Gambar 1.14 Desain ERD Database Penerbangan
13
BAB 2
DATA DEFINITION LANGUAGE
Capaian Pembelajaran
1. Mampu memahami lebih lanjut tentang perintah SQL (DDL) pada
DBMS MySQL.
2. Mampu menerjemahkan dan mengimplementasikan konsep Entity
Relationship Diagram (ERD) ke dalam bentuk DDL pada DBMS
MySQL.
2.1 Data Definition Language (DDL)
Data Definition Language yaitu bagian dari SQL. DDL berfungsi
lebih kepada memanipulasi struktur database. DDL dipakai untuk
membuat database, membuat tabel beserta struktur tabel, mengubah
struktur tabel, membuat relasi antar tabel, menghapus database, dan
menghapus tabel. Berikut yaitu perintah DDL.
2.1.1 Perintah Create
Perintah ini dipakai untuk membuat database dan membuat tabel.
1. Membuat database
Untuk membuat database dengan perintah “CREATE database”
atau dengan mengikuti pola sebagai berikut.
Di mana create database yaitu perintah untuk membuat database,
sedangkan *nama_database yaitu nama dari database yang dibuat. Untuk
penamaan database tidak boleh memakai spasi, spasi diganti dengan
(_). Contoh pembuatan database sebagai berikut.
Gambar 2.1 Sintaks Membuat database
14
2. Membuat tabel
Untuk membuat tabel dengan perintah “CREATE TABLE”.
Perintah ini error, karena untuk membuat tabel pada MySQL
kita harus memasukkan minimal 1 buah field/kolom di dalamnya. Contoh
perintah yang benar yaitu sebagai berikut.
3. Melihat Struktur Tabel
Untuk melihat struktur pada tabel kita bisa memakai perintah
“DESC” atau “DESCRIBE”. Contohnya yaitu sebagai berikut.
Gambar 2.2 Membuat database Penerbangan
Gambar 2.3 Sintaks Membuat Tabel (Error)
Gambar 2.4 Membuat Tabel Pelanggan
15
Selanjutnya buatlah tabel yang menyimpan nomor hp Pelanggan
dengan struktur tabel sebagai berikut.
Selanjutnya buatlah tabel yang menyimpan data penerbangan
dengan struktur tabel sebagai berikut.
Gambar 2.5 Melihat Struktur Tabel Pelanggan
16
Selanjutnya buatlah tabel yang menyimpan data pemesanan tiket
dengan struktur tabel sebagai berikut.
Selanjutnya buatlah tabel yang menyimpan data tiket dengan
struktur tabel sebagai berikut.
17
Selanjutnya buatlah tabel yang menyimpan data bank dengan
struktur tabel sebagai berikut.
2.1.2 Mengubah Struktur Tabel dengan Perintah Alter
Pada saat membangun suatu basis data adakalanya diperlukan
perubahan struktur tabel yang pernah kita buat sebelumnya dikarenakan
adanya perubahan kebutuhan sistem. Perubahan struktur yang terjadi dapat
dalam bentuk penambahan kolom baru (ADD), perubahan lebar dan jenis
kolom yang telah dibuat sebelumnya (MODIFY), atau dapat juga
melakukan penghapusan kolom dan indeks (DROP), perubahan nama
kolom sebelumnya (CHANGE), perubahan nama tabel (RENAME), dan
lain sebagainya.
Catatan penting dalam kegiatan mengubah struktur tabel yaitu apa
pun perubahan yang dilakukan pada kolom ataupun tabel tentu memiliki
18
mempunyai dampak langsung pada data yang telah dimasukkan
sebelumnya.
Perintah DDL yang dapat dipakai untuk mengubah struktur tabel
yaitu memakai perintah "ALTER TABLE”.
1. Menambahkan field (ADD)
Perintah yang dipakai untuk menambahkan field yaitu “ALTER
TABLE *NAMA_TABEL ADD *NAMA_FIELD”. Contohnya yaitu sebagai
berikut.
2. Menghapus field (DROP)
Perintah yang dipakai untuk menghapus field yaitu “ALTER
TABLE *NAMA_TABEL DROP *NAMA_FIELD”. Contohnya yaitu sebagai
berikut.
3. Mengubah Nama Field (CHANGE)
Selain untuk menambahkan field pada tabel, perintah ALTER juga
memungkinkan untuk mengubah field pada tabel. Perintah yang dipakai
untuk mengubah field yaitu “ALTER TABLE *NAMA_TABEL CHANGE
*NAMA_FIELD”. Contohnya yaitu sebagai berikut.
Gambar 2.6 Menambahkan Field
Gambar 2.7 Menghapus Field
19
4. Mengubah Lebar dan Jenis Field (MODIFY)
Perintah yang dipakai untuk mengubah lebar dan jenis field
yaitu “ALTER TABLE *NAMA_TABEL MODIFY *NAMA_FIELD”.
Contohnya yaitu sebagai berikut.
5. Mengubah Nama Table (RENAME)
Perintah yang dipakai untuk mengubah nama tabel yaitu
“ALTER TABLE *NAMA_TABEL RENAME *NAMA_TABEL_BARU”.
Contohnya yaitu sebagai berikut.
2.1.3 Perintah Drop
Perintah drop dipakai untuk menghapus database dan
menghapus tabel.
1. Menghapus database
Perintah yang dipakai untuk menghapus database yaitu “DROP
database *NAMA_DATABASE”. Contohnya yaitu sebagai berikut.
Gambar 2.8 Mengubah Nama Field
Gambar 2.9 Mengubah Lebar dan Jenis Field
Gambar 2.10 Mengubah Nama Tabel
20
2. Menghapus Tabel
Perintah yang dipakai untuk menghapus tabel yaitu “DROP
TABLE *NAMA_TABEL”. Contohnya yaitu sebagai berikut.
2.2 Soal Latihan
Sebagai tugas Latihan maka kerjakan lah soal berikut ini:
1. Buat database dengan nama dbCaffe dengan scenario kasus sebagai
berikut.
Gambar 2.11 Menghapus database
Gambar 2.12 Menghapus Tabel
1. Dimalam yang cerah ini, Amel dan kelima sahabatnya pergi
mengunjungi kafe Askioo. Sesampainya di sana mereka langsung
disambut oleh salah satu pelayan kafe di sana yaitu Zainal. Mereka
diarahkan oleh Dio, pelayan yang cukup tampan, ke meja yang masih
kosong dan menyerahkan buku menu. Masing-masing dari mereka
mulai memesan makanan yang ada di sama. Mulai dari Amel memesan
1 cheese cake dan 1 coffe americano, Clara memesan 1 pasta extra
mozarella dan 1 gelas air putih, Dara 1 jus stroberi, Tyas 2 lava cake,
Wendy 1 cheese burger dan 1 kaleng soda, dan Mira 1 porsi salad buah.
Pesanan mereka disiapkan oleh Filo sebagai koki sekaligus barista di
kafe ini . sesudah sekian lama menunggu tiba akhirnya pesanan
mereka. sesudah selesai dengan segala basa-basi membahas gosip
terbaru Amel dan kawan-kawan berniat pergi tapi sebelum itu mereka
membayar semua pesanan mereka ke kasir. Ternyata yang si kasir
yaitu Salsa salah satu teman mereka dan sekaligus karyawan di kafe
ini . Tak lama kemudian kafe tutup dan Salsa melaporkan hasil dari
pendapatan hari ini kepada manajer yaitu Alexander.
21
2. inberdasar skenario ini berikut ini yaitu ERD yang sesuai
dengan studi kasus di atas.
3. Dengan memakai MySQL buatlah database dbcaffe_nama,
nama yaitu nama masing-masing mahasiswa.
4. Pilih dan buka database ini . Buat tabel seperti yang di bawah
ini
a. Tabel Pelanggan, dengan struktur berikut ini.
id_Pelanggan Char (2) not null primary key
Nama_pelanggan Varchar (20) not null
b. Tabel Pegawai, dengan struktur berikut ini.
idpegawai Char (4) not null primary key
id_mngr Char (4) not null primary key
Nama_pegawai Varchar (20) not null
Alamat Varchar (30) not null
No_hp Int (12) not null
22
c. Tabel Manager, dengan struktur berikut ini.
id_mngr Char (4) not null primary key
Nm_mngr Varchar (20) not null
Alamat Varchar (30) not null
No_hp Int (12) not null
d. Tabel Menu, dengan struktur berikut ini.
Kd_menu Char (3) not null primary key
Nm_menu Varchar (20) not null
Jns_menu Varchar (10) not null
Harga Int (10) not null
e. Transaksi, dengan struktur berikut ini.
Tgl_trx Date not null
no_faktur Char (6) not null
Tgl_beli Date
Id_pelanggan Char (2) not null
Idpegawai char (4) not null
f. Tabel detail transaksi dengan struktur berikut ini.
Kd_menu Char (3)
no_faktur Char (6)
Jml Int (4)
g. Tabel log_menu, dengan struktur berikut ini.
Kd_menu Char (3)
Nm_menu Varchar (20)
Harga Int (10)
5. Perbaiki struktur tabel dengan rincian seperti soal berikut ini.
a. Tambahkan field email pada Tabel pegawai dan manajer dengan
struktur data varchar(30) null.
b. Ganti lebar data field alamat menjadi 50.
23
c. Ganti struktur data field harga pada Tabel menu menjadi int (12) not
null default 0.
d. Ganti nama Tabel pegawai menjadi karyawan.
e. Ganti idPegawai menjadi kdKaryawan dengan tipe & lebar data
yang sama.
f. Ganti nama_pegawai menjadi nmKaryawan dengan tipe & lebar
data yang sama.
6. Pada tabel transaksi lakukan perubahan sebagai berikut:
a. Tambahkan field total_harga int (12) not null default 0.
7. Rubahlah nama tabel dengan ketentuan sebagai berikut.
a. Dari karyawan menjadi pegawai.
b. Tabel pegawai kembali menjadi karyawan.
24
BAB 3
DATA MANIPULATION LANGUAGE
Capaian Pembelajaran
1. Mampu memahami lebih lanjut tentang perintah SQL (DML) pada
DBMS MySQL.
2. Mampu menerjemahkan dan mengimplementasikan konsep Entity
Relationship Diagram (ERD) ke dalam bentuk DML pada DBMS
MySQL.
3.1 Data Manipulation Language (DML)
Data Manipulation Language yaitu sekumpulan elemen sintaks
yang mirip dengan bahasa pemrograman komputer yang dipakai untuk
memanipulasi data, misalnya memasukkan data, menghapus data, dan
memperbarui data yang ada di dalam database.
Berikut yaitu perintah yang termasuk dalam kelompok DML (Data
Manipulation Languange).
3.1.1 Perintah Insert
Insert dipakai untuk menambahkan data baru kedalam tabel.
Perintah ini dapat dibuat sesudah database dan tabel berhasil dibuat.
Berikut yaitu contoh melakukan 10 insert data ke tabel tiket
memakai “INSERT INTO” dan melihat hasilnya memakai
perintah “SELECT”.
25
Maka hasil dari tabel tiket seperti tampilan berikut ini.
Selanjutnya tambahkan data pada tabel-tabel yang telah dibuat
sebelumnya dengan isian sebagai berikut.
Gambar 3.1 Insert Data Tabel Tiket
Gambar 3.2 Hasil Insert Data Tabel Tiket
Gambar 3.3 Isian Tabel Pelanggan
26
Gambar 3.4 Isian Tabel Bank
Gambar 3.5 Isian Tabel Data_penerbangan
Gambar 3.6 Isian Data Tabel Nomor Hp Pelanggan
27
3.1.2 Perintah Select
Select yaitu perintah yang paling sering dipakai pada SQL,
sehingga kadang-kadang istilah query dirujukkan pada perintah select.
Select dipakai untuk menampilkan data dari satu atau lebih tabel,
biasanya dalam sebuah basis data yang sama.
Umumnya perintah select sebagai berikut.
SELECT * FROM nama_tabel WHERE predikat;
Jika kata “WHERE tidak dicantumkan, maka secara otomatis akan
menampilkan seluruh isi tabel terkait. Beberapa bagian yang ada pada
select yaitu sebagai berikut.
Gambar 3.7 Isian Data Tabel Pemesanan
Gambar 3.8 Isian Data Tabel Tiket
28
1. Where
Where berfungsi untuk menampilkan data sesuai syarat yang
diberikan. Beberapa operator yang biasa dipakai yaitu sama dengan
(=), tidak sama dengan (< >), lebih kecil (<), lebih kecil atau sama (<=),
lebih besar (>), dan lebih besar atau sama (>=).
2. AND, OR, dan NOT
AND dan OR berfungsi untuk memadukan antara satu kondisi
dengan kondisi lainnya. Sedangkan NOT dipakai untuk kondisi
ingkaran. Contoh penggunaan perintah SELECT untuk menampilkan
seluruh data yang ada pada table tiket.
Menampilkan data (memakai perintah SELECT) yang ada
pada tiga buah tabel yakni tabel pemesanan, tabel tiket, dan tabel
data_penerbangan memakai klausa “WHERE”.
Gambar 3.9 Contoh Penggunaan Select
Gambar 3.10 Contoh Penggunaan Select dengan Kondisi
29
3.1.3 Perintah Update
Update dipakai untuk mengubah/memperbaharui data yang sudah
ada. Umumnya perintah update sebagai berikut.
UPDATE nama_tabel SET kolom1 = nilai1, kolom2 = nilai2,
... WHERE kondisi;
Contoh melakukan UPDATE untuk melakukan set data jumlah
penumpang (jmlh_penumpang) sesuai dengan nomor penerbangan
(no_penerbangan) pada table tiket.
Peringatan!!
Pada saat update data jika tidak mengetikkan kondisi atau tidak
memakai perintah where, maka seluruh data pada field akan ikut
terubah sesuai data baru yang kalian masukkan
3.1.4 Perintah Delete
Perintah delete berguna untuk menghapus data yang ada di tabel.
Tentunya data yang dihapus yakni data yang dianggap sudah tidak
dipakai lagi. Umumnya perintah delete sebagai berikut.
DELETE FROM nama_tabel WHERE kondisi;
Gambar 3.11 Update Tabel Tiket
30
Contoh menghapus data pada tabel pemesanan sesuai dengan nomor
pesanan (no_pesanan) sebagai berikut.
3.2 Macam-macam bentuk Penggabungan (Join)
Join berfungsi untuk menggabungkan dua tabel yang didapat
melalui proses seleksi melalui kolom/kata kunci tertentu untuk
menemukan suatu informasi yang lengkap.
1. Cross Join
Cross join yaitu bentuk penggabungan yang tidak memerlukan
adanya kondisi. Bentuk umum:
SELECT kolom1, kolom2 FROM tabel1 CROSS JOIN
tabel2;
2. Inner Join
Inner join merupakan bentuk penggabungan yang mirip dengan
cross join, bedanya pada Inner Join ditambahkan kondisi. Bentuk
umum:
SELECT kolom FROM tabel1 INNER JOIN tabel2 ON
kondisi;
3. Straight Join
Straight join mirip dengan inner join bedanya tidak memakai
“where”. Bentuk umum:
SELECT kolom FROM Tabel1 STRAIGHT JOIN tabel2;
4. Left (outer) Join
Join yang menampilkan semua data disebelah kiri dan menampilkan
data disebelah kanan yang cocok dengan data disebelah kiri dari
tabel yang dijoinkan. Jika tidak ada data yang cocok, maka secara
otomatis akan di set null. Bentuk umum:
SELECT kolom FROM tabel1 LEFT JOIN tabel2 ON
kondisi;
Gambar 3.12 Sintaks Delete
31
5. Right (outer) Join
Merupakan lawan dari left join. Bentuk umum:
SELECT kolom FROM tabel1 RIGHT JOIN tabel2 ON
kondisi;
Contoh penggunaan salah satu jenis join (Inner Join) dengan
menampilkan “no_tiket” dan “no_penerbangan” yang ada di table tiket dan
data_penerbangan. Kemudian digabungkan memakai perintah INNER
JOIN dengan syarat field “no_penerbangan” yang ada di kedua table itu
sama.
Selain memakai perintah join untuk menampilkan data yang
diperoleh dari relasi beberapa tabel, kita juga dapat bermain dengan
memakai perintah where. Sebagai contoh Menampilkan “no_tiket”
dan “no_penerbangan” yang ada di table tiket dan data_penerbangan.
Gambar 3.13 Contoh Penggunaan Select dengan Inner Join
32
Ketika diketikkan perintah seperti Gambar 3.14 maka akan muncul
pesan column ‘no_penerbangan’ in field list is ambiguous mengapa bisa
demikian? Perhatikan pesan yang muncul yang menyatakan bahwa kolom
no_penerbangan ambigu yang artinya ada nama kolom yang sama
pada kedua tabel. No_penerbangan ada di dalam tabel tiket dan
ada di dalam tabel data_penerbangan.
Jika ada dua kolom dengan nama yang sama maka kolom
ini harus menyertakan nama tabelnya, contoh tiket.no_penerbangan.
Perhatikan perintah seperti pada Gambar 3.15 berikut ini.
Ketika menampilkan data dari beberapa tabel, pada bagian from
harus disebutkan nama-nama tabel yang saling berhubungan yang dapat
dipakai untuk menampilkan data. Untuk mempermudah dan
Gambar 3.14 Contoh menampilkan data dari beberapa tabel (1)
Gambar 3.15 Contoh menampilkan data dari beberapa tabel (2)
33
mempersingkat penulisan nama tabel kita dapat memakai alias atau
perintah (as). Perhatikan perintah pada Gambar 3.16 berikut ini.
3.3 Operator Pembanding Dan Operator Logika
Operator pembanding yakni operator untuk membandingkan dua
nilai. Hasil perbandingan akan bernilai benar jika kondisi perbandingan
ini benar, dan bernilai salah jika kondisi perbandingan ini
bernilai salah. Operator logika yaitu operator yang dipakai untuk
membandingkan logika benar dan logika salah. Kedua operator ini
biasanya dipakai untuk menampilkan data dengan suatu syarat atau
kondisi. Berikut jenis-jenis operator pembanding dan operator logika.
1. Operator Pembanding
Berikut ini yaitu operator pembanding yang biasanya dipakai
pada Bahasa SQL, operator ini di antaranya yaitu lebih besar(>),
lebih kecil (<), lebih kecil atau sama dengan (<=), sama dengan (=), dan
sama dengan (!=).
Contoh operator pembanding dalam menampilkan data penerbangan
yang memakai maskapai “Garuda Indonesia” memakai perintah
SELECT pada table data_penerbangan sebagai berikut.
Gambar 3.16 Menampilkan data dari beberapa tabel dengan tabel alias
34
2. Operator Logika
Operator logika yang dapat dipakai yaitu “dan” (AND atau
&&), “atau” (OR atau ||), dan “lebih besar atau sama dengan” (NOT atau
!). Contoh penggunaan operator logika, misalnya akan menampilkan data
penerbangan yang kota_tujuan bukan “Jakarta” (<> Jakarta) sebagai
berikut.
Contoh selanjutnya dalam penerapan operator pembanding dan
operator logika akan dibahas berikut ini. Misalnya kita akan menampilkan
data pelanggan yang tanggal lahirnya sebelum tanggal 1993-09-10, maka
perintahnya yaitu sebagai berikut.
Gambar 3.17 Contoh Penggunaan Operator Pembanding
Gambar 3.18 Contoh Penggunaan Operator Logika
Gambar 3.19 Penggunaan operator pembanding mencari tanggal lahir
35
Penggunaan kata “order by” yaitu untuk mengurutkan data
inberdasar nama depan. Pada MySQL ada kelonggaran dalam hal
penulisan tanggal selama format penulisannya tetap mengikuti aturan
"tahun-bulan-tanggal". Misal "1993-09-10" dapat ditulis “1993-09-10”,
atau “1993#09#10” atau “1993.09.10”, atau 19930910, atau 930910.
Contoh selanjutnya yaitu menampilkan data pelanggan yang lahir
sebelum tanggal 1995-04-20 dan berjenis kelamin “laki-laki”.
Selanjutnya untuk mencoba penggunaan format tanggal dapat anda
coba pada contoh di atas kemudian tangkapan layar dapat dimasukkan
kedalam laporan.
Selanjutnya yaitu penggunaan operator pembanding dan operator
logika tingkat lanjut. Latihan selanjutnya yaitu menampilkan semua data
pelanggan berikut usianya saat ini, beberapa cara dapat dilakukan seperti
mengurangkan tahun sekarang dengan tahun lahir, akan tetapi cara ini
masih kurang valid khususnya bagi pelanggan yang lahir di akhir tahun,
dan proses perhitungan di awal tahun berikutnya, tentu saja usia pelanggan
sudah dihitung 1 tahun. Berikut ini ada perintah SQL yang akan kita
gunakan untuk menghitung tanggal lahir.
Gambar 3.20 Penggunaan Operator logika dan Operator Pembanding
36
Selanjutnya yaitu menampilkan data pelanggan yang umur nya di
bawah 25 tahun dan data diurutkan inberdasar usia
3.4 Soal Latihan
Jawablah pertanyaan berikut ini kemudian sertakan hasil ambilan
layar pada laporan tugas yang anda buat.
1. Memasukkan data pada tabel berikut ini.
a. Tabel manajer, tampilkan hasil.
Gambar 3.21 Penerapan Operator Pembanding untuk menghitung umur
Gambar 3.22 Penerapan Operator Pembanding dengan berbagai kondisi
37
b. Tabel karyawan, Pada kolom id_manager masukkan salah satu
id_manager yang telah dimasukkan pada table manager. Kemudian
tampilkan.
c. Tabel pelanggan, tampilkan hasil.
d. Tabel menu, Menampilkan hasil.
e. Tabel transaksi, Pada tabel transaksi masukkan id_pegawai dan
id_pelanggan inberdasar data yang telah dimasukkan pada table
pelanggan dan pada table pegawai sebelumnya. Kemudian
tampilkan hasil.
f. Tabel detail transaksi (sesuaikan data yang dimasukkan inberdasar
data pada tabel transaksi dan tabel menu).
2. Menampilkan kdKaryawan, nmKaryawan dari tabel karyawan.
3. Menampilkan kdKaryawan, nmKaryawan dari tabel karyawan, urut
inberdasar nama.
4. Menampilkan id_pelanggan, nama_pelanggan dari tabel pelanggan,
urut inberdasar nama (descending).
5. Mengupdate data: alamat karyawan dengan kdKaryawan = KD05
menjadi ‘Banjarbaru’.
6. Menampilkan id_pelanggan, total_harga, tgl_trx dari tabel transaksi.
Di mana tgl_trx sebelum 15 November 2019.
7. Menampilkan id_pelanggan, total_harga, tgl_trx dari tabel transaksi.
Di mana tgl_trx antara 11 oktober 2019 sampai 16 Desember 2019,
dan id_pelanggan = 14.
8. Menampilkan tabel transaksi, yang kd_menu nya selain M15.
9. Hanya menampilkan tabel transaksi dengan kd_menu M15.
10. Menampilkan jumlah menu dengan harga lebih dari 25000.
11. Menampilkan rata-rata harga dari tabel transaksi.
12. Menampilkan nilai maksimal harga dari tabel transaksi.
13. Merelasikan tabel pelanggan dengan tabel transaksi memakai
natural join dan perintah where.
14. Merelasikan tabel menu dengan tabel transaksi memakai
natural join dan perintah where.
38
BAB 4
DATA MANIPULATION LANGUAGE 2
Capaian Pembelajaran
1. Mampu memahami lebih lanjut tentang perintah SQL (DML) pada
DBMS MySQL.
2. Mampu memakai operator pada saat memanipulasi data.
4.1 Operator Precedence, Like, Not Like, REGEXP
Pada bab ini akan dibahas terkait operator yang dapat dipakai
pada saat melakukan manipulasi data dalam MySQL.
4.1.1 Operator Precedence
Operator precedence yaitu tingkatan hierarki dalam memproses
serangkaian operator.
Tabel 4.1 Tabel Operator Precedence
Tingkatan Hierarki Jenis Operator
Paling Tinggi BINARY
NOT !
- (unary minus)
* / %
+ -
<< >>
&
|
< <= = <=> != <> >= > IN IS LIKE
REGEXP RLIKE
BETWEEN
AND &&
Paling Rendah OR ||
39
Semakin ke atas letak operator, maka semakin tinggi tingkat hierarki
operator ini . Begitu pula sebaliknya, semakin rendah letaknya maka
akan semakin lemah hierarkinya. Untuk operator yang sama kuat, misal +
dan - digabung dengan operator * / %, maka akan ditentukan hierarkinya
tergantung dari letak mana yang paling kiri/paling awal ditemukan. Dan
untungnya letak hierarki ini dapat diubah dengan bantuan tanda kurung "("
dan ")".
4.1.2 Operator LIKE, NOT LIKE
Operator LIKE, NOT LIKE banyak dipakai dalam operasi karakter.
1. Operator LIKE
Operator LIKE dipakai untuk mencari data yang "menyerupai"
atau "hampir sama" dengan kriteria tertentu. Untuk mencari data
string/teks. Simbol "%" dipakai untuk membantu pelaksanaan operator
LIKE. Letak "%" sangat berpengaruh dalam menentukan kriteria. Contoh
menampilkan data pelanggan yang namanya berawalan huruf "a":
(perhatikan letak simbol persennya "%").
Baris pertama ‘select...’ dipakai untuk menunjukkan field mana
saja yang ingin ditampilkan. Baris kedua ‘from...’ dipakai untuk
tampilkan data pelanggan yang namanya berawalan huruf "r".
Gambar 4.1 Operator Like Menampilkan Nama Berawalan Huruf "A"
40
Tampilkan data pelanggan yang namanya berakhiran huruf "i".
Perhatikan letak penulisan tanda "%".
Tampilkan data pelanggan yang namanya berakhiran "ni".
Gambar 4.2 Operator Like Menampilkan Nama Berawalan Huruf "R"
Gambar 4.3 Operator Like Menampilkan Nama Berakhiran Huruf "I"
Gambar 4.4 Operator Like Menampilkan Nama Berakhiran Kata "Ni"
41
Agar operator LIKE dapat membedakan huruf besar dan kecil
tambahkan kata BINARY sesudah perintah LIKE (sehingga perintahnya
menjadi LIKE BINARY). Pertama coba untuk melihat pelanggan yang
memakai huruf ‘y’ kecil pada awal huruf nama belakangnya.
Tidak ditemukan (‘empty set’) karena tidak ada pelanggan yang
memakai huruf ‘y’ kecil pada awal huruf nama belakangnya. Lalu
coba untuk melihat pelanggan dengan nama_depan yang memiliki awalan
huruf kapital ‘A’.
Menampilkan nama pelanggan yang memiliki huruf "a" di mana pun
letak huruf ini (bisa juga berupa kata). Perhatikan penulisan tanda
"%".
Gambar 4.5 Operator Like dengan Binary
Gambar 4.6 Operator Like dengan Binary
42
Atau memiliki huruf "i" pada namanya? (Bisa juga berupa kata)
4.1.3 Operator REGEXP
Operator REGEXP (singkatan dari REGular EXPressions)
merupakan bentuk lain dari operator LIKE, dengan fungsi yang lebih
disempurnakan. Operator REGEXP biasanya ditemani juga dengan
simbol-simbol tertentu dalam melaksanakan tugasnya, seperti Tabel 4.2.
Tabel 4.2 Tabel Operator REGEXP
Simbol Keterangan
. Satu tanda titik (.) yaitu untuk mewakili satu karakter
[?] Mewakili beberapa karakter atau range yang ditentukan.
^ Menampilkan letak awal dari sebuah kriteria yang ditentukan
$ Menampilkan letak akhir dari sebuah kriteria yang telah ditentukan
Gambar 4.7 Operator Like dengan Binary
Gambar 4.8 Operator Like dengan Binary
43
Contohnya menampilkan nama pelanggan yang memiliki awal huruf 'a'.
Tampilkan data pelanggan yang namanya berawalan huruf "r".
Tampilkan nama pelanggan yang memiliki awal huruf 'a' sampai
dengan huruf 'r'.
Gambar 4.9 Operator REGEXP
Gambar 4.10 Operator REGEXP
Gambar 4.11 Operator REGEXP
44
Tampilkan data pelanggan yang namanya berakhiran huruf "i".
Tampilkan data pelanggan yang namanya berakhiran "ni".
Tampilkan nama pelanggan yang panjangnya 4 karakter.
Gambar 4.12 Operator REGEXP
Gambar 4.13 Operator REGEXP
Gambar 4.14 Operator REGEXP (1)
45
Perintah di atas bisa juga ditulis seperti Gambar 4.15 berikut ini.
4.2 Fungsi Statistik Dasar
Fungsi statistik dasar pada MySQL dipakai untuk berbagai
kebutuhan yang dikenakan pada kolom yang mempunyai jenis numerik
atau angka. Berikut ini yaitu fungsi statistik dasar yang dapat dipakai
untuk menampilkan data pada database MySQL.
1. AVG (ekspresi)
Fungsi AVG () atau average dipergunakan untuk mencari nilai rata-
rata dalam suatu kolom pada tabel. Pernyataan dalam fungsi AVG()
umumnya yaitu nama kolom dengan tipe data numerik atau angka.
Contohnya sebagai berikut.
2. COUNT(x)
Fungsi COUNT() dipergunakan untuk menghitung jumlah baris dari
sebuah kolom dalam suatu tabel. Huruf (x) yaitu nama kolom dari tabel
yang ingin dicari jumlah baris datanya. Contohnya sebagai berikut.
Gambar 4.15 Operator REGEXP (2)
46
3. MAX(ekspresi)
Fungsi MAX dipergunakan untuk menghitung nilai terbesar dari
suatu kolom pada suatu tabel, dengan persyaratan yaitu kolom yang dicari
nilai terbesarnya harus memiliki tipe data numerik atau angka. Contohnya
sebagai berikut.
4. MIN(ekspresi)
Fungsi MIN () merupakan kebalikan dari fungsi MAX (). Fungsi ini
dipergunakan untuk mencari nilai terkecil dari suatu kolom dalam suatu
tabel. Contohnya sebagai berikut.
5. STD(ekspresi) dan STDDEV(ekspresi)
Fungsi ini dapat kita gunakan untuk mendapatkan standar deviasi
dari suatu kolom dalam suatu tabel. Ekspresi biasanya menyatakan kolom
dalam suatu tabel dengan tipe data numerik. Contohnya sebagai berikut.
47
6. SUM(ekspresi)
Fungsi SUM () dipergunakan untuk mendapatkan total nilai dari
suatu kolom dalam suatu tabel. Contohnya sebagai berikut.
4.3 Soal Latihan
inberdasar database caffe tampilkan data berikut ini.
1. Menampilkan id_pelanggan dan nama_pelanggan dari tabel
pelanggan, dengan nama berawal huruf a.
2. Menampilkan id_pelanggan dan nama_pelanggan dari tabel
pelanggan, dengan nama berakhiran huruf i.
3. Menampilkan id_pelanggan dan nama_pelanggan dari tabel
pelanggan, dengan nama berakhiran ‘ani’.
4. Menampilkan id_pelanggan dan nama_pelanggan dari tabel
pelanggan, yang memiliki ‘li’ di antara namanya.
5. Menampilkan id_pelanggan dan nama_pelanggan dari tabel
pelanggan, yang berawalan huruf M.
6. Menampilkan id_pelanggan dan nama_pelanggan dari tabel
pelanggan yang memiliki nama berakhiran huruf a.
7. Menampilkan id_pelanggan dan nama_pelanggan dari tabel
pelanggan, yang nama pelanggan ini memiliki panjang karakter
15.
48
BAB 5
STORED PROCEDURE
Capaian Pembelajaran
1. Mampu memahami lebih lanjut tentang perintah SQL Stored
Procedure pada DBMS MySQL.
2. Mampu mengimplementasikan pembuatan stored procedure yang
diperlukan pada DBMS MySQL.
5.1 Stored procedure
Stored procedure yaitu sebuah kelompok kode SQL yang di
simpan di katalog database dan dapat di panggil kemudian oleh program,
trigger atau bahkan stored procedure. Sebuah Stored procedure yang
memanggil diri nya sendiri di sebut rekursif stored procedure. Fungsi dari
stored procedure ini yaitu untuk memanggil suatu data dalam tabel.
Dengan memakai stored procedure SQL tidak akan melakukan
loading semua tabel yang terrelasi, tetapi langsung melakukan filtering
inberdasar query yang kita maksud. Stored procedure menyimpan
statement-statement SQL dalam sebuah berkas yang disimpan di database
server, sehingga dari sisi performa eksekusi, kegunaan jaringan, dan
keamanan, stored procedure banyak dipakai sebagai solusi akses data.
Gambar 5.1 Ilustrasi Stored Procedure
49
Proses Query meliputi; Pengecekan Syntax, Pemilihan execution
plan yang paling optimal, dan Eksekusi query. Query yang ada di SP
sudah di-compile terlebih dahulu, jadi ada 1 step yang di-skip pada SP.
Compile maksudnya yaitu pemilihan mana execution plan yang paling
optimal.
5.1.1 Format Penulisan Stored procedure
Ada 4 proses yang dapat terjadi dalam stored procedure, yaitu
sebagai berikut.
1. Membuat Prosedur (CREATE)
Contoh: CREATE PROCEDURE sp_name ([proc_parameter
[,…]]) [characteristic..] routine_body
2. Memanggil Prosedur (CALL)
Contoh: CALL sp_name
3. Menampilkan Prosedur (SHOW)
Contoh: SHOW {PROCEDURE|FUNCTION} status;
4. Menghapus Prosedur (DROP)
Contoh: DROP {PROCEDURE|FUNCTION} [IF EXIST] sp_name
Format penulisan perintah stored procedure yaitu sebagai berikut.
delimeter //
create procedure NamaTabel(in NamaField_TipeData_LebarData,
in…)
begin
select * from NamaDatabase
end //
delimeter;
Penggunaan perintah delimiter dipakai untuk memberi tahu shell
myql soal delimiter (akhir statement) yang dipakai , secara default
delimiter yang memakai tanda titik koma (;) jadi bila ada tanda ;
MySQL akan mengartikan akhir dari statement, pada contoh di atas
delimeter yang dipakai // jadi akhir statementnya yaitu //, hal ini
dilakukan karena di dalam badan procedure (antara begin …. end)
memakai titik koma (;) sebagai akhir suatu statement.
50
Dalam membuat stored procedure kita dapat membuat variabel yang
dipakai untuk menyimpan procedure ke penyimpanan hasil dengan
segera, yaitu dengan mendeklarasikan variabel dengan perintah berikut:
DECLARE nama variabel tipe data (ukuran) DEFAULT nilai
default;
Contoh :
DECLARE total_sales INT DEFAULT 0
Selanjutnya untuk memberikan nilai ke variabel dapat dilakukan
dengan beberapa cara yaitu sebagai berikut.
1. memakai perintah SET
Contoh : DECLARE total_bayar INT DEFAULT 0
SET total_bayar =0
2. memakai perintah SELECT … INTO
Contoh: DECLARE total_bayar INT DEFAULT 0
SELECT COUNT(*) INTO total_bayar FROM pemesanan
Dalam sebuah stored procedure suatu variabel hanya berlaku di
dalam ruang lingkup nya masing-masing, yaitu di antara BEGIN dan END,
dan sebuah variabel yang di awali dengan tanda @, disebut dengan
variabel session, yang tetap ada hingga session berakhir.
5.1.2 Parameter dalam Stored procedure
Parameter dalam Stored procedure terdiri dari 3 bentuk, yaitu
sebagai berikut.
1. IN
Mode Default, dapat dipakai di dalam sebuah stored procedure,
namun stored procedure tidak dapat mengubah nilainya.
2. OUT
Parameter ini dapat di rubah oleh sebuah stored procedure yang
dilewatinya.
3. INOUT
Dapat melewati stored procedure dan mendapatkan kembali
nilainya yang berbeda dari program yang memanggil.
Syntax untuk mendefinisikan sebuah parameter sebagai berikut.
MODE nama_parameter tipe_parameter (ukuran
parameter);
51
5.1.3 Keuntungan kegunaan Stored procedure
Keuntungan dari penggunaan stored procedure yaitu sebagai berikut.
1. Dapat meningkatkan performance aplikasi, karena Stored procedure
dapat di simpan dan di compile di katalog database sehingga dapat
di proses lebih cepat di bandingkan SQL yang tidak di-compile dari
kode aplikasi.
2. Mengurangi traffic antara aplikasi dan database server. Aplikasi
hanya mengirim nama stored procedure untuk mengeksekusi SQL.
3. Dapat dipakai kembali, penggunaan Stored procedure dapat di
akses hak nya oleh aplikasi melalui database administrator.
5.1.4 Kekurangan kegunaan Stored procedure
Kekurangan dari penggunaan stored procedure yaitu sebagai berikut.
1. Dapat mengakibatkan database server membutuhkan memory dan
prosessor lebih tinggi.
2. Stored procedure hanya berisi SQL deklaratif, sehingga sangat sulit
untuk menulis sebuah procedure dengan kompleksitas logika.
3. Stored procedure tidak dapat dijalankan di berbagai RDBMS,
termasuk MySQL.
4. Membutuhkan keahlian khusus untuk menulis dan memelihara
stored procedure.
5.2 Uji Coba
Membuat stored procedure tabel data_penerbangan, jika ingin
menambah data di tabel data_penerbangan tetapi data ini sudah ada di
table data_penerbangan maka yang terjadi yaitu proses Update pada
kota_tujuan dan jam_tiba, tetapi jika data yang ingin ditambah tidak ada di
table Barang maka akan dilakukan proses Insert seluruh data pada tabel
data_penerbangan.
52
1. Buat stored procedure dengan studi kasus seperti di atas.
a. DELIMITER yaitu untuk memberi tahu kepada MySQL soal
delimiter yang dipakai , secara default memakai ; jadi bila
ada tanda ; MySQL akan mengartikan akhir dari statement, pada
contoh di atas delimeter yang dipakai // jadi akhir statementnya
yaitu //.
b. CREATE PROCEDURE yaitu header untuk membuat procedure.
c. BEGIN untuk memulai instruksi dari procedure.
d. If, Then, dan Else yaitu untuk memberikan perintah-perintah yang
akan berjalan dalam procedure ini .
e. END If yaitu untuk menghentikan proses tindakan procedure yang
dibuat.
f. END yaitu untuk mengakhiri proses.
2. Tampilkan table data_penerbangan sebelum proses call, agar dapat
mengetahui bagaimana perubahan table sesudah proses call
dilakukan dengan perintah SELECT * FROM data_penerbangan//.
Gambar 5.2 Membuat Stored procedure sp_maskapai
53
3. Lakukan proses call dengan data yang belum ada di table
data_penerbangan seperti berikut.
CALL sp_maskapai3 ('SSPD', 'LionAir', 'Banjarmasin',
'Samarinda', '2020-01-06', '08:25:00.000000',
'10:25:00.000000', 'E', '3', '45');
Terjadi pertambahan data dalam table data_penerbangan karena
pemanggilan data yang dilakukan oleh “call” sebelumnya belum ada
pada tabel data_penerbangan.
4. Lakukan lagi proses call dengan data yang sudah ada di table
data_penerbangan untuk memperbarui data yang ada seperti berikut.
CALL sp_maskapai3 ('ACDG', 'Lion Air', 'Banjarmasin',
'Arab Saudi', '2020-01-06', '08:25:00.000000',
'23:25:00.000000', 'E', '3', '45');
Gambar 5.3 Menampilkan tabel data_penerbangan
Gambar 5.4 Proses Call sp_maskapai
54
Terjadi pembaharuan data pada field kota_tujuan dan jam_tiba
karena data yang dimasukkan sudah tersimpan dalam tabel
data_penerbangan sehingga hanya terjadi update atau pembaharuan pada
field tertentu / yang diperbaharui saja.
5. Jika ingin melihat status dari stored procedure dapat dilakukan
dengan perintah berikut.
SHOW PROCEDURE STATUS;
Maka terlihat hasil dari stored procedure yang telah dibuat.
6. Jika Ingin menghapus stored procedure dapat dilakukan dengan
perintah berikut.
DROP + PROCEDURE + sp_name;
Gambar 5.5 Proses Call sp_maskapai
Gambar 5.6 Menampilkan Status Stored procedure
55
Maka prosedur sp_maskapai telah terhapus, untuk memastikannya
maka dapat memakai perintah yang dapat menampilkan status
prosedur.
5.3 Soal Latihan
Buatlah procedure untuk mengubah daftar menu pada dbcaffe,
ketika proses call dijalankan maka menu ditambahkan (proses insert)
kedalam daftar menu jika tidak ada kd_menu yang sama tapi jika kd_menu
yang diinputkan ada yang sama dengan kd_menu di daftar menu maka
menu akan diedit (proses update) sesuai dengan yang diinputkan.
1. Tampilkan data awal sebelum proses pemanggilan call pada Tabel
menu.
2. Selanjutnya lakukan perintah call dan buat perintah menjalankan
instruksi insert dan update.
Gambar 5.7 Drop Procedure
56
BAB 6
FUNCTION
Capaian Pembelajaran
1. Mampu memahami lebih lanjut tentang perintah SQL function pada
DBMS MySQL.
2. Mampu mengimplementasikan pembuatan function yang diperlukan
pada DBMS MySQL.
6.1 Function
Function yaitu sebuah kumpulan statement yang akan
mengembalikan sebuah nilai balik pada pemanggilnya. Nilai yang
dihasilkan function harus ditampung kedalam sebuah variabel. Fungsi
merupakan suatu bagian dari program yang dipakai untuk mengerjakan
suatu tugas tertentu yang menghasilkan suatu nilai untuk dikembalikan ke
program pemanggil dan letaknya dipisahkan dari bagian program yang
memakai nya.
6.1.1 Perbedaan Function dan Procedure
Function akan mengembalikan suatu nilai pada pemanggilnya,
sedangkan procedure tidak akan mengembalikan nilai apapun pada fungsi
pemanggilnya. Fungsi (Function) yaitu suatu bagian dari program yang
dipergunakan untuk mengerjakan suatu tugas tertentu yang menghasilkan
suatu nilai untuk dikembalikan ke program pemanggil dan letaknya
dipisahkan dari bagian program yang memakai nya.
6.1.2 Kegunaan Function
Kegunaan dari function yaitu sebagai berikut.
1. Menghindari pengulangan, tujuannya untuk menghindari penulisan
bagian kode program berulang-ulang.
57
2. Penataan program, program yang besar dan kompleks dibagi-bagi
menjadi aktivitas yang berbeda dan ditempatkan dalam subrutine
yang terpisah, sehingga setiap aktivitas bisa ditulis dan diperiksa
secara mandiri.
3. Kemandirian, mempunyai variabel “private” yaitu variabel yang
tidak bisa diakses program pemanggil atau subrutin lain.
6.1.3 Alasan membuat function di MySQL
Alasan membuat function di MySQL yaitu sebagai berikut.
1. Penggunaan Menjadi Lebih Mudah
Dengan kita membuat function berarti kita telah meringkas beberapa
perintah SQL menjadi satu perintah saja, sehingga dalam penggunaanya
menjadi mudah. Mudah di sini berarti user atau pengguna tidak perlu
mengetahui isi dari fungsi ini . Contohnya seperti kita memakai
fungsi string yang telah disediakan oleh MySQL, kita cukup mengetahui
cara penggunaannya saja tanpa harus mengetahui perintah SQL yang
berada di dalam fungsi string ini .
2. Keamanan Lebih Terjaga
Dengan membuat function kita dapat memberi hak akses kepada
masing-masing user. Kita cukup memberikan hak akses untuk
menjalankan function saja kepada user, tanpa harus memberikan hak akses
untuk memanipulasi Tabel aslinya secara langsung. Selain itu, user juga
tidak akan mengetahui perintah yang berada di dalam function ini ,
karena telah disembunyikan.
6.1.4 Bentuk umum membuat function
Bentuk umum dalam membuat function yaitu sebagai berikut.
CREATE FUNCTION ([parameter,[…]])
RETURNS tipe_data_hasil_kembalian
RETURN isi_fungsi
Keterangan dari bentuk umum di atas yaitu sebagai berikut.
58
1. DELIMITER untuk memberi tahu kepada myql soal delimiter yang
dipakai , secara default memakai ;.
2. CREATE FUNCTION header untuk membuat function.
3. RETURNS yaitu untuk menentukan tipe data yang di return oleh
function.
4. DETERMINISTIC/ NOT DETERMINISTIC untuk menentukan
yang bisa memakai function ini yaitu user pembuatnya saja
(determinisric) atau siapa saja (not determinisric).
5. BEGIN END yaitu body dari function jadi semua SQL nya di tulis
disini.
6.2 Uji Coba
Ketika ingin memakai jasa penerbangan para calon penumpang
maskapai biasanya mencek terlebih dahulu apakah masih ada slot kursi di
salah satu maskapai yang dipakai , oleh karena itu pada BAB ini kita
akan memakai yang namanya function (fungsi) untuk memudahkan
para calon penumpang yang ingin mengecek slot kursi pesawat di salah
satu maskapai yang diinginkan dengan memakai FUNCTION.
Contoh kasusnya yaitu menampilkan jumlah kursi penerbangan
yang tersedia pada setiap nomor penerbangan di tabel data_penerbangan.
1. Buat function.
Gambar 6.1 Membuat Function jmlh_kursi
59
2. Tampilkan table data_penerbangan untuk perbandingan.
3. Untuk menampilkan hasil function, lakukan proses select, tampilkan
jumlah kursi yang ada pada no penerbangan “BA817”.
4. Untuk melihat status dari function.
Gambar 6.2 Menampilkan Data Tabel data_penerbangan
Gambar 6.3 Menampilkan Hasil Function jmlh_kursi
Gambar 6.4 Menampilkan Status Function
60
6.3 Soal Latihan
1. Buatlah function fc_catatan di database dbcaffe dan tampilkan tabel
transaksi.
2. Tampilkan catatan untuk harga 20000.
3. Tampilkan catatan untuk harga 35000.
4. Tampilkan status dari function.
61
BAB 7
TRIGGER
Capaian Pembelajaran
1. Mampu memahami lebih lanjut tentang perintah SQL Trigger pada
DBMS MySQL.
2. Mampu mengimplementasikan pembuatan trigger pada DBMS
MySQL.
7.1 Trigger
Trigger merupakan stored procedure yang dijalankan secara
automatis saat user melakukan modifikasi data pada tabel. Modifikasi data
yang dilakukan pada tabel yaitu berupa perintah INSERT, UPDATE, dan
DELETE. INSERT , UPDATE dan DELETE bisa digabung jadi satu
trigger yang dinamakan Multiple Trigger. Event ini meliputi operasi
yang biasa dilakukan dalam mengolah database, seperti berikut.
1. DML (Data Manipulation Language) yang meliputi DELETE,
INSERT atau UPDATE.
2. DDL (Data Definition Language) yang meliputi CREATE, ALTER
atau DROP.
3. Operasi database lainnya, seperti SERVERERROR, LOGON,
LOGOFF, STARTUP atau SHUTDOWN).
Keterangan dari bentuk perintah umum dalam membuat trigger,
yaitu sebagai berikut.
1. nama_trigger yaitu nama trigger yang dibuat sesuai dengan
karakteristik penamaan dalam MySQL.
2. [BEFORE|AFTER] menunjukkan waktu untuk mengeksekusi
trigger secara otomatis, apakah sebelum atau sesudah perubahan
pada row data table. Jadi pilihannya yaitu AFTER atau BEFORE.
62
3. [INSERT | UPDATE | DELETE] dipakai untuk menentukan
event yang menyebabkan terjadinya trigger, pilihan event ini
terdiri dari INSER, UPDATE dan DELETE.
4. nama_table menunjukkan table yang akan dilakukan trigger di
dalamnya.
5. trigger_body menunjukkan statement perintah dalam MySQL yang
akan otomatis dijalankan jika event sedang aktif.
7.1.1 Jenis Trigger
Trigger terdiri dari beberapa jenis, yaitu sebagai berikut.
1. Application trigger, diaktifkan pada saat terjadi event yang
berhubungan dengan sebuah aplikasi.
2. Database trigger, diaktifkan pada saat terjadi event yang
berhubungan dengan data (seperti operasi DML) atau event yang
berhubungan dengan sistem (semisal logon atau shutdown) yang
terjadi pada sebuah skema atau database.
7.1.2 Sintaks Penulisan
Sintak penulisan dari database trigger, berisi komponen berikut.
1. Trigger timing:
a. BEFORE : trigger dijalankan sebelum DML event pada tabel.
b. AFTER : trigger dijalankan sesudah DML event pada tabel.
c. INSTEAD OF : trigger dijalankan pada sebuah view.
2. Trigger event: INSERT, UPDATE atau DELETE
3. Nama tabel: nama tabel atau view yang berhubungan dengan
trigger.
4. Tipe trigger: baris atau pernyataan (statement).
5. Klausa WHEN: untuk kondisi pembatasan.
6. Trigger body: bagian prosedur yang dituliskan pada trigger.
7.1.3 Tipe Trigger
Tipe trigger ada 2 macam, yaitu sebagai berikut.
1. Statement, trigger dijalankan sekali saja pada saat terjadi sebuah
event dan tidak mempengaruhi satupun baris dari event yang terjadi.
63
2. Row, trigger dijalankan pada setiap baris yang dipengaruhi oleh
terjadinya sebuah event. Row trigger tidak akan jalan jika event dari
trigger tidak terpengaruh.
Berikut sintak atau cara penulisan pembuatan DML Statement
trigger.
CREATE [OR REPLACE] TRIGGER trigger_name
timing
event1 [OR event2 OR event3]
ON table_name
trigger_body
Berikut contoh pembuatan DML Statement trigger.
CREATE OR REPLACE TRIGGER secure_emp
BEFORE INSERT ON employees
BEGIN
IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR
(TO_CHAR(SYSDATE,'HH24:MI') NOT BETWEEN '08:00' AND
'18:00')
THEN RAISE_APPLICATION_ERROR (-20500,'Penyisipan data
pada table
EMPLOYEES hanya diperbolehkan selama jam kerja');
END IF;
END//
7.2 Uji Coba
Contoh kasusnya ialah trigger tiket, mengurangi jumlah kursi_eko
di tabel data_penerbangan ketika insert (menambahkan / memasukkan)
data baru jika berfield “Ekonomi” di table tiket, dan mengurangi jumlah
kursi_bis di table data_penerbangan ketika insert (menambahkan/
memasukkan) data baru jika berfield “ Bisnis” pada table tiket.
64
1. Buat syntax trigger.
Mengapa memakai delimiter? Karena MySQL secara default
menganggap titik koma (;) sebagai delimiter/pembatas akhir dari suatu
perintah/statement. Akhirnya pembuatan objek yang memiliki beberapa
statement tidak akan berjalan sempurna karena "berhenti di tengah jalan".
Solusi terhadap masalah di atas yaitu memakai delimiter
selain tanda titik koma (;) misalkan dengan garis pipa (|). Penggunaannya
sangat sederhana, sebelum mendefinisikan objek ini kita gunakan
statement "DELIMITER" diikuti tanda pemisah baru. sesudah di akhir
pendefinisian kita kembalikan delimiter lagi kepada tanda titik koma.
2. Tampilkan table data_penerbangan sebelum proses insert, agar
dapat mengetahui perubahan pada data_penerbangan.
3. Lakukan proses insert untuk kejadian ‘kurang’ berfield “Ekonomi”
untuk membuat variasi data dan tampilkan data Penerbangan dan
tiket untuk melihat hasil perubahan.
Gambar 7.1 Membuat Trigger InsertTiket
Gambar 7.2 Menampilkan Data Tabel data_penerbangan
65
Selanjutnya yaitu tampilkan perubahan data yang terjadi di tabel tiket.
Selanjutnya perhatikan perubahan yang terjadi pada tabel data
penerbangan.
Gambar 7.3 Menambahkan data pada Tabel Tiket (Ekonomi)
Gambar 7.4 Menampilkan Data Tabel Tiket
Gambar 7.5 Menampilkan Data Tabel data_penerbangan
66
4. Membuat trigger berfield bisnis.
Lakukan proses insert untuk kejadian ‘kurang’ berfield “Bisnis”
untuk membuat variasi data dan tampilkan data Penerbangan dan tiket
untuk melihat hasil perubahan.
Gambar 7.6 Membuat Trigger Field Bisnis
Gambar 7.7 Menambahkan data pada tabel tiket
Gambar 7.8 Menampilkan Data Tabel Tiket
67
5. Menampilkan status trigger.
7.3 Soal Latihan
Lakukan uji coba di atas pada database dbcaffe sebelumnya.
Buatlah sebuah trigger delete yang menghubungkan antara tabel menu
dengan tabel log_menu. Jika ada salah satu dari setiap data pada tabel
menu yang dihapus, maka data ini akan muncul di tabel log_menu. Isi
field pada log_menu sendiri yaitu semua field yang ada pada tabel menu
dan satu field baru yaitu tanggal_hapus sebagai keterangan kapan data
ini dihapus.
1. Membuat trigger tg_logmenu untuk tabel menu. Trigger ini
menyimpan setiap baris data yang dihapus pada tabel menu dan
akan ditampilkan pada tabel log_menu dengan keterangan tanggal
data ini dihapus.
2. Melihat isi data awal pada tabel menu sebelum menghapus salah
satu data.
Gambar 7.9 Menampilkan Data Tabel data_penerbangan
Gambar 7.10 Menampilkan Status Trigger
68
3. Menghapus data pada tabel menu. Yaitu penghapusan menu pasta
dengan kd_menu M21.
4. Melihat perubahan isi data pada tabel menu. kd_menu M21 sudah
dihapus.
5. Melihat perubahan isi data pada tabel log_menu. kd_menu M21
yang sudah dihapus tadi akan muncul ditabel ini dengan keterangan
tanggal kapan data itu dihapus.
6. Melihat status dari trigger.
69
BAB 8
VIEW/INDEX
Capaian Pembelajaran
1. Mampu memahami lebih lanjut tentang perintah SQL view dan
index pada DBMS MySQL.
2. Mampu mengimplementasikan pembuatan view dan index pada
DBMS MySQL.
8.1 Perintah View
View yaitu perintah query yang disimpan pada database dengan
suatu nama tertentu, sehingga bisa dipakai setiap saat untuk melihat
data tanpa menuliskan ulang query ini .
1. Kegunaan VIEW yaitu sebagai berikut.
a. Menyembunyikan Kolom atau Baris Fungsi built-in layer.
b. Menampilkan hasil dari perhitungan.
c. Menyediakan level isolasi antara data tabel dan View data pengguna.
d. Memberikan trigger berbeda pada view yang berbeda dari tabel yang
sama.
e. Memberikan proses permission yang berbeda untuk view yang
berbeda dari tabel yang sama.
f. Menyembunyikan Sintak SQL yang rumit.
2. Keuntungan VIEW yaitu sebagai berikut.
a. Membatasi akses data.
b. Menyediakan data yang independen.
c. Menampilkan view yang berbeda-beda dengan data yang sama.
d. Memudahkan query yang kompleks.
Cara membuat View yaitu sebagai berikut.
70
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
Untuk menampilkan Query yang telah dibuat :
SELECT * FROM nama_view
Untuk menghapus Query view yang kita buat :
DROP nama_view
8.2 Uji Coba View
Studi kasus yang terjadi pada database penerbangan yaitu
menampilkan data pemesanan tiket pelanggan (pemesanan.no_pemesanan,
tiket.no_tiket, pelanggan.email_pel, data_penerbangan.no_penerbangan)
dengan 4 tabel yang digabungkan dan menampilkan data cek jadwal
(pemesanan.no_pemesanan, pelanggan.email_pel,
data_penerbangan.no_penerbangan) dengan 3 tabel yang digabungkan.
1. Membuat View Pemesanan Tiket Pelanggan.
Untuk dapat membuat tabel pemesanan tiket kita dapat
memakai perintah ‘create view’ dan untuk menampilkan tabel
ini memakai perintah ‘select’.
2. Buat view pada tabel pemesanan, tiket, pelanggan dan data
penerbangan, sesuaikan field-nya pada setiap tabel seperti di bawah
ini.
Gambar 8.1 Membuat View Tabel pemesanan_tiket
71
3. Lalu tampilkan hasil view yang dibuat.
4. Membuat View Cek Jadwal
Untuk dapat membuat tabel pemesanan tiket kita dapat
memakai perintah ‘create view’ dan untuk menampilkan tabel
ini memakai perintah ‘select’
5. Buat view pada table pemesanan, pelanggan dan data penerbangan,
sesuaikan fieldnyac pada setiap tabel seperti di bawah ini.
Gambar 8.2 Menampilkan Hasil View
Gambar 8.3 Membuat View Tabel cek_jadwal
72
6. Lalu tampilkan hasil view yang telah dibuat.
8.3 Membuat Index
Index sering disebut sebagai peningkat performa dari database.
Penggunaan tabel index ini mirip dengan indeks yang ada di bagian
belakang sebuah buku. Index yaitu sebuah tabel spesial dalam sistem
database yang dapat mempercepat pencarian (query) data. Index
merupakan objek struktur data tersendiri yang tidak bergantung pada
struktur tabel. Setiap index terdiri dari nilai kolom dan penunjuk (atau
ROWID) ke baris yang berisi nilai ini .
Index ini bertujuan untuk mempercepat pencarian data inberdasar
kolom tertentu. Apabila pada suatu tabel tidak ada index, maka dalam
proses pencarian data membutuhkan waktu yang cukup lama (apabila data
dalam jumlah yang besar).
Berikut ini yaitu beberapa alasan mengapa index diperlukan.
1. Kolom sering dipakai dalam klausa WHERE atau dalam kondisi
JOIN.
2. Kolom berisi nilai dengan jangkauan yang luas.
3. Kolom berisi banyak nilai null.
4. Tabel berukuran besar.
Adapun beberapa kondisi di mana tidak diperlukannya index, yaitu ketika:
1. tabel berukuran kecil,
Gambar 8.4 Menampilkan Hasil View
73
2. kolom jarang dipakai sebagai kondisi dalam pencarian (query),
dan
3. tabel sering di-update.
Cara membuat Index yaitu mengikuti tahapan berikut ini.
1. Bentuk perintah index unik.
CREATE UNIQUE INDEX nama_index ON nama_tabel
nama_kolom_yang_diindex);
2. Index lebih dari satu kolom.
CREATE UNIQUE INDEX nama_index ON nama_tabel
nama_kolom_yang_diindex1,
nama_kolom_yang_diindex2);
3. Index yang nilai kolom dalam sejumlah record boleh sama.
CRETAE INDEX nama_index ON nama_tabel
nama_kolom_yang_diindex);
Cara melihat hasil index yaitu seperti tahapan berikut ini.
1. Melihat index dengan satu kolom
SELECT nama_kolom_index FROM nama_tabel
WHERE nama_field(primary key) ;
2. Melihat index lebih dari satu kolom
SELECT nama_kolom_index1, nama_kolom_index2 FROM
nama_tabel WHERE” nama_field(primary key)”;
Cara mengahapus index yaitu sebagai berikut.
DROP INDEX nama_index ON nama_tabel;
8.4 Uji Coba Index
1. Proses Index untuk satu kolom
Pada proses index, apabila pada tabel Pemesanan memiliki data
yang sangat banyak, dan kita ingin mencari harga_total sesuai dengan
no_pesanan pelanggan maka akan membutuhkan waktu yang cukup lama
(buffering). Jadi, dengan memakai index, waktu yang diperlukan
menjadi lebih singkat dan kita dapat melihat satu kolom index yaitu
harga_total.
74
a. Membuat index yang hanya berfokus pada tabel pemesanan.
b. Menampilkan harga_total pada tabel pemesanan yang no_pesanan
nya “30363921”.
2. Proses index unique lebih dari satu kolom
Pada proses index unique lebih dari satu kolom ini kita dapat melihat
dua kolom index pada tabel data_penerbangan yaitu kolom Jam_Berangkat
dan Terminal. Sehingga lebih mempermudah kita untuk mencari
informasi.
a. Membuat index unique yang hanya berfokus pada tabel
data_penerbangan.
Gambar 8.5 Membuat Index harga_total
Gambar 8.6 Menampilkan Hasil Index
Gambar 8.7 Membuat Index Unique lihat_jadwal
75
b. Menampilkan Jam_Berangkat dan Terminal pada tabel
data_penerbangan yang No_Penerbangan “BA817”.
8.5 Soal Latihan
1. Proses View
a. Buat view dari tabel menu pilih nm_menu, dari tabel transaksi pilih
total_harga, id_pelanggan dan tgl_trx.
b. Tampilkan view yang telah dibuat.
2. Proses Index
a. Buat index untuk melihat harga pada tabel menu.
b. Tampilkan harga di tabel menu yang memiliki kd_menu M10.
Gambar 8.8 Menampilkan Hasil Index Unique
76
BAB 9
TRANSACTION
Capaian Pembelajaran
1. Mampu memahami lebih lanjut tentang perintah SQL transact SQL
pada DBMS MySQL.
2. Mampu mengimplementasikan pembuatan transact SQL yang
diperlukan pada DBMS MySQL.
9.1 Transaction
Transaction atau transaksi yaitu sekelompok berurutan operasi
manipulasi database yang dilakukan seolah-olah sebagai satu kesatuan
unit tunggal, dengan kata lain transaksi tidak akan lengkap jika semua
operasi dalam kelompok berhasil. jika ada salah satu operasi yang gagal
maka seluruh transaksi akan gagal. Transaksi yaitu implementasi dari
suatu operasi yang dapat mengakses database dan juga dapat mengubah
data dari database ini .
DBMS atau “Database Management System” atau yang dipakai
untuk membangun basis data yang berbasis komputerisasi harus
mendukung operasi transaksi yang kita gunakan. Artinya operasi transaksi
harus dikerjakan secara menyeluruh (tidak parsial), karena dapat
mengakibatkan basis data yang tidak konsisten
9.1.1 Tujuan Transaksi
Adapun tujuan daripada Transaksi yaitu untuk menghindari suatu
masalah pada data yang ada di database kita, seperti data yang rusak atau
bahkan data yang sampai hilang. Dan untuk mendukung Transaksi ini
agar dapat tetap konsisten, maka Transaksi wajib mempunyai beberapa
sifat-sifat sebagai berikut.
1. Atomicity, yaitu keseluruhan dari tindakan yang harus diselesaikan
atau dibatalkan.
77
2. Consistency, yakni menunjukkan konsistensi data yang ada sesudah
terjadi transaksi.
3. Isolation, data yang sedang di lakukan perubahan tidak boleh
diakses oleh lebih dari satu operasi.
4. Durability, memastikan data yang telah disimpan (committed data)
disimpan oleh sistem sebagaimana keadaannya, bahkan jika dalam
keadaan kegagalan sistem dan restart sistem, data ini tersedia
dalam tahapan dan keadaan yang benar.
Dari suatu transaksi akan menghasilkan dua kemungkinan sebagai
berikut. Kemungkinan pertama yaitu jika transaksi ini dilakukan
dengan baik dalam arti keseluruhan maka dapat dikatakan bahwa transaksi
itu dapat di-commit dan database ini menjadi konsisten baru. Jika
transaksi yang sudah pasti di commit maka transaksi ini tidak dapat
dikembalikan lagi, kecuali melakukan transaksi ulang seperti
mengambilkan ke transaksi ke sebelumnya memakai beberapa
operasi. Kemungkinan kedua yaitu jika transaksi ini tidak dilakukan
atau dibatalkan maka dapat dikatakan bahwa database yang melakukan
transaksi ini menjadi seperti keadaan konsisten sebelumnya
(rollback).
9.1.2 Status Transaksi
Adapun status dari transaksi yaitu sebagai berikut.
1. Aktif (active) yaitu status awal (initial state) dari suatu operasi
transaksi yang menandakan bahwa transaksi ini dapat
dieksekusi.
2. Berhasil sebagian (partially committed) yaitu status di mana
operasi transaksi yang bertepatan pada operasi terakhir dalam
transaksi ini sudah diselesaikan.
3. Gagal (failed) yaitu status di mana operasi transaksi berada pada
terhentinya pengeksekusian, padahal operasi belum selesai.
4. Batal (aborted) yaitu status di mana operasi transaksi tidak jadi
dikerjakan dan pastinya sebelum itu data sudah dikembalikan ke
bentuk semulanya.
5. Berhasil sempurna (committed) yaitu status di mana operasi
transaksi dianggap telah selesai dalam keseluruhan sehingga
78
database dapat menampilkan perubahan-perubahan yang kita
inginkan pada operasi transaksi ini .
Operasi Transaksi memiliki beberapa state yang bertujuan untuk
mengetahui kapan suatu transaksi itu mulai dan kapan suatu transaksi
berhenti sebagai berikut.
1. BEGIN_TRANSACTION dipakai untuk memulai transaksi.
2. READ/WRITE dipakai untuk operasi-operasi pada operasi
transaksi.
3. END_ TRANSACTION dipakai untuk mengakhir transaksi, dan
kemudian operasi transaksi akan dicek, jika ada yang ingin dibuat
permanen atau digagalkan.
4. COMMIT_TRANSACTION dipakai untuk memberikan signal
jika operasi transaksi telah sukses.
5. ROLLBACK (abort) dipakai untuk memberikan signal jika
operasi transaksi ada yang gagal dan perubahan pada database harus
dihapuskan.
Untuk melakukan suatu transaksi dipakai syntax berikut.
BEGIN {TRAN | TRANSACTION }
[ transaction_name |@tran_name_variable]
[ WITH MARK [ ‘description’] ]
[ database_operation ]
COMMIT { TRAN | TRANSACTION }
[ transaction_name |
@tran_name_variable ]
79
9.1.3 Alur Operasi Transaksi
Adapun contoh alur dari pembuatan operasi transaksi sebagai berikut.
Dalam membuat dan menjalankan transaction ada beberapa hal
yang perlu diperhatikan sebagai berikut.
1. Mesin Penyimpanan
MySQL menyiapkan berbagai jenis penyimpanan, yang akan
menetapkan bagaimana sebenarnya suatu table disimpan. Secara tipe yang
dipakai untuk table yaitu MyISAM. Mengenai jenis mesin penyimpan
lain yang didukung oleh MySQL antara lain Memory (Heap), BDB
(BerkeleyDB), dan InnoDB.
Secara khusus tipe InnoDB akan dibahas karena mendukung fitur
transaksi. Fitur ini sangat bermanfaat karena mengharuskan penanganan
Commit dan Rollback, yang biasanya tersedia pada DBMS komersial.
Perlu diketahui, walau InnoDB mendukung transaksi, bukan berarti
InnoDB lebih baik daripada tipe seperti MyISAM. Bila Anda memang
tidak memerlukan transaksi akan lebih baik kalau memakai tipe
seperti MyISAM dikarenakan kinerja menjadi lebih cepat. Selain itu, perlu
juga diketahui bahwa implementasi InnoDB masih memiliki beberapa
batasan, antara lain tidak mendukung tipe kolom spasial dan proses untuk
menghitung semacam SELECT COUNT(*) FROM table berjalan lebih
lama dari pada pada MyISAM karena implementasi InnoDB secara
internal tidak tercatat jumlah baris dalam tabel.
Gambar 9.1 Alur Operasi Transaksi
80
2. Menciptakan Tabel Bertipe InnoDB
Untuk menciptakan tabel bertipe InnoDB, perlu penambahan
ENGINE=InnoDB di bagian belakang pernyataan CREATE TABLE.
Untuk mempraktikkan hal ini, berikan perintah berikut terlebih dulu untuk
mengaktifkan database test.
Dengan perintah di atas maka mesin penyimpanan akan mengubah
tabel barang menjadi tabel dengan tipe InnoDB
3. Memahami Transaksi
Transaksi yaitu sederetan operasi yang berkedudukan sebagai satu
kesatuan proses. Dalam dunia nyata, proses pengambilan uang melalui
ATM merupakan contoh sebuah transaksi, yang mencakup pemasukan
kartu ATM, pemasukan nomor PIN (Personal Identification Number),
penentuan jumlah uang yang akan diambil, hingga pengambilan uang itu
sendiri. Dalam proses transaksi seperti itu, ada dua kemungkinan yang
seharusnya dipenuhi, yaitu:
a. transaksi dianggap berhasil jika semua proses berjalan lancar dan
b. transaksi dianggap gagal kalau ada salah satu bagian proses yang
gagal.
4. Cara memakai Transaksi
Setiap klien MySQL yang melakukan koneksi ke MySQL server
memakai mode AUTOCOMMIT, yang berarti setiap perintah SQL
dengan sendirinya akan mengalami proses COMMIT. COMMIT sendiri
berarti “menyetujui perintah untuk segera dimutakhirkan ke database”.
Untuk mematikan mode AUTOCOMMIT, maka dapat
memakai perintah SET AUTOCOMMIT=0. inberdasar kondisi
ini suatu perintah SQL yang melaksanakan perubahan data di
Gambar 9.2 Penerapan perintah membuat tabel dengan engine InnoDB
81
database dapat disetujui untuk mengeksekusi perintah simpan secara
menetap dengan memakai perintah COMMIT atau dapat pula
dibatalkan dengan memakai perintah ROLLBACK.
5. Problem pada Multiuser
Sedangkan lingkungan yang multiuser, akses terhadap database
dilakukan sejumlah orang. Pada keadaan seperti ini, muncul masalah yang
mungkin terjadi. Berikut yaitu masalah yang perlu diketahui.
a. Pemutakhiran yang hilang (lost update).
Masalah operasi update yang sukses dari seorang pengguna
kemudian diikuti oleh operasi update dari pengguna lain.
inberdasar ilustrasi di atas tampak bahwa dari transaksi
pertama menghasilkan update kursikosong sebanyak 10 kursi yang
seharusnya sesudah dikurangi dengan update perintah yang kedua
yaitu sisa kursikosongnya yaitu sebanyak 3 kursi, tetapi
dikarenakan terjadi kesalahan dikarenakan eksekusi proses yang
bersamaan menyebabkan data menjadi tidak valid, dan ini memiliki
pengaruh yang sangat besar dalam suatu proses bisnis.
b. Pembacaan Kotor.
Masalah terjadi saat suatu transaksi membaca data dari transaksi
lain yang belum di-commit.
Gambar 9.3 Ilustrasi Masalah Pemutakhiran yang Hilang
82
Dari ilustrasi Gambar 9.4 di atas terlihat bahwa proses transaksi
kedua melihat kolom kursikosong bernilai 10, tetapi ternyata
beberapa saat kemudian nilai kolom ini telah berubah menjadi
15 yang diakibatkan perintah ROOLBACK dari transaksi pertama.
c. Pembacaan yang Tidak Sama.
Kasus ini terjadi jika seseorang pemakai menemukan nilai yang
berubah dalam jangka waktu yang sangat pendek. Contoh dapat
dilihat pada gambar berikut:
inberdasar ilustrasi pada Gambar 9.5 terlihat bahwa kondisi
yaitu kolom kursikosong bernilai 15, tetapi beberapa saat terjadi
Gambar 9.4 Permasalahan akibat pembacaan kotor
Gambar 9.5 Permasalahan akibat pembacaan tidak sama
83
proses update data yaitu data kursikosong berubah menjadi 10. Hal
seperti ini menjadi masalah bagi transaksi kedua berupa suatu proses
yang membaca data dalam waktu yang lama, misalnya membuat
sebuah ringkasan
d. Penyisipan yang Tak Dikehendaki.
Penyisipan yang tidak dikehendaki yaitu kasus khusus dari
pembacaan yang tidak sama. Hal ini terjadi apabila instruksi
INSERT saat pengguna lain sedang melakukan suatu query ini
belum selesai. Penyisipan ini akan menimbulkan perbedaan hasil
saat diakses oleh pengguna lain.
6. Penanganan Multiuser
Metode penanganan multiuser (yaitu suatu proses pengaksesan basis
data secara bersamaan oleh sejumlah pemakai) atau disebut dengan istilah
penguncian (locking). Penguncian yang dilakukan oleh para pemakai dapat
dilakukan terhadap semua baris atau sejumlah baris dalam database.
Melihat kondisi ini perintah bawaan MYSQL akan melakukan
penguncian secara otomatis pada baris yang diakses, tetapi ada saatnya
penguncian harus dilakukan secara manual.
84
inberdasar pada contoh di atas, user yang terhubung dengan
database dapat melakukan operasi untuk mengubah baris ini sebelum
dilakukan UPDATE. Hasilnya, perintah UPDATE yang mengubah jumlah
menjadi 10 dapat memberikan hasil yang salah terhadap kolom ini .
Jika dalam pengelolaan database Anda tidak mau orang lain dapat
mengubah baris ini sebelum pemakai pertama memberikan
COMMIT, maka dapat menambahkan perintah FOR UPDATE pada
perintah SELECT. Perhatikan gambar berikut:
Gambar 9.6 Contoh aktivitas dalam transaksi
85
Pada contoh di atas, baris dengan kd_jadwal=’jw212’ akan tetap
terkunci dan akan terbuka ketika dilaksanakannya atau diberikan perintah
COMMIT. Penguncian dilakukan dengan FOR UPDATE pada pernyataan
SELECT. Dari ilustrasi gambar 9.7 di atas maka sebelum COMMIT, orang
lain tidak dapat mengubah baris (harus menunggu sampai pemakai yang
mengunci memberikan COMMIT atau waktu tunggu habis).
Selain FOR UPDATE, perintah LOCK IN SHARE MODE juga bisa
dapat dipakai . Kedua perintah ini mempunyai kemampuan
melindungi dari memungkinkan orang lain melakukan perubahan pada
baris yang dikunci. Perbedaannya, SELECT-FOR UPDATE hanya bisa
dijalankan oleh satu pengguna, sedangkan SELECT-FOR SHARE MODE
bisa dijalankan oleh banyak pengguna.
Gambar 9.7 Cara mengunci baris pada database multiuser
86
7. Penguncian Secara Otomatis
MySQL memakai penguncian secara otomatis terhadap
sejumlah perintah yang memperbaharui database. Beberapa pernyataan
yang memakai penguncian secara otomatis yaitu sebagai berikut.
a. Pernyataan UPDATE, saat UPDATE dilakukan, semua baris yang
diubah akan dikunci. Jika ada yang memperbaharui baris yang sama,
maka pengguna yang akan melakukan UPDATE selanjutnya harus
menunggu sampai UPDATE yang pertama mengalami COMMIT.
b. Pernyataan INSERT, pernyataan INSERT membuat semua kunci
primer atau kunci yang unik akan dikunci. Hal inilah yang
memungkinkan pencegahan kunci yang identik.
c. Pernyataan SELECT dengan klausa FOR UPDATE dan LOCK IN
SHARE MODE Saat SELECT dengan FOR UPDATE dan LOCK
IN SHARE MODE dilakukan, semua baris yang dihasilkan akan
dikunci sampai ada COMMIT atau ROLLBACK.
9.2 Uji Coba
Ketika pelanggan ingin bepergian memakai pesawat, yang
pertama kali yang dilakukan yaitu memesan tiket, nah di dalam database
penerbangan memiliki tabel data_penerbangan yang berisi beberapa field
yang datanya tidak bisa dirubah ketika ada pelanggan telah memesan tiket
(terutama di bagian jumlah kursi pesawat yang tidak ter-update apakah
berkurang atau tidak). Untuk itu pada BAB ini kita akan membahas
tentang tabel transaksi, yang nantinya akan berfungsi untuk mengubah dari
tabel data_penerbangan jika ada pelanggan memesan tiket.
Dari kasus di atas dapat didapat jika kita memakai tabel
transaksi maka tabel ini akan melakukan insert di table tiket dan
mengurangi jumlah kursi_eko di tabel data_penerbangan jika
no_penerbangan pada tabel tiket sama, namun jika no_penerbangan tidak
sama, maka akan melakukan rollback. Otomatis karena di
data_penerbangan ada 2 kelas yakni Ekonomi dan Bisnis maka kita
harus membuatkan 2 tabel transaksi yang masing-masing untuk kelas
ini .
87
1. Membuat Tabel Transaksi Ekonomi.
Membuat transact untuk kejadian ‘pengurangan’ dengan nama
“insert_kursiEko” yang dikombinasikan dengan procedure sesuai studi
kasus di atas.
Menampilkan kondisi tabel tiket dan tabel data_penerbangan agar
nantinya kita dapat melihat perubahan di tabel ini .
Lakukan proses call insert_kursiEko dan lihat perubahan stok pada
tabel data_penerbangan apakah stok dari kursi_eko akan berkurang.
Gambar 9.8 Procedure Transaction insert_kursiEko
Gambar 9.9 Menampilkan Data Tabel Tiket
Gambar 9.10 Menampilkan Data Tabel data_penerbangan
88
Bisa dilihat perbedaan sesudah kita memanggil insert_kursiEko maka
akan berubah pula di kedua tabel di atas.
2. Membuat Tabel Transaksi Bisnis.
Membuat transact untuk kejadian ‘pengurangan’ dengan nama
“insert_kursiBis” yang dikombinasikan dengan procedure sesuai studi
kasus di atas.
Gambar 9.11 Proses Call insert_kursiEko
Gambar 9.12 Menampilkan Data Tabel Tiket
Gambar 9.13 Menampilkan Data Tabel data_penerbangan
89
Menampilkan kondisi tabel tiket dan tabel data_penerbangan agar
nantinya kita dapat melihat perubahan ditabel ini .
Lakukan proses call insert_kursiBis dan lihat perubahan stok pada
tabel data_penerbangan apakah stok dari kursi_bis akan berkurang.
Gambar 9.14 Membuat Procedure Transaction insert_kursiBis
Gambar 9.15 Menampilkan Data Tabel Tiket
Gambar 9.16 Menampilkan Data Tabel data_penerbangan
Gambar 9.17 Proses Call insert_kursiBis
90
Bisa dilihat perbedaan sesudah kita memanggil inser_kursiBis maka
akan berubah pula di kedua tabel di atas.
9.3 Soal Latihan
inberdasar database dbcaffe buatlah transaksi dengan ketentuan
sebagai berikut.
1. Buat transact untuk kejadian ‘tambah’ dengan nama
“insert_tambah” yang dikombinasikan dengan procedure.
2. Lakukan proses call insert_tambah dan lihat perubahan stok table
tb_buku apakah stok bertambah.
Gambar 9.18 Menampilkan Data Tabel Tiket
Gambar 9.19 Menampilkan Data Tabel data_penerbangan