Anda di halaman 1dari 52

2016

RAHIMI FITRI, S.KOM., M.KOM


POLIBAN

PRAKTIKUM BASISDATA 2
LANJUT
BAB VII
Membuat Database dan Keamanannya

 MySQL adalah sebuah sistem manajemen database relasi (relationaldatabase management


system) yang bersifat open source. (Arbie, 2004 : 5) MySQL merupakan buah pikiran dari
Michael “Monty” Widenius, David Axmark dan Allan Larson yang di mulai tahun 1995. mereka
bertiga kemudian mendirikan perusahaan bernama MySQL AB di Swedia.
 MySQL versi 1.0 di rilis pada Mei 1996 dan penggunaannya hanya terbatas di kalangan
perusahaan saja. Barulah pada bulan Oktober 1996, MySQL versi 3.11.0 di rilis ke masyarakat
luas. MySQL menggunakan bahasa standar SQL (Structure Query Language) sebagai bahasa
interaktif dalam mengelola data. MySQL memiliki kinerja, kecepatan proses dan ketangguhan
yang tidak kalah dibanding database-database besar lainnya yang komersil seperti ORACLE,
Sybase, Unify dan sebagainya. MySQL dapat berjalan di atas banyak sistem operasi seperti
Linux, Windows, Solaris, FreeBSD, Mac OS X, dan lain sebagainya.

Tipe-tipe Tabel MySQL


Salahsatu kelebihan dari MySQL adalah Anda dapat mendefinisikan tipe untuk tiap tabel.
MySQL mendukung beberapa tipe tabel, tergantung konfigurasi saat proses instalasi MySQL.
MySQL memiliki 3 (tiga) tipe data utama, yaitu MyISAM, InnoDB dan HEAP. Jika kita tidak
menyebutkan tipe tabel saat membuat tabel, maka tipe tabel otomatis akan dibuat sesuai konfigurasi
default server MySQL. Hal ini ditentukan oleh variabel default-table-type di file konfigurasi MySQL.
1. MyISAM
Tipe tabel MyISAM merupakan tipe tabel yang sederhana, stabil dan mudah digunakan. Jika
kita akan menyimpan data sederhana yang tidak terlalu rumit, maka gunakanlah tipe tabel ini.
Kelebihan utama MyISAM adalah kecepatan dan kestabilannya. Jika kita memilih tipe tabel
MyISAM, maka MySQL secara otomatis akan menentukan salah satu dari tiga jenis tabel
MyISAM, yaitu :
a. MyISAM static. Jenis ini digunakan ketika semua kolom dalam tabel didefinisikan dengan
ukuran yang pasti (fixed). Dengan kata lain, tidak ada kolom yang memiliki tipe seperti
VARCHAR, TEXT dan BLOB. Karena sifatnya yang fixed, maka jenis ini akan lebih cepat,
aman dan stabil.
b. MyISAM dymanic. Jenis ini digunakan ketika terdapat kolom dengan tipe yang dinamis,
seperti tipe kolom VARCHAR. Keuntungan utama dari jenis ini adalah ukuran yang dinamis.
Jadi sifatnya lebih efektif karena ukuran data (file) menyesuaikan isi dari masing-masing
kolom (field).
c. MyISAM Compressed. Kedua jenis MyISAM, static dan dynamic dapat dikompresi menjadi
satu jenis yaitu MyISAM Compressed dengan perintah myisamchk. Tentunya hasilnya lebih
kecil dari segi ukuran. Tabel yang terkompresi tidak dapat dikenakan operasi seperti INSERT,
UPDATE dan DELETE.
2. InnoDB
Tipe tabel InnoDB merupakan tipe tabel MySQL yang mendukung proses transaksi. Tipe ini
memiliki beberapa keunggulan, antara lain:
a. Mendukung transaksi antar tabel.
b. Mendukung row-level-locking.
c. Mendukung Foreign-Key Constraints.
d. Crash recovery.
3. HEAP
Tabel dengan tipe HEAP tidak menyimpan datanya di hardisk, tetapi menyimpan di RAM
(memori). Tipe tabel ini biasanya digunakan sebagai tabel sementara (temporary). Tabel secara
otomatis akan dihapus (hilang) dari MySQL saat koneksi ke server diputus atau server MySQL
dimatikan.

2
SQL merupakan singkatan dari Structured Query Language. SQL atau juga sering disebut
sebagai query merupakan suatu bahasa (language) yang digunakan untuk mengakses database.
SQL dikenalkan pertama kali dalam IBM pada tahun 1970 dan sebuah standar ISO dan ANSII
ditetapkan untuk SQL.Standar ini tidak tergantung pada mesin yang digunakan (IBM, Microsoft
atau Oracle).Hampir semua software database mengenal atau mengerti SQL. Jadi, perintah SQL
pada semua software database hampir sama.Terdapat 3 (tiga) jenis perintah SQL, yaitu :
1. DDL atau Data Definition Language
DDL merupakan perintah SQL yang berhubungan dengan pendefinisian suatu struktur
database, dalam hal ini database dan table. Beberapa perintah dasar yang termasuk DDL ini
antara lain :
�CREATE
�ALTER
�RENAME
�DROP
2. DML atau Data Manipulation Language
DML merupakan perintah SQL yang berhubungan dengan manipulasi atau pengolahan data
atau record dalam table. Perintah SQL yang termasuk dalam DML antara lain :
�SELECT
�INSERT
�UPDATE
�DELETE
3. DCL atau Data Control Language
DCL merupakan perintah SQL yang berhubungan dengan manipulasi user dan hak akses
(priviledges). Perintah SQL yang termasuk dalam DCL antara lain :
�GRANT
�REVOKE
ERD merupakan suatu model untuk menjelaskan hubungan antar data dalam basis data
berdasarkan objek-objek dasar data yang mempunyai hubungan antar relasi. ERD untuk
memodelkan struktur data dan hubungan antar data, untuk menggambarkannya digunakan
beberapa notasi dan simbol.

Keamanan di MySQL
Masalah keamanan (security) di MySQL merupakan hal yang tidak boleh dianggap sepele
apalagi dikesampingkan.MySQL merupakan software database yang bersifat client-server, yang
memungkinkan beberapa user dapat mengakses server MySQL dari mana pun.Untuk itu, server
MySQL harus benar-benar aman dari akses (serangan) orang-orang yang tidak berhak.
Berikut ini beberapa hal yang harus diperhatikan dalam mengamankan server MySQL:
a. Jangan pernah memberi akses ke semua user (kecuali USER root) untuk dapat mengakses database
mysql. Jika seseorang dapat mengakses database ini, maka dia dapat melihat informasi user
(termasuk user, password dan host) MySQL dan (mungkin) dapat menambah atau mengubah
informasi tersebut.
b. Pelajari mengenai hak akses di MySQL. Perintah GRANT dan REVOKE digunakan untuk
mengatur hak akses di MySQL. Sebisa mungkin jangan memberikan hak akses ke MySQL pada
semua host (%). Dan cobalah untuk mengecek dengan:
1. Cobalah login dengan perintah mysql –u root. Jika Anda berhasil login ke server, maka hal ini
bisa menjadi masalah besar, karena password root masih kosong sehingga semua user dapat
mengakses server MySQL.
2. Gunakan perintah SHOW GRANTS untuk melihat semua hak akses user.
c. Jangan pernah menyimpan password dalam bentuk teks biasa di MySQL! Gunakan fungsi enkripsi
searah seperti fungsi PASSWORD() dan MD5() untuk mengenkripsi isi password. Kita tidak dapat
menjamin 100% bahwa server kita aman dari penyusup (intruder).
d. Hati-hati dalam memilih password. Pilihlah password yang mudah diingat tapi sulit ditebak oleh
orang lain. Dan juga jangan gunakan kata-kata yang ada di kamus, gunakanlah kombinasi angka
dan huruf.

3
e. Pasang firewall di server untuk mencegah penyusup. Hal ini dapat mencegah setidaknya 50% dari
program penyusup yang ada.
f. Jangan percaya sepenuhnya terhadap data yang dimasukkan oleh user. Akan lebih baik jika kita
menganggap bahwa semua user adalah ‘jahat’.Lakukan validasi data sebelum dimasukkan ke
database.Hal ini biasanya dapat dilakukan di dalam bahasa pemrograman yang digunakan.
g. Hati-hati dalam mengirim atau mentransfer data lewat internet, karena mungkin ada orang lain
yang dapat ‘membajak’ data tersebut. Dalam hal pengamanan server MySQL, setidaknya ada
beberapa faktor yang mempengaruhi.Kita belum cukup jika mengamankan satu sisi (faktor) saja,
tetapi harus menyeluruh. Berikut ini beberapa faktor tersebut:
1. Server atau komputer tempat MySQL berada. Server tempat MySQL diinstall tentunya menjadi
gerbang utama bagi penyusup (intruder).Untuk ini kita harus benar-benar memperhatikan
faktor keamanan server.Kita dapat memasang firewall untuk membatasi akses penyusup ke
server. Gunakan prinsip deny-all, allow-some, dimana kita menutup semua lubang dan hanya
membuka yang diperlukan.
2. Server MySQL. Konfigurasi dan settingan dalam server MySQL juga sangat mempengaruhi
keamanan data MySQL.Bagaimana jadinya jika user yang tidak berhak dapat mengakses sistem
dan konfigurasi MySQL?Tentu sangat berbahaya.
3. Aplikasi (Pemrograman) yang digunakan. Aplikasi disini maksudnya adalah pemrograman
yang menggunakan atau berhubungan langsung dengan MySQL. Sebagian besar penyusup
akan memilih cara menyusup melalui aplikasi jika kedua hal diatas tidak dapat dilakukan. Dan
banyak database yang kebobolan karena kelemahan dari sisi aplikasi.Secara sederhana kita
dapat mengakses data ke MySQL melalui konsep yang sering disebut sebagai SQLInjection.
4. User atau pengguna. User atau pengguna server MySQL juga mempengaruhi keamanan
datanya.Misalnya pemilihan password yang mudah ditebak (seperti tanggal lahir), kecerobohan
user yang lupa logout setelah menggunakan MySQL atau user yang menuliskan passwordnya di
buku catatan.

MEMAHAMI HAK AKSES (PRIVILEGES) DI MYSQL


MySQL pada dasarnya merupakan sistem database yang aman. Di MySQL kita
dapat mengatur hak akses tiap user terhadap data di database. MySQL memungkinkan kita mengatur
hak akses user sampai pada tingkat kolom.Artinya kita dapat mengatur kolom tertentu dapat diakses
oleh user siapa saja.Tentu, kita juga dapat mengatur hak akses user terhadap tabel, dan database.
Semua pengaturan hak akses (privileges) tersimpan di database mysql yang secara default sudah ada
di sistem MySQL. Di dalam database mysqlantara lain terdapat tabel-tabel sebagai berikut:
 user. Tabel ini digunakan untuk menyimpan informasi user MySQL yang mencakup informasi
user, password dan host user, serta informasi hak akses user.
 db. Tabel ini digunakan untuk menyimpan informasi mengenai hak akses user terhadap database.
 host. Tabel ini digunakan untuk menyimpan daftar komputer (bisa berupa alamat IP, nama
komputer, atau %) yang berhak mengakses suatu database.
 tables_priv. Tabel ini digunakan untuk menyimpan informasi mengenai hak akses user terhadap
tabel. Dengan kata lain menyimpan tabel ini dapat diakses oleh siapa dengan hak akses apa saja.
 columns_priv. Tabel ini digunakan untuk menyimpan informasi mengenai hak akses user
terhadap kolom.
 procs_priv. Tabel ini digunakan untuk menyimpan informasi mengenai hak akses user terhadap
procedure.
 proc. Tabel ini digunakan untuk menyimpan informasi mengenai daftar procedure dalam MySQL.
 func. Tabel ini digunakan untuk menyimpan informasi mengenai function yang didefinisikan di
MySQL.

GRANT dan REVOKE di MySQL


Untuk mengatur hak akses di MySQL, pada dasarnya kita menggunakan bentuk perintah
GRANT dan REVOKE. Berikut ini bentuk umum perintah GRANT dan REVOKE secara sederhana :

4
GRANT priv_type
ON {tbl_name | * | *.* | db_name.*}
TO user_name [IDENTIFIED BY 'password']
[WITH GRANT OPTION]

REVOKE priv_type
ON {tbl_name | * | *.* | db_name.*}
FROM user_name

Berikut ini pilihan untuk priv_type dalam bentuk umum perintah GRANT dan REVOKE di atas:
ALL PRIVILEGES FILE RELOAD ALTER INDEX SELECT CREATE INSERT SHUTDOWN
DELETE PROCESS UPDATE DROP REFERENCES USAGE

Perintah GRANT dan REVOKE dapat digunakan untuk membuat user baru maupun mengatur hak
akses user yang sudah ada dengan hak akses (privileges ) tertentu. Tingkatan hak akses user dapat
terbagi menjadi tingkatan global (tersimpan di tabel mysql.user), database (tersimpan di tabel
mysql.host dan mysql.db), tabel (tersimpan di tabel mysql.tables_priv) dan kolom (tersimpan di tabel
mysql.columns_priv). Setiap perubahan hak akses di MySQL, termasuk menambahkan user baru,
tidak akan berlaku sebelum diakhiri dengan perintah FLUSH PRIVILEGES.

MENAMBAHKAN DAN MENGATUR HAK AKSES USER


Untuk menambahkan dan mengatur hak akses (privileges) user di MySQL,kita dapat menggunakan 2
cara yaitu :
1. langsung melakukan INSERT atau UPDATE ke tabel mysql.user, dan tabel-tabel lain sesuai
dengan hak aksesnya. Cara ini tidak disarankan karena mengandung resiko terjadi kesalahan
2. dengan perintah GRANT dan REVOKE. Perintah ini mudah dipahami dan diterapkan karena
lebih sederhana. MySQL secara otomatis akan menyimpan informasi user ke tabel sesuai dengan
hak aksesnya. Berikut ini beberapa contoh menambahkan user baru di MySQL:
 Menambahkan user baru dengan nama user ‘monty’ yang dapat mengakses semua database
dari komputer ‘localhost’ dengan password ‘qwerty’. User ini juga berhak menjalankan
perintah GRANT untuk user lain.
GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY 'qwerty'
WITH GRANT OPTION;
 Menambahkan user baru dengan nama user ‘adinda’, tidak dapat mengakses database (*.*),
hanya dapat mengakses dari komputer dengan IP ‘192.168.1.5’ dan password ‘qwerty’.
GRANT USAGE ON *.* TO adinda@192.168.1.5 IDENTIFIED BY 'qwerty';
 Menambahkan user baru dengan nama user ‘admin, hanya dapat mengakses database
‘mysql’, hanya dapat mengakses dari komputer ‘localhost’ dan dengan password ‘qwerty’.
GRANT ALL PRIVILEGES ON mysql.* TO admin@localhost IDENTIFIED BY
'qwerty';

Berikut ini beberapa contoh mengatur hak akses user yang sudah ada di MySQL:
 Mengubah hak akses user ‘adinda’ agar dapat mengakses database ‘Transaksi_Barang’.
GRANT ALL PRIVILEGES ON transaksi_barang.* TO adinda@192.168.1.5;
FLUSH PRIVILEGES;
 Mengubah hak akses user ‘admin’ agar dapat CREATE di database ‘transaksi_barang’.
GRANT CREATE ON penjualan.* TO admin@localhost;
FLUSH PRIVILEGES;

MENGHAPUS HAK AKSES USER


Untuk menghapus hak akses user, dapat dilakukan dengan perintah REVOKE. Berikut ini contohnya:
Menghapus hak akses user ‘admin’ terhadap database ‘transaksi_barang’.
REVOKE CREATE ON penjualan.* FROM admin@localhost;
FLUSH PRIVILEGES;

5
MENGGANTI PASSWORD USER
Untuk mengganti password suatu user di MySQL, kita tinggal menjalankan perintah UPDATE
terhadap field Password di tabel mysql.user. Password tersebut diekripsi dengan fungsi
PASSWORD(). Berikut ini perintah SQL yang dapat digunakan untuk mengganti password user:
UPDATE user SET Password=PASSWORD(‘123’) WHERE User=’admin’ AND
Host=’localhost’;
SET PASSWORD FOR admin@localhost = PASSWORD (‘123’);
FLUSH PRIVILEGES

6
Pemodelan Konseptual

Stok
Kode_Barang Jumlah

M 1
Pembeli Membeli Barang

1
Kode_Barang Nama_Barang
Id_Pembeli Nama_Pembeli

Dicatat

Kode_Barang Transaksi Waktu

Kejadian Kuantitas

Konfigurasi Jaringan
Nama User : Manajer
Password : 12345
Hak akses : All with grant option
Akses via : Jaringan (%)
IP Address :
SSID :

Nama User : Karyawan1 Nama User : Karyawan2


Password : 111 Password : 222
Hak akses : DDL (Create, Alter, Drop) Hak akses : DML (Select, Insert, Update, Delete, Execute)
Akses via : Jaringan Akses via : Jaringan

7
LANGKAH-LANGKAH MEMBUAT JARINGAN

1. Membuat jaringan server


 Langkah 1 : Klik network and sharing center pada taksbar

 Langkah 2 : pilih set up a new connection or network

8
 Langkah 3 : Kemudian akan keluar kotak seperti dibawah ini dan pilih set up a wireless ad
hoc (computer to computer) network.

 Langkah 4 : Pilih next selanjutnya akan keluar kotak di bawah ini dan isi nama network anda

9
 Langkah 5 : Jika berhasil maka akan keluar kotak seperti gambar dibawah ini.

 Langkah 6 : Connectkan jaringan yang telah kita buat tadi lalu klik kanan properties untuk
masuk dan mengatur IP jaringan kita

10
 Langkah 7 : Lalu akan muncul tampilan seperti dibawah kemudian klik tulisan change
adapter setting

 Langkah 8 : Kemudian pilih change adapter setting, lalu klik kanan di Wireless Network
Connection pilih Properties.

11
 Langkah 9 : Setelah itu, akan keluar kotak seperti di bawah ini

12
 Langkah 10 Selanjutnya, kita klik Internet Protocol Version 4 (TCP/IPv4) dan pilih menu
Properties maka akan keluar kotak seperti di bawah ini :
Pada [IP address], masukkan 192.168.0.200, pada [Subnet mask], masukkan 255.255.255.0,
dan untuk [Default Gateway] kosongkan saja. Setelah selesai klik [OK]. Settingan pada
komputer A sudah selesai.

 Langkah 11 Selanjutnya, setting komputer client seperti di bawah ini :


Pada [IP address], masukkan lebih besar dari IP Server (Komputer A) 192.168.0.200 misal
[IP Address]=192.168.0.205, pada [Subnet mask], masukkan 255.255.255.0, dan untuk
[Default Gateway] kosongkan saja. Setelah selesai klik [OK]. Settingan pada komputer B
sudah selesai.

 Langkah 12 Selanjutnya, Uji Coba jaringan seperti di bawah ini :

13
Tahapan Uji Coba

1. Langka pertama, masuk ke sever root, buat user Manajer kemudian exit

pastikan bahwa user yang telah dibuat, dengan cara di bawah ini :

2. Masuk dengan user Manajer dan buat database penjualan

3. Kemudian, buat user client yaitu Karyawan1 dan Karyawan2

14
4. Di laptop client 1 masuk dengan user Karyawan1, pastikan databse yang telah dibuat telah
muncul, begitu juga di laptop client 2 (user Karyawan2)

15
BAB VIII
DDL (Data Definition Language)

DDL merupakan kelompok perintah yang berfungsi untuk mendefinisikan atribut-atribut basis data,
tabel, atribut(kolom), batasan-batasan terhadap suatu atribut, serta hubungan antar tabel. Yang
termasuk dalam kelompok DDL ini adalah CREATE, ALTER, dan DROP.
Beberapa perintah dasar yang termasuk DDL ini antara lain :
a. CREATEPerintah ini digunakan untuk membuat, termasuk diantaranya membuat database baru,
tabel baru, view baru, dan kolom.
b. ALTER
Perintah ini digunakan untuk mengubah struktur tabel yang telah dibuat. Pekerjaannya mencakup
mengganti nama tabel, menambah kolom, mengubah kolom, menghapus kolom, maupun
memberikan atribut pada kolom.
c. DROP
Perintah ini digunakan untuk menghapus database dan tabel.

Berikut adalah contoh perintah DDL yang digunakan pada MySQL.

 Pembuatan (CREATE)
o create database
o create function
o create index
o create procedure
o create table
o create trigger
o create view

 Perubahan (ALTER & RENAME)


o alter database
o alter function
o alter procedure
o alter table
o alter view
o rename table

 Penghapusan (DROP)
o drop database
o drop function
o drop index
o drop procedure
o drop table
o drop trigger
o drop view

16
Tahapan Uji Coba

Dengan konseptual (studi kasus) dan konfigurasi jaringan yang telah dibuat sebelumnya di BAB 1,
langsung saja ke tahap proses create, alter, drop. untuk proses create, alter, drop kita gunakan user
Karyawan1, karena pada user tersebut telah diberi hak akses DDL yang telah dibahas di BAB 1.
1. Proses Create (buat)
Buat 3 table dengan menggunakan database penjualan

Untuk melihat struktur table harus dilakukan di user Karyawan2 karena di user karyawan2
terdapat hak akses select. Jika dilakukan di user Karyawan1 maka yang terjadi adalah akses
ditolak. Berikut cara melihat struktur table:

2. Proses Alter (tambah)


Pada table Pembeli tambahkan 1 field yaitu total dengan tipe data float. Kemudian lihat
perubahan struktur table, lakukan di user Karyawan2

17
3. Proses Drop (hapus)
Silakan hapus table Pembeli, kemudian desc Pembeli di user Karyawan2, jika yang
ditampilkan tidak ada maka proses drop berhasil.

18
BAB IX
DML (Data Manipulation Language)

Data Manipulation Language (DML) adalah sub bahasa SQL yang berfungsi memanipulasi data
yang ada di dalam basis data atau database. Manipulasi Data (DML) digunakan oleh
programkomputer atau pengguna database untuk menyisipkan, menghapus dan mengupdate data
dalam database. Read-only query yaitu SELECT, data ini dapat dianggap sebagai salah satu bagian
dari DML.
Perintah yang digunakan, di antaranya:
1. INSERT
Perintah ini digunakan untuk menyisipkan atau memasukkan data baru kedalam tabel.
Penggunaannya setelah database dan tabel selesai dibuat.
2. SELECT
Perintah ini digunakan untuk mengambil data atau menampilkan data dari satu tabel atau
beberapa tabel dalam relasi.
Data yang diambil dapat kita tampilkan dalam layar prompt MySQL secara langsung maupun
ditampilkan pada tampilan aplikasi.
Secara umum bentuk SELECT adalah:
SELECT Kolom1,Kolom2, ... FROM Nama_tabel WHERE predikat
Bila kunci kata “WHERE” tidak diberikan, maka yang diseleksi adalah seluruh isi dalam tabel.

SELECT * adalah karakterkhusus (wild character) yang menyatakan bahwa kolom yang dipilih
adalah seluruh yang ada pada tabel tersebut.

Bagian-bagian yang ada pada SELECT :


 WHERE
Dengan menggunakan WHERE, maka seleksi dilakukan tidak pada seluruh isinya, melainkan
hanya pada isi yang memenuhi syarat.
Beberapa operator yang berlaku, yaitu:
= Sama dengan
<> Tidak sama dengan
< Lebih Kecil
<= Lebih kecil atau sama
> Lebih besar
>= Lebih besar atau sama
Contoh:
Tampilkan data kuliah yang jumlah sks nya dibawah 3
>SELECT * FROM Mata_kuliah WHERE sks < 3;

19
 AND, OR, dan NOT
Untuk menggabungkan lebih dari satu kondisi AND dan OR.
Sedangkan untuk negasi, diperlukan NOT.
Contoh:
Tampilkan mahasiswa laki-laki yang berasal dari ‘Malang’
>SELECT Nama, Alamat, Kota FROM Mahasiswa_XXX WHERE kota=’Malang’ AND jk=’L’;
Prioritas AND lebih kuat dari OR
 LIKE & NOT LIKE
Umumnya LIKE digunakan untuk permintaan yang mencari suatu teks berdasarkan prefix (kata
depan), surfix (kata akhir) atau kata tengah.
SELECT Kolom1,Kolom2, ... FROM Nama_tabel WHERE kolom LIKE Nilai
Contoh:
Cari mahasiswa yang bertempat tinggal di kota ‘Gresik’
>SELECT nama, alamat, kota FROM Mahasiswa_XXX WHERE kota LIKE ‘Gresik’ ;
Cari mahasiswa yang tempat tinggalnya dimulai dengan awalan ‘B’
>SELECT nama, alamat, kota FROM Mahasiswa_XXX WHERE kota LIKE ‘B%’

Perhatikan bahwa tanda % menyerupai “wild character” yang bisa di variasi dalam
menggunakannya. Tanda % adalah terdiri dari 0,1 atau beberapa karakter, maka tanda_ (under
score/garis bawah) merepresentasikan persis satu karakter.

NOT LIKE digunakan sebagai negasi misalnya dengan pertanyaan.


Contoh:
Cari mahasiswa yang alamat rumahnya tidak dimulai dengan “Jl”
>SELECT nama, alamat, kota FROM Mahasiswa_XXX WHERE alamat NOT LIKE ‘%JL%’;

 IN & NOT IN
IN digunakan untuk mencari nilai dalam satu kelompok nilai (daftar/list).Nilai dalam daftar terdiri
atau satu atau lebih.
SELECT kolom1, kolom2, ... FROM Nama_tabel WHERE kolom IN

Contoh:
Cari peserta yang bertempat tinggal di Kota “ Malang” dan “Jakarta”
>SELECT nama, alamat, kota FROM Mahasiswa_XXX WHERE kota IN (‘Malang’,’Jakarta’);

Bila dinegatifkan pertanyaan tersebut, maka hasilnya adalah:


>SELECT nama, alamat, kota FROM peserta WHERE kota NOT IN (‘Malang’,’Jakarta’);

 IS NULL & IS NOT NULL


NULL adalah nilai yang belum diisi. NULL tidak identik dengan spasi(blank).
 Tampilan Tersusun (Sortir)
Tampilan dari hasil SELECT dapat disusun (sort) menurut satu atau beberapa kolom.

20
SELECT kolom1, kolom2, ... FROM Nama_tabel WHERE predikat ORDER BY kolom

Bila kunci kata where tidak diberikan, maka seluruh record dalam tabel akan ditampilkan.
Contoh:
Tampilkan seluruh Mahasiswa menurut abjad.
>SELECT * FROM Mahasiswa_XXX ORDER BY inisial
Susunan dapat diatur dari A ke Z (ASC ending) atau dari Z ke A (DESC ending). Defaultnya adalah A
S C.
Untuk menyusun secara terbalik adalah:
>SELECT * FROM Mahasiswa_XXX ORDER BY inisial DESC;
 DISTINCT
DISTINCT menghilangkan nilai ganda, sehingga membuatnya menjadi tunggal. Hal ini
dilakukan dengan mengeliminasi nilai yang sama.
Untuk menghilangkan duplikasi pada tampilan, maka digunakan kunci kata DISTINCT.
>SELECT DISTINCT kota FROM Mahasiswa_XXX;

3. UPDATE
Perintah ini digunakan untuk memperbaharui data lama menjadi data terkini. Jika anda
memiliki data yang salah atau kurang up to date dengan kondisi sekarang, maka dapat diubah
kondisi datanya menggunakan perintah UPDATE.
Syntax:
UPDATE Nama_tabel SET Field1=Data1,Field2=Data2,Field3=Data3 WHERE
Kondisi1,Kondisi2

Contoh:
>mahasiswa set nim =’08052926’=08052927
Pemanfaatan operasi aritmatika untuk merubah data. Misalnya sebuah perusahaan akan menaikkan
gaji pegawainya sampai 20%.
UPDATE Data_gaji SET gaji=gaji*1.2

4. DELETE
Perintah ini digunakan untuk menghapus data dari tabel. Biasanya data yang dihapus merupakan
data yang sudah tidak diperlukan lagi. Pada saat menghapus data, perintah yang telah dijalankan
tidak dapat digagalkan, sehingga data yang telah hilang tidak dapat dikembalikan lagi.
Syntax:
DELETE FROM Nama_tabel WHERE kondisi1
Dalam menghapus dan update bisa dilakukan untuk menghapus banyak baris atau menghapus
semua isi dari tabel tergantung dari kondisi yang diberikan.
Contoh:
Hapus isi semua record pada Data mahasiswa yang telah dibuat dimana Mahasiswa dengan
alamat yang tidak diisi <nilai=default> akan dihapus.

21
Perintah SQL nya adalah:
>DELETE FROM Mahasiswa_XXX WHERE Alamat=’Malang’

Tahab Uji Coba


Pada proses select, insert, update, delete di lakukan dengan menggunakan user Karyawan2, karena
pada user tersebut sudah diberi hak akses DDL yang telah dibahas di BAB 1. Pada proses ini yang
digunakan hanya table Barang.
1. Proses insert
Input 5 buah data ke dalam table Barang dan pastikan data sudah masuk dengan cara dibawah
ini :

2. Proses update (ubah)


Ubah stok Laptop Asus dari 5 menjadi 8 dan pastikan data sudah terobah dengan cara berikut

3. Proses delete (hapus)


Hapus data yg kode barang nya 1005 dan pastikan data sudah terhapus.

22
4. Proses select (tampilkan)
Proses select sangat beragam. Sebelumnya select sudah dilakukan di proses insert, update,
dan delete tetapi hanya menampilkan data yang umum. Select kali ini akan menampilkan data
yg bervariasi.

a. Jika kita ingin menampilkan data dengan mengurut nama barang sesuai abjad maka
lakukan lah proses dibawah ini :

b. Jika kita ingin mengurutkan stok dari yang terbanyak hingga yang paling sedikit, maka
menggunakan syntax desc(kebalikan) seperti di bawah ini :

Jika tidak menggunakan syntax desc maka yang terjadi mengurutkan dari yang paling
sedikit hingga yang terbanyak

23
BAB X
Stored Procedure

Stored Procedure adalah 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. Mysql sendiri
mendukung penggunaan Stored Procedure sejak MySQL versi 5.x ke atas.
Keuntungan penggunaan stored procedure :
 Meningkatkan performance aplikasi.
Sebuah Stored Procedure di simpan dan di compile di katalog database yang mana dapat di
eksekusi lebih cepat di bandingkan SQL yang tidak di compile dari kode aplikasi.
 Mengurangi traffic antara aplikasi dan database server.
Aplikasi hanya mengirim nama stored procedure untuk mengeksekusi SQL.
 Dapat di gunakan kembali dan transparent ke aplikasi yang ingin menggunakan nya.
 Aman.
Penggunaan Stored Procedure dapat di akses hak nya oleh aplikasi oleh Database Administrator

Kerugian penggunaan stored procedure


 Dapat mengakibatkan Database server membutuhkan memory dan prosessor lebih tinggi.
 Stored procedure hanya berisi SQL deklaratif, sehingga sangat sulit untuk menulis sebuah
procedure dengan kompleksitas logika, seperti bahasa pemrograman yang di gunakan untuk
memprogram aplikasi.
 Stored procedure tidak dapat di debug di hampir RDBMS, termasuk MySQL.
 Membutuhkan keahlian khusus untuk menulis dan me maintain stored procedure yang tidak
setiap developer memiliki, sehingga dapat membuat ribet

Membuat stored procedure:


Delimeter //
create procedure nama_mhs()
begin
select * from mahasiswa;
end //
delimeter ;
Kita memulai nya dengan delimeter //dan di akhiri dengan // delimeter ;
Body sql
(Dimulai dengan begin diakhiri dengan end)
Memanggil stored procedure:
call nama_stored_procedure( )

Variabel di gunakan untuk menyimpan prosedure ke penyimpanan hasil dengan


segera. Anda dapat mendeklarasikan sebuah variabel dengan syntax berikut :
DECLARE nama variabel tipe data (ukuran) DEFAULT nilai default;
Contoh :
DECLARE total_sales INT DEFAULT 0

24
Memberi Nilai ke variabel
Terdapat beberapa cara memberi nilai ke variabel, yaitu dengan cara :
- SET
Contoh :
DECLARE total_count INT DEFAULT 0
SET total_count =0
- SELECT … INTO
DECLARE total_product INT DEFAULT 0
SELECT COUNT(*) INTO total_products FROM products

Ruang Lingkup Variabel


Sebuah variabel hanya berlaku di dalam ruang lingkup nya masing-masing, yaitu di
antara BEGIN dan END. Sebuah variabel yang di awali dengan tanda @, di sebut
dengan variabel session, yang tetap ada hingga session berakhir.

Parameter dalam Stored Procedure


Paramater, terdiri dari 3 bentuk, yaitu :
- IN
- OUT
- INOUT
IN : Mode Default. Dapat di gunakan di dalam sebuah stored procedure, namun stored procedure
tidak dapat merubah nilai nya.
OUT : Parameter ini dapat di rubah oleh sebuah stored procedure yang di lewati nya.
INOUT : Dapat melewati stored procedure dan mendapatkan kembali nilai nya yang berbeda dari
program yang memanggil.
Syntax untuk mendefinisikan sebuah parameter:
MODE nama_parameter tipe_parameter (ukuran parameter)

25
Tahab Uji Coba

Untuk membuat stored procedure dapat menggunakan user Manajer karena pada user Manajer
diberikan seluruh hak akses. Untuk procedure logikanya seperti ini, jika kita ingin menambah data di
table Barang tetapi data tersebut sudah ada di table Barang maka yang terjadi adalah proses Update
pada stok, tetapi jika data yg ingin ditambah tidak ada di table Barang maka akan dilakukan proses
Insert. Jadi Syntax procedure nya akan seperti berikut :
1. Buat stored procedure dengan studi kasus seperti di atas

2. Tampilkan table Barang sebelum proses call, agar dapat mengetahui bagaimana perubahan
table setelah proses call dilakukan.

3. Proses call dapat dilakukan di user Karyawan2 karena telah diberi hak akses execute.
Lakukan proses call dengan data yang belum ada di table Barang seperti berikut :

Yang terjadi adalah proses insert

4. Lakukan lagi proses call dengan data yang sudah ada di table Barang seperti berikut :

26
Maka yang terjadi adalah proses update yang awalnya kode barang 1001 memiliki stok 5
berubah menjadi 3.

5. Jika ingin melihat status dari stored procedure dapat dilakukan seperti berikut :

27
BAB XI
Function

Function yaitu sebuah kumpulan statement yang akan mengembalikan sebuah nilai balik pada
pemanggilnya. Nilai yang dihasilkan Function harus ditampung kedalam sebuah variabel.
 Perbedaan function dan procedure, yaitu kalau function dia akan mengembalikan suatu nilai pada
pemanggilnya, sedangkan kalau procedure dia tidak akan mengembalikan nilai apapun pada fungsi
pemanggilnya.
 Fungsi (Function) adalah 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 menggunakannya.
 Manfaat Fungsi (Function)
1. Menghindari pengulangan
2. tujuannya untuk menghindari penulisan bagian kode program berulang-ulang.
3. Penataan program
4. program yang besar dan komplek dibagi-bagi menjadi aktivitas yang berbeda dan ditempatkan
dalam subrutine yang terpisah, sehingga setiap aktivitas bisa ditulis dan diperiksa secara
mandiri.
5. Kemandirian
6. mempunyai variabel “private” yaitu variabel yang tidak bisa diakses program pemanggil atau
subrutin lain.

Membuat function di mysql karena:

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 disini berarti user atau
pengguna tidak perlu mengetahui isi dari fungsi tersebut. Contohnya seperti kita menggunakan
fungsi string yang telah disediakan oleh MySQL, kita cukup mengetahui cara penggunaannya
saja tanpa harus mengetahui perintah SQL yang berada didalam fungsi string tersebut.
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 table aslinya secara langsung. Selain itu, user juga tidak akan
mengetahui perintah yang berada didalam function tersebut, karena kita telah
menyembunyikannya.

Untuk membuat function di MySQL menggunakan perintah CREATE FUNCTION. Berikut versi
lengkapnya.

 DELIMITER = adalah untuk memberi tahu kepada myql soal delimiter yang digunakan, secara
default menggunakan ; jadi bila ada tanda ; mysql akan mengartikan akhir dari statement, pada
contoh di atas delimeter yang digunakan $$ jadi akhir statementnya adalah $$
 CREATE FUNCTION = adalah header untuk membuat function
 RETURNS = adalah untuk menentukan tipe data yang di return-kan oleh function

28
 DETERMINISTIC/ NOT DETERMINISTIC = adalah untuk menentukan yang bisa
menggunakan function ini adalah user pembuatnya saja (determinisric) atau user siapa saja (not
determinisric).
 BEGIN END = adalah body dari function jadi semua SQL nya di tulis disini.

29
Tahap Uji Coba

Lakukan proses function di user Manajer dan saat proses select dapat dilakukan di user Karyawan2.
Untuk membuat function studi kasus yang digunakan adalah menampilkan jumlah catatan transaksi
barang yang tercatat di table Transaksi. Misalnya jika ingin mengetahui, sudah berapa banyak
transaksi yang kode barang nya 1001? Maka dengan function kita dapat menjawab pertanyaan
tersebut.

1. Buat function sesuai studi kasus di atas

2. Tampilkan table Transaksi yang telah di buat dan datanya telah di isi

Table ini sudah berisikan data karena sebelum proses function, di lakukan proses Trigger dan
Transact yang nanti akan di bahas di BAB 7 dan 8

3. Lakukan proses select, tampilkan jumlah catatan yang kode barangnya 1001

Lihat jumlah yang di tampilkan apakah sudah sesuai dengan table Transaksi, jika sudah sesuai
maka proses fuction telah berhasil

4. Tampilkan lagi jumlah catatan yang kode barangnya 1010

Mengapa yang tampil ‘tidak ada catatan’? karena kode barang 1010 tidak ada di table
Transaksi

30
5. Jika ingin melihat status dari function dapat dilakukan cara berikut:

31
BAB XII
View dan Index

A. View
View merupakan suatu bentuk representasi data yang dapat dibuat dengan melibatkan data
yang ada pada satu atau beberapa tabel. Dengan menggunakan view dimungkinkan untuk
membuat hanya bagian tertentu dalam suatu tabel yang akan muncul.
Sebuah view hanya berisi baris dan kolom yang cocok dengan table yang ada di database.
View tidak memiliki data sendiri, tetapi data-datanya berasal dari tabel-tabel atau view lain.
View dibuat atau dibangun dengan SELECT statement. select_statement: Suatu statemen
SELECT yang menyediakan definisi dari view. Statemen ini dapat men-select dari tabel dasar
atau view yang lain.
Statemen ini membutuhkan CREATE VIEW privilege untuk view, dan beberapa privilege
untuk setiap kolom terpilih oleh statemen SELECT. View termasuk dalam komponen database.
Secara default, suatu view baru dibuat ke dalam database yang diaktifkan.
Tujuan membuat view :
 Meningkatkan keamanan data
 Meningkatkan kemandirian data
 Penyederhanaan bagi end user (data yang sedikit, nama-nama kolom yang baru dan dapat
dibaca lebih baik.
Properti :
 View mencakup subset kolom dan/ atau baris
 View dapat berisikan data dari beberapa tabel dan/ atau tabel-tabel view lainnya
 View dapat berisi perolehan data, misal : nilai rata- rata
 Manipulasi data melalui view terbatas

Membuat view
Pernyataan SQL yang digunakan untuk membuat view adalah CREATE VIEW
mysql> create view view_name as
select column_name(s)
from table_name;

Melihat hasil view


Untuk melihat hasilnya dengan perintah :
mysql> select*from view_name;

Menghapus view
Suatu view dapat dihapus dengan menggunakan perintah DROP VIEW.
mysql> drop view view_name;

B. Index
Index merupakan sebuah tabel spesial yang dapat digunakan untuk mempercepat
pengambilan data. Isi dari tabel di index adalah pointer menuju data di tabel.
Implementasi table index mirip dengan indeks yang ada di bagian belakang sebuah buku.
Sebuah indeks mempercepat pengambilan data yang terkait dengan klausa SELECT, WHERE,
atau ORDER BY, tetapi memperlambat masukan data dengan klausa INSERT dan UPDATE.

32
Index ini sangat bermanfaat sekali untuk proses pencarian data. Jika suatu tabel tidak ada
index, maka proses pencarian data bisa membutuhkan waktu yang lama (untuk data dalam
jumlah besar).
Para pengguna tidak dapat melihat index, mereka hanya digunakan untuk mempercepat query
dan akan digunakan oleh Database Engine Search untuk mencari catatan sangat cepat.
Pengguna index, baik digunakan pada field (column) :
 Ketika sering menggunakan WHERE pada bagian query.
 Ketika sering menggunakan ORDER BY pada bagian query.
 Ketika memiliki banyak perbedaan nilai.
 Ketika sering menggunakan JOIN pada bagian query.

Membuat index
SQL menyediakan perintah yang dipakai untuk menciptakan index, yaitu CREATE UNIQUE
INDEX dan CREATE INDEX.
Perintah CREATE UNIQUE INDEX digunakan untuk menciptakan index unik, yaitu index yang
hanya bisa merujuk ke sebuah record. Sebagai konsekuensinya, tidak boleh ada lebih dari satu record
yang nilai kolomnya (kolom yang diindex) yang bernilai sama. Indeks unik bukan hanya digunakan
untuk performa yang lebih baik, tetapi juga untuk memastikan integritas data. Jadi, tidak boleh ada
data duplikasi yang masuk ke sebuah kolom dari tabel tersebut.
Bentuk perintah index unik :
mysql> create unique index nama_index
on nama_tabel (nama_kolom_yang_diindex);

Apabila index melibatkan gabungan lebih dari satu kolom, nama-nama kolom dituliskan dalam tanda
kurung dengan pemisah antarnama kolom berupa koma.

mysql> create unique index nama_index


on nama_tabel (nama_kolom_yang_diindex1,
nama_kolom_yang_diindex2);

Perintah CREATE INDEX berguna untuk membuat index tidak unik, yakni index yang
memungkinkan nilai kolom sejumlah record boleh sama.
Bentuk penggunaan perintah ini serupa dengan CREATE UNIQUE INDEX
Bentuk perintah index :
mysql> create index nama_index
on nama_tabel (nama_kolom_yang_diindex);

Menghapus Index
Untuk menghapus suatu index dalam tabel, Anda perlu menyebutkan nama index dan nama tabel
dalam perintah DROP INDEX
mysql> drop index nama_index
on nama_tabel;

33
Tahap Uji Coba

A. Proses View
Studi kasus nya adalah menampilkan sebuah table yang telah di kombinasikan dari 2 table yaitu
table Barang dan Table Transaksi
1. Buat view dari table Barang pilih nama_barang, dari table Transaksi pilih kejadian, kuantitas,
waktu, maka view nya akan seperti berikut:

2. Kemudian tampilkan view yang telah di buat

3. Jika ingin memastikan bahwa data view diatas benar sesuai table Barang dan table Transaksi,
dapat dilakukan menampikan table masing- masing

B. Index
Untuk index, misalkan di table Barang memiliki data yang sangat banyak, sehingga jika kita
ingin mendapatkan informasi stok suatu barang akan membutuhkan waktu yang lama (bufering).
Dengan menggunakan index, waktu yang dibutuhkan menjadi sangat singkat.

34
1. Index ini hanya berfokus pada table Barang, buat index berikut:

2. Tampilkan stok di table Barang yang kode barang nya 1005

35
BAB XIII
Trigger

Trigger digunakan untuk memanggil satu atau beberapa perintah SQL secara otomatis sebelum
atau sesudah terjadi proses INSERT, UPDATE atau DELETE dari suatu tabel. Sebagai contoh
misalnya kita ingin menyimpan id_barang secara otomatis ke tabel ‘log’ sebelum menghapus data di
tabel Barang.Trigger juga merupakan sebuah database object yang berasosiasi dengan tabel. Artinya
bahwa trigger itu bisa ada setelah tabel di buat. Ketika tabel di drop atau di hilangkan maka secara
otomatis semua trigger yang melekat di tabel itu juga ikut hilang.
Triggers mulai dikenal di versi MySQL 5.0, dan di versi saat ini (5.0.4) fungsionalitasnya sudah
bertambah. Pada versi selanjutnya (5.1) pihak pengembang MySQL berjanji akan lebih menguatkan
(menambah) fitur trigger ini.
Trigger sering digunakan, antara lain untuk:
 Melakukan update data otomatis jika terjadi perubahan. Contohnya adalah dalam kasus barang,
jika barangditambah maka stok akan bertambah dan jika barangdikeluarkan maka stok akan
berkurang secara otomatis.
 Trigger dapat digunakan untuk mengimplementasikan suatu sistem log. Setiap terjadi perubahan,
secara otomatis akan menyimpan ke tabel log.
 Trigger dapat digunakan untuk melakukan validasi dan verifikasi data sebelum data tersebut
disimpan.

Tipe dari Trigger yaitu :


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 system (misal logon atau shut down) yang
terjadi pada sebuah skeam atau database.

Trigger perlu dibuat pada saat :


1. Membuat sebuah aksi tertentu terhadap suatu event.
2. Memusatkan operasi global.

Trigger tidak perlu dibuat, jika :


1. Fungsionalitas yang diperlukan suatu ada pada Oracle server.
2. Duplikat atau sama dengan fungsi trigger yang lain.

Sintak penulisan dari database trigger, berisi komponen berikut :


1. Trigger timing :
a. Untuk tabel : BEFORE, AFTER
b. Untuk view : INSTEAD OF
2. Trigger event : INSERT, UPDATE, atau DELETE
3. Nama tabel : yaitu nama tabel atau view yang berhubungan dengan trigger.
4. Tipe trigger : baris atau pernyataan (statement)
5. Klausa WHEN : untuk kondisi pembatasan pada trigger
6. Trigger body : bagian prosedur yang dituliskan pada trigger.

36
Trigger timing adalah waktu kapan trigger diaktifkan. Ada tiga macam trigger triming, yaitu :
1. BEFORE : trigger dijalankan sebelum DML event pada tabel.
2. AFTER : trigger dijalankan setelah DML event pada tabel.
3. INSTEAD OF : trigger dijalankan pada sebuah view.

Trigger event ada 3 kemungkinan : INSERT, UPDATE, atau DELETE. Pada saat trigger event
UPDATE, kita dapat memasukkan daftar kolom untuk mengidentifikasi kolom mana yang berubah
untuk mengaktifkan sebuah trigger (contoh : UPDATE OF salary ...). Jika tidak ditentukan, maka
perubahannya akan berlaku untuk semua kolom pada semua baris.
 Insert : Terjadi ketika ada penambahan baru melalui pernyataan insert, load maupun replace
 Update : Terjadi ketika ada modifikasi data melalui pernyataan update
 Delete : Terjadi ketika ada penghapusan data melalui pernyataan delete maupun replace.

Bila anda akan mengompilasi trigger untuk insert tabel dan ada pernyataan yang melibatkan field
tabel tersebut, anda di wajibkan menyertakan klausa new, artinya anda di haramkan menambah klausa
old. Misal: insert into tabel1(a) values(new.a) atau update tabel1 set a=new.a where b=new.b. Jadi
tidak boleh menjadi begini: insert into tabel1(a) values(old.a)
Hal ini berbeda dengan saat update tabel, anda dapat menyertakan kedua klausa tersebut baik new
dan old. Misal: Update tabel1 set a=new.a where b=old.b;
Kebalikannya dengan delete, anda di haramkan menambahkan klausa new dan di wajibkan
menggunakan klausa old.
Mungkin anda berpikir apa bedanya trigger itu aktif saat sebelum dan sesudahnya, misal before
insert di bandingkan dengan after insert, before update dengan after update dan before delete dengan
after delete, dan bagaimana seharusnya di gunakan?
Jika event trigger itu before insert atau update, sangat berguna untuk merubah data yang akan
masuk di tabel yang ditumpangi trigger itu sendiri. Contoh sintak: if new.a='mbahdien' then
new.b=2000 else new.b=0;
Sedangkan after berguna bila berurusan dengan penambahan ataupun modifikasi data di tabel
lain.
Bila event trigger itu terjadi pada saat before delete, berguna untuk memasukkan data yang akan
di hapus ke tabel lain. Sedangkan after berguna untuk menghapus data di tabel lain.
Tipe trigger ada 2 macam yaitu :
1. Statement : trigger dijalankan sekali saja pada saat terjadi sebuah event. Statement trigger juga
dijalankan sekali, meskipun tidak ada satupun baris yang dipengaruhi oleh event yang terjadi
2. Row : trigger dijalankan pada setiap baris yang dipengaruhi oleh terjadinya sebuah event. Row
trigger tidak dijalankan jika event dari trigger tidak berpengaruh pada satu baris pun.
Trigger body mendefinisikan tindakan yang perlu dikerjakan pada saat terjadinya event yang
mengakibatkan sebuah trigger menjadi aktif.

Berikut syntak pembuatan trigger :


CREATE [DEFINER = { user | CURRENT_USER }]
TRIGGER nama_trigger waktu_trigger nama_kejadian ON nama_tabel
FOR EACH ROW BEGIN
isi trigger
END

37
contoh:
CREATE TRIGGER tabel2_after_ins_tr AFTER INSERT ON tabel2
FOR EACH ROW
BEGIN
insert into table1(a) values(new.a);

END;

Untuk tanda yang di beri kurung kotak(DEFINER = { user | CURRENT_USER }) adalah opsional
yang artinya boleh di pakai boleh juga tidak. Jika tidak di pakai maka secara otomatis defaultnya
adalah DEFINER=CURRENT_USER. Jadi berdasar contoh di atas maka sintaknya berubah seperti
ini:

CREATE DEFINER=CURRENT_USER TRIGGER ( selanjutnya idem seperti di atas)

Anda dapat mengganti definer=current_user menjadi definer=nama_user@nama_komputer.


Contoh definer='root'@'localhost'
Jadi sintaknya menjadi begini:

Create definer='root'@'localhost' trigger ( selanjutnya idem seperti di atas)

Lalu apa bedanya definer=current_user dengan definer=nama_user@nama_komputer?

Perbedaannya menyangkut hak akses privelegenya. Misal jika si user root itu tidak mempunyai hak
menginsert tabel maka saat anda login menggunakan user tersebut kemudian trigger tersebut aktif
dan di trigger tersebut ada perintah memasukkan data ke tabel lain maka otomatis ia gagal dan terjadi
error. Berbeda dengan definer=current_user, ia tetap berhasil memasukkan data ke tabel lain
meskipun si user root itu tidak punya hak menginsert tabel.

1. Membuat Trigger Baru


Berikut ini bentuk umum perintah untuk membuat triggers:
CREATE TRIGGER name [BEFORE|AFTER] [INSERT|UPDATE|DELETE]
ON tablename
FOR EACH ROW statement
Keterangan :
 BEFORE | AFTER digunakan untuk menentukan kapan proses secara otomatis akan
dieksekusi, sebelum atau sesudah proses.
 INSERT | UPDATE | DELETE digunakan untuk menentukan event yang dijadikan trigger
untuk menjalankan perintah-perintah di dalam triggers. Statement atau perintah dalam
trigger dapat berupa satu perintah saja, dan dapat juga beberapa perintah sekaligus. Jika
terdapat beberapa perintah dalam trigger, maka gunakan perintah BEGIN dan END untuk
mengawali dan mengakhiri perintah.
Di dalam statement trigger, kita dapat mengakses record tabel sebelum atau sesudah proses
dengan menggunakan NEW dan OLD.
NEW digunakan untuk mengambil record yang akan diproses (insert atau update).
OLD digunakan untuk mengakses record yang sudah diproses (update atau delete).

38
Tahap Uji Coba
Membuat trigger dapat dilakukan oleh user Manajer, memasukkan data (insert) dapat
dilakukan di Karyawan2. Studi kasus yang dibuat yaitu misalkan sebuah toko, toko tersebut membeli
barang dan menjual barang. Saat melakukan pembelian dan penjualan barang akan dicatat di table
Transaksi. Jika sebuah kejadian ‘tambah’ (pembelian barang) maka stok di table Barang otomatis
akan bertambah. Jika kejadian ‘kurang’ (penjualan barang) maka stok di table Barang otomatis akan
berkurang.
Jika ingin memasukan data di table transaksi, maka kode barang yang ingin dimasukan
harus ada di table Barang. Jika memasukkan kode barang yang tidak ada di table barang, maka yang
terjadi adalah data akan masuk di table Transaksi, tetapi tidak terjadi perubahan di table Barang. Maka
penyimpangan data akan terjadi.

1. Buat syntax trigger sesuai studi kasus di atas

2. Kosongkan data di table Transaksi dan tampilkan table Barang sebelum proses insert, agar
dapat mengetahui perubahan pada stok barang.

3. Kemudian lakukan proses insert kejadian ‘tambah’ dan pastikan data sudah masuk di table
Transaksi serta stok di table Barang bertambah.

39
4. Lakukan lagi proses insert kejadian ‘tambah’, untuk membuat variasi data dan tampilkan table
Barang dan Transaksi untuk melihat lagi perubahan table

5. Lakukan proses insert untuk kejadian ‘kurang’ dan lihat kembali perubahan table, apakah stok
di table Barang berkurang.

6. Jika ingin melihat status dari trigger dapat dilakukan syntax berikut :

40
BAB XIV
Transaction

Transaksi adalah satu atau beberapa aksi program aplikasi yang mengakses/mengubah isi basis
data.Transaksi merupakan bagian dari pengeksekusian sebuah program yang melakukanpengaksesan
basis data dan bahkan juga melakukan serangkaian perubahan data.
DBMSyang kita gunakan harus menjamin bahwa setiap transaksi harus dapat dikerjakan
secarautuh atau tidak sama sekali. Tidak boleh ada transaksi yang hanya dikerjakan sebagian,karena
dapat menyebabkan inkonsistensi basis data. Untuk itu transaksi selalu merubahbasis data dari satu
kondisi konsisten ke kondisi konsisten lain.
 Tujuan
Transaksi bertujuan untuk mencegah dari kehilangan ataupun kerusakan data. Untuk menjamin
agar integritas dapat tetap terpelihara maka setiap transaksi harus memiliki sifat-sifat:
1. Atomicity, dimana semua operasi dalam transaksi dapat dikerjakan seluruhnya atau tidak
sama sekali.
2. Consistency, dimana eksekusi transaksi harus dapat menjamin data tetap konsisten setelah
transaksi berakhir.
3. Isolation, jika pada sebuah sistem basis data terdapat sejumlah transaksi yang dilaksanakan
secara bersamaan, maka semua transaksi yang dilaksanakan pada saat yang bersamaan
tersebut harus dapat dimulai dan bisa berakhir.
4. Durability, dimana perubahan data yang terjadi setelah sebuah transaksi berakhir dengan
baik, harus dapat bertahan bahkan jika seandainya sistem mati.

Terhentinya suatu transaksi tidak selalu diakibatkan oleh kegagalan insidental baik dari
perangkat keras (crash) ataupun kemacetan sistem operasi (hang). Tapi lebih sering terjadi karena
user sengaja menghentikan transaksi atau karena penghentian transaksi oleh DBMS akibat adanya
kondisi tak diinginkan, seperti deadlock atau timeout.

 Sebuah transaksi dapat menghasilkan dua kemungkinan:


a. Jika dilaksanakan lengkap seluruhnya, transaksi tersebut telah di commit dan basis data
mencapai keadaan konsisten baru.
b. Jika transaksi tidak sukses, maka transaksi dibatalkan dan basis data dikembalikan ke
keadaan konsisten sebelumnya (rollback).

Transaksi yang sudah di commit tidak dapat dibatalkan lagi. Jika ada kesalahan, maka harus
dilakukan transaksi lain yang membalik dampak transaksi sebelumnya.

 Status yang dapat dicapai oleh sebuah transaksi sejak mulai dilaksanakan hingga selesai atau
batal adalah:
1. Aktif (Active) yang merupakan status awal (initial state) sebuah transaksi yang
menunjukkan transaksi tersebut masih dieksekusi.
2. Berhasil Sebagian (Partially Committed), yaitu keadaan yang dicapai transaksi tepat pada
saat operasi terakhir dalam transaksi selesai dikerjakan.
3. Gagal (Failed), yang merupakan keadaan dimana sebuah transaksi terhenti
pengeksekusiannya sebelum tuntas sama sekali.
4. Batal (Aborted), yaitu keadaan dimana sebuah transaksi dianggap tidak/belum dikerjakan
yang tentu dengan terlebih dahulu diawali dengan mengembalikan semua data yang telah
diubah ke nilai-nilai semula. (yang menjadi tanggung jawab DBMS).

41
5. Berhasil Sempurna (Committed), keadaan dimana transaksi telah dinyatakan berhasil
dikerjakan seluruhnya dan basis data telah merefleksikan perubahan-perubahan yang
memang diinginkan transaksi.
 State-state dari transaksi
Perlu diketahui kapan suatu transaksi mulai, selesai melakukan operasi apa aja, dan commit
untuk keperluan recovery.
1. BEGIN_TRANSACTION : Mulai Transaksi
2. READ/WRITE : Operasi-operasi pada transaksi
3. END_ TRANSACTION : Akhir transaksi, diperiksa apakah perubahan yang
disebabkan suatu transaksi dapatdibuat permanen
atau harus digagalkan
4. COMMIT_TRANSACTION : Memberi signal bahwa suatu transaksi sukses
5. ROLLBACK (abort) : Memberi signal bahwa suatu transaksi gagal hingga semua
perubahan pada basis data harus dihapus.

Untuk melakukan suatu transaksi digunakan syntax :

 BEGIN {TRAN | TRANSACTION }


[ transaction_name
|@tran_name_variable]
[ WITH MARK [ ‘description’] ]
 [ database_operation ]
 COMMIT { TRAN | TRANSACTION }
[ transaction_name |
@tran_name_variable ]

42
Mesin Penyimpanan

MySQL menyediakan berbagai jenis penyimpanan, yang akan menentukan bagaimana


sesungguhnya suatu table disimpan. Secara bawaan tipe yang dipakai untuk table adalah MyISAM.
Adapun 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 memungkinkan penanganan Commit dan Rollback, yang biasanya tersedia pada
DBMS komersial.

Perlu diketahui, walaupun InnoDB mendukung transaksi, bukan berarti InnoDB lebih baik
daripada tipe seperti MyISAM. Bila Anda memang tidak memerlukan transaksi akan lebih baik kalau
menggunakan tipe seperti MyISAM karena 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 daripada pada MyISAM karena implementasi InnoDB secara internal tidak
tercatat jumlah baris dalam tabel.

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.

Selanjutnya berikan perintah seperti berikut :

CREATE TABLE stok (

Kode_brg CHAR(5) NOT NULL PRIMARY KEY,

Nama_brg CHAR(35) NOT NULL,

Jumlah INT) ENGINE=InnoDB;

Dengan cara seperti itu mesin penyimpanan yang digunakan untuk tabel stok berupa InnoDB.

Memahami Transaksi
Sebuah transaksi adalah 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 :

1. Transaksi dianggap berhasil jika semua proses berjalan dengan lancar.


2. Transaksi dianggap gagal kalau ada salah satu bagian proses yang gagal.

Bayangkanapa yang akan terjadi seandainya komputer telah mengurangi saldo dalam tabel tabungan
pemakai, tetapi tiba-tiba mesin tidak bisa mengeluarkan uang. Semestinya jika hal itu terjadi, pemakai
harus dianggap seperti kalau tidak melakukan proses apapun. Kasus yang lain, pihak Direksi
memutuskan untuk menaikkan gaji seluruh pegawai sebesar 20%. Ketika proses pemutakhiran
berlangsung baru setengah jalan, ada masalah dalam sistem. Seandainya data yang telah diperbaharui

43
tidak dianggap gagal (dikembalikan ke keadaan semula), maka terjadi hal yang tidak konsisten yaitu
ada data gaji yang sudah dinaikkan, tetapi ada yang belum.Untuk mengantisipasi keadaan seperti
itulah, SQL menyediakan perintah untuk menangani transaksi.Tujuannya adalah untuk menjamin agar
tidak terjadi perubahan yang bersifat parsial kalau sesuatu kesalahan terjadi sebelum suatu transaksi
berjalan secara lengkap.

Cara Menggunakan Transaksi


Secara bawaan, setiap klien MySQL yang melakukan koneksi ke MySQL server menggunakan 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, MySQL menyediakan perintah SET AUTOCOMMIT=0


.Pada keadaan seperti ini, suatu perintah SQL yang melakukan perubahan data pada database dapat
disetujui untuk segera disimpan secara menetap dengan menggunakan perintah COMMIT atau
dibatalkan dengan menggunakan perintah ROLLBACK.

Satu Satu
TRANSAKSI TRANSAKSI

Pernyataan 1; Pernyataan 1;

Pernyataan 2; Pernyataan 2;

….. …..
Perintah Perintah
dalam dalam
ROLBACK; COMMIT;
satu satu
Untuk menandai awal sebuah transaksi dan tanpa memperhatikan mode AUTOCOMMIT, MySQL
….. transaksi ….. transaksi
menyediakan pernyataan bernama BEGIN pernyataan COMMIT atau ROLLBACK dieksekusi.

Contoh berikut digunakan untukdibatalkan dimutakhir


menunjukkan efek ROLLBACK terhadap sebuah perintah INSERT
untuk keadaan AUTOCOMMIT on(nilai 1) dan off(nilai 0).
kan
Problem pada Multiuser
ke database
Pada lingkungan yang multiuser, akses terhadap database dilakukan oleh sejumlah orang.Pada
keadaan seperti ini, muncul sejumlah problem yang mungkin terjadi. Berikut adalah empat masalah
yang perlu diketahui:

1. Pemutakhirkan yang hilang (lost update)


Adakalanya pemutakhiran terhadap data dilakukan tanpa memperhatikan pemakai yang lain.
Sebagai gambaran pada saat melakukan pemeriksaan terhadap sediaan kursi penerbangan,

44
dua orang pemakai memperoleh informasi bahwa terhadap 10 kursi, sedangkan dalam waktu
yang sama pemakai yang lain mengalokasikan 3 buah kursi. Ilustrasi berikut.

Dengan mekanisme seperti di atas tampak bahwa kursi yang kosong bernilai 7, padahal semestinya
yang benar adalah 3.

2. Pembacaan Kotor
Pembacaan kotor terjadi jika suatu data yang telah diperbarui tetapi belum melewati
COMMIT dibaca oleh pemakai lain. Kasus pembacaan kotor menimbulkan massalah
sekiranya tiba-tiba pemakai yang melakukan pemutakhiran data melakukan pembatalan,
sementara itu pemakai lain telah terlanjur membaca data yang telah diperbarui. Untuk lebih
jelasnya perhatikan gambar berikut.

Tampak bahwa transaksi kedua melihat kolom kosong bernilai 6, tetapi ternyata sebentar kemudian
nilai kolom tersebut telah berubah menjadi 10 (akibat ROLLBACK).

3. Pembacaan yang Tidak Sama


Kasus ini terjadi bila seseorang pemakai memperoleh nilai yang berubah dalam waktu yang
sangat pendek. Contoh dapat dilihat pada gambar berikut:

45
Tampak bahwa semula kolom kosong bernilai 10, tetapi sebentar kemudian telah berubah
menjadi 6. Hal seperti ini menjadi masalah sekiranya transaksi kedua berupa suatu proses
yang membaca data dalam waktu yang lama, misalnya membuat suatu ringkasan
4. Penyisipan yang Tak Dikehendaki
Penyisipan yang tidak dikehendaki merupakan kasus khusus dari pembacaan yang tidak sama.
Hal ini terjadi kalau ada instruksi INSERT saat pemakai lain sedang melakukan suatu query
tersebut belum berakhir. Penyisipan ini akan menimbulkan perbedaan hasil yang diperoleh
oleh pemakai lain.

Penanganan Multiuser
Mekanisme penanganan multiuser (pengaksesan secara serentak oleh sejumlah pemakai terhadap
database) biasa disebut dengan istilah penguncian (locking).Penguncian oleh para pemakai dapat
dilakukan terhadap semua baris atau sejumlah baris dalam database.

Secara bawaan MySQL melakukan penguncian secara otomatis, tetapi ada kalanya penguncian harus
dilakukan secara manual.Gambar 17.9 melukiskan contoh pemutakhiran data yang tidak melalui
penguncian secara manual.

46
Pada contoh di atas, siapapun dapat melakukan proses untuk mengubah baris tersebut sebelum
UPDATE dilakukan. Sebagai akibatnya, perintah UPDATE yang mengubah jumlah menjadi 17 dapat
memberikan hasil yang salah terhadap kolom tersebut.

Jika Anda tidak menghendaki orang lain mengubah baris tersebut sebelum pemakai pertama
memberikan COMMIT, Anda bias menambahkan FOR UPDATE pada perintah SELECT. Perhatikan
gambar berikut:

Pada contoh di atas, baris dengan kode_brg‘P-001’ tetap dalam keadaan terkunci dan baru akan
dilepaskan ketika COMMIT dijalankan. Penguncian dilakukan melalui FOR UPDATE pada
pernyataan SELECT. Akibatnya sebelum COMMIT, orang lain tidak bias mengubah baris tersebut
(harus menunggu sampai pemakai yang mengunci memberikan COMMIT atau waktu tunggu habis).

Selain FOR UPDATE, klausa LOCK IN SHARE MODE juga bisa dipakai. Kedua klausa tersebut
sama-sama melindungi dari kemungkinan orang lain melakukan perubahaan pada baris yang dikunci.
Perbedaannya, SELECT-FOR UPDATE hanya bisa dijalankan oleh satu pemakai, sedangkan
SELECT-FOR SHARE MODE bisa dijalankan oleh banyak pemakai.

47
Penguncian Secara Otomatis
MySQL menerapkan penguncian secara otomatis terhadap sejumlah perintah yang mutakhirkan
database.Beberapa pernyataan yang menggunakan penguncian secara otomatis adalah sebagai berikut.

 Pernyataan UPDATE
Saat UPDATE dieksekusi, semua baris yang termodifikasi akan dikunci. Bila ada yang
mutakhirkan baris yang sama, yang UPDATE yang belakangan harus menunggu sampai
UPDATE yang pertama mengalami COMMIT.
 Pernyataan INSERT
Pernyataan INSERT membuat semua kunci primer atau kunci yang unik akan dikunci. Hal
inilah yang memungkinkan pencegahan kunci yang kembar.
 Pernyataan SELECT dengan klausa FOR UPDATE dan LOCK IN SHARE MODE
Saat SELECT dengan FOR UPDATE dan LOCK IN SHARE MODE dieksekusi, semua
baris yang dihasilkan akan dikunci sampai ada COMMIT atau ROLLBACK.

48
Tahap Uji Coba

Studi kasus yang digunakan pada proses transact sama dengan trigger tetapi trigger dapat terjadi
penyimpangan data apabila kode barang yang dimasukkan tidak ada di table Barang. Berbeda dengan
transact apabila kode barang yang dimasukkan tidak ada di table Barang maka yang terjadi tidak ada
perubahan di kedua table. Karena adanya syntax Commit dan Rollback. Jadi penyimpangan data tidak
akan terjadi pada proses transact.

1. Buat transact untuk kejadian ‘tambah’ dengan nama “insert_tambah” yang dikombinasikan
dengan procedure sesuai studi kasus di atas.

2. Buat lagi transact untuk kejadian ‘kurang’ dengan nama “insert_kurang”

3. Tampilkan kondisi table Transaksi dan table Barang agar dapat mengetahui perubahan di
setiap table.

49
4. Lakukan proses call insert_tambah dan lihat perubahan stok table Barang apakah stok
bertambah.

5. Lakukan proses call insert_kurang dan lihat apakah stok di table Barang berkurang

50
6. Lakukan lagi proses call inser_tambah tetapi masukkan kode barang yang tidak ada di table
Barang. Lihat perubahannya jika kedua table tidak mengalami perubahan maka proses
transact diatas berhasil.

7. Jika ingin melihat status dari transact maka dapat dilakukan cara berikut :
Prosesnya sama seperti melihat status procedure karena transact ini telah dikombinasikan
dengan procedure.

51
Kesimpulan

Masalah keamanan (security) di MySQL merupakan hal yang tidak boleh dianggap sepele apalagi
dikesampingkan.MySQL merupakan software database yang bersifat client-server, yang
memungkinkan beberapa user dapat mengakses server MySQL dari mana pun.Untuk itu, server
MySQL harus benar-benar aman dari akses (serangan) orang-orang yang tidak berhak.

DDL merupakan kelompok perintah yang berfungsi untuk mendefinisikan atribut-atribut basis data,
tabel, atribut(kolom), batasan-batasan terhadap suatu atribut, serta hubungan antar tabel. Yang
termasuk dalam kelompok DDL ini adalah CREATE, ALTER, dan DROP.

Data Manipulation Language (DML) adalah sub bahasa SQL yang berfungsi memanipulasi data yang
ada di dalam basis data atau database. Manipulasi Data (DML) digunakan oleh programkomputer atau
pengguna database untuk menyisipkan, menghapus dan mengupdate data dalam database.

Mysql versi 5.0 memiliki beberapa syntax atau objek yang dapat memudahkan pengguna dalam
melakukan DBMS yaitu Stored Procedure, Function, View & Index, Trigger, dan Transaction.
Masing masing mempunyai kelebihan dan kekurangan, jika ingin digunakan maka sesuaikan dengan
studi kasus yang telah dibuat.

52

Anda mungkin juga menyukai