Anda di halaman 1dari 74

MODUL PRAKTIKUM

BASIS DATA 2

D3 Manajemen Informatika
Fakultas Teknik
Universitas Trunojoyo
MODULI
ENTITYRELATIONSHIPMODEL(ERMODEL)

Tujuan:
Mampumemahamikonsepdatamodeldaribasisdatadanmerancangskemabasisdata
dalamERmodeldandipresentasikandalambentukgambar(ERDiagram).

TugasPendahuluan:
1. ApakahyangandaketahuitentangERModel?
2. ERModeldigunakandalamfasedesainbasisdatakonseptual,sebutkandan
1 jelaskan6tahapprosesdesainbasisdatatersebut?
3. SebutkandanjelaskandarielemenelemendasarpadaERModel?
4. Sebutkan dan jelaskan macammacam batasan integritas (integrity
constraints)dalamERDiagram?
1. DasarTeori
TinjauanDesainBasisData

PadaERmodel,gambarandunianyatadiistilahkandalam objekdan
relasinya. ER model biasa digunakan untuk mengembangkan inisial dari
desainbasisdata.ERmodelmenyediakansuatukonsepyangbermanfaatyang
dapat mengubah deskripsi informal dari apa yang diinginkan oleh user
menjadi hal yang lebih detail, presisi dan deskripsi detail tersebut dapat
diimplementasikankedalamDBMS.
Padakonteksyanglebihluas,ERmodeldigunakandalamfasedesain
basisdatakonseptual.Berikutiniprosesdesainbasisdatayangdapatdibagi
dalam 6tahapERmodelbiasanyadigunakanpadatigatahappertamadari
prosesdesaindibawahini:
1. AnalisaKebutuhan
Pertamakaliyangharusdipahamiadalahkebutuhanuserterhadapbasis
data.Prosespadatahapinibiasanyaberlangsungsecarainformalmeliputi
diskusi dengan kelompok user, melakukan studi terhadap lingkungan
operasi dan kemungkinan perubahan yang dilakukan, analisa terhadap
dokumentasi dari aplikasi yang sudah ada yang dimaksudkan untuk
diganti atau disempurnakan oleh basis data. Beberapa metodologi
diusulkandanalatbantu(tools)dikembangkanuntukmendukungproses
ini.

2. DesainKonseptualBasisdata
Informasi dikumpulkan pada bagian analisis kebutuhan dan digunakan
untukmengembangkandeskripsitingkattinggidaridatayangdisimpan
dalam basisdata,dengancosntraints yangdigunakanuntukmenangani
datadataini.PadatahapinidigunakanERmodel.

3. DesainlogikaBasisdata
Padatahapinimengubahdesainkonseptualbasisdatakedalamskema
basisdatadalammodeldatayangdipiliholehDBMS.Dalamhaliniyang

2
dipilihadalahDBMSRelasional.Hasilnyaberupaskemakonseptualyang
disebutjugadenganskemalogika.

4. SkemaPerbaikan
Pada tahap ini, himpunan relasi dalam skema basis data relasional
dianalisauntukmengidentifikasipersoalanyangakanmuncul,kemudian
memperbaikinya. Dalam hal ini dilakukan normalisasi, dengan
restrukturisasi ulang untuk memastikan beberapa properti yang
dikehendaki.

5. DesainFisikBasisdata
Pada tahap ini, ditentukan workload (masukan) yang harus disupport,
memperbaikidesainberbasisdatauntukmemastikankriteriaperformance
yang diinginkan sudah tercapai. Tahap ini melibatkan indeks pada
beberapa tabel dan pengelompokan (clustering) beberapa tabel, atau
melibatkanpuladesainulangbagianskemabasisdatayangdidapatkan
daritahapdesainawal..

6. DesainKeamanan
Pada tahap ini, didentifikasi kumpulan user yang berbeda dengan
peranannyamasingmasing(misalnyatimpengembanganproduk,bagian
customer,manajerproduk,dll).Untuktiapperandansekelompokuser
harusdiidentifikasibagianmanadaridatabaseyangdapatmerekaakses
danbagianmanayangtidakbolehdiakses.

Entiti,AtributdanHimpunanEntiti

Entityadalahobyekdunianyatayangdapatdibedakandariobyekyang
lain.Entitydigambarkan(dalambasisdata)denganmenggunakanhimpunan
atribut. Himpunan entiti yang sejenis disimpan dalam himpunan entiti.
Himpunanentitiadalahkumpulanentityyangsejenis.

Gambar1.2EntitiPegawai(Employee)

RelasidanHimpunanRelasi
3
Relasi adalah asosiasi diantara dua atau lebih entity. Misalnya ani
bekerjadidepartemenfarmasi.Sedangkanhimpunanrelasiadalahhimpunan
relasi yang sejenis. Himpunan relasi nary R berelasi dengan sejumlah
himpunan entity n E1 .... En sehingga himpunan entity yang sama dapar
berpartisipasidalam himpunanrelasiyangberbeda.Ataumempunyaiperan
yangberbedadalamsuatuhimpunanyangsama.

Gambar1.3.RelasidanEntity

FiturTambahanuntukERModel
1.4.1BatasanKunci(KeyConstraints)

Padamodel databaserelasional,kaitannyaatauasosiasiantaradua
buahtabledisebuthubungan(relationship).Hubungandapatberupa:
1to1,yaknisatudatapadasuatutabelberpasangandengan
hanya satu data pada tabel lain. Contoh : seorang mahasiswa hanya
dimungkinkanmempunyaisebuahno_regdansatuno_reghanyadapat
ditugaskanpadasatuorangmahasiswasaja.
1 to many, yakni satu data pada suatu tabel berpasangan
denganbanyakdatapadatabellain.Contoh:Seorangmahasiswadapat
mengambillebihdarisatumatakuliah.
Manyto1,yaknibanyakdatapadasuatutabelberpasangan
dengansuatudatapadatabellain.
Many to Many, yakni banyak data pada suatu tabel
berpasangandenganbanyakdatapadatabellain.Contoh:seorangdosen
dapat mengajar banyak mahasiswa dan sebaliknya seorang mahasiswa
jugadapatdiajarlebihdarisatudosen.

4
Gambar1.4ContohKeyConstraintantarEntity

1.4.2BatasanPartisipasi(ParticipationConstraints)
Apakahsetiapdepartemenmempunyaiseorangmanajer?
Jika semua departemen pasti mempunyai manager maka partisipasi
Departements dalam manages dapat dikatakan total. Sebaliknya jika tidak
semuadepartemenmemilikimanagermakapartisipasinyaadalahpartial.

Gambar1.5ContohParticipationConstraint

2. KegiatanPraktikum
1. Buatkanrancanganentitydanrelasitiaptabeldarisistemperpustakaanberikut
ini:

5
Gambar1.6skemarelasidatabaseuntuksistemperpustakaan
2. Tugastambahan(ditentukanolehasistenpraktikum)!

3. TugasAkhir
DarikasusIpadakegiatanpraktikummakabagaimanadesainbatasankuncinya?

I. Relasipublished_by:
a1:toa2:
II. Relasibook_copies:
b1:tob2:
III. Relasibook_loan:
d1:toc:
c:tod2:
6
MODULII
DATADEFINITIONLANGUAGE(DDL)

Tujuan:
Mampumemahamiperintahperintahuntukmenjelaskanobjekdaridatabasedan
mendefinisikan atributatribut database, tabel dan batasanbatasanterhadapsuatu
atributsertahubunganantartabel.

TugasPendahuluan:
1.ApakahyangandaketahuitentangDDL?
2. SebutkanstatemenDDLuntukmendefinisikankerangkadatabase?
3. Apayangandaketahuitentangbatasankuncibaikprimer(primarykey
constraints)maupunforeignkeys?
4. Bagaimana index dibuat dan kapan index perlu dibuat dan tidak perlu
dibuat?
5. Apayangandaketahuiviewdansebutkanduamacamtipedariview?

7
1. DasarTeori
1.1 StatementDataDefinitionLanguange
DDL adalah perintahperintah yang digunakan untuk menjelaskan
objek dari database. Dengankata lainDDLmerupakan kelompokperintah
yang berfungsi untuk mendefinisikan atributatribut database, tabel,
atribut(kolom), batasanbatasanterhadapsuatuatribut serta hubungan antar
tabel.YangtermasukkelompokDDLiniadalah:
CREATE:untukmembuatdatabase,tabel,viewdanindex
ALTER:untukmengubahstrukturtabel
DROP:untukmenghapusdatabase,tabel,viewdanindex

1.2 Database,Tabel,IndexdanView
1.2.1Database
Database adalah sekumpulan data/informasi yang diorganisasikan
dengan beberapa cara logika, saling berhubungan dan digunakan untuk
keperluantertentu.Sintaksuntukmembuatdatabaseadalah:

CREATEDATABASEnama_db;

sedangkansintaksuntukmenghapusdatabaseadalah:

DROPDATABASEnama_db;

1.2.2Tabel
TabeladalahekuivalensidarisebuahentitasdalamsebuahERmodel.
Sebuahtabelterdiridaribeberapakolomyangdisebutdenganfielddansebuah
fieldterdiridaribeberapabaris(record).Sedangkanfieldadalahekuivalensi
dari atribut sebuah entitas dalam sebuah ER model. Dapat juga dianggap
sebagaibentukpengelompokandatapadasebuahtabel.Recordadalahsatuan
dataatomik(terkecil)yangadadalamsebuahtabel.Sebuahrecordterbentuk
dari beberapa informasi/data dari beberapa field. Contoh : 05621045,
Anamisa,Jl.PinangNo.75adalahsebuahrecordyangtersimpandalamfield
tabelmahasiswa.
Untukmembuatsebuahrelationshipdiperlukanfieldfieldyangsaling
berpadanan. Fieldfield yang dimaksud adalah memiliki batasan integritas.
Batasanintegritasadalahsuatukondisiyangharusbernilaibenaruntuksuatu
8
instance dalam basis data, diantaranya adalah: NOT NULL, UNIQUE,
PRIMARYKEY,FOREIGNKEY.Sintaksuntukpenulisanconstraint:

CREATETABLEnama_tabel(
nama_columndatatype[DEFAULTexpr][column_constraint],
.
CONSTRAINT[table_constraint][,.]);

ConstraintNOTNULL
Suatu kolom yang didefinisikan dengan constraint NOT NULL tidak
boleh berisi nilai NULL. Kolom yang berfungsi sebagai kunci primer
(primarykey)otomatistidakbolehNULL.SyntaksuntukconstraintNOT
NULLadalah:

CREATETABELnama_tabel(
nama_kolomtipe_data,
.........
CONTRAINTnama_kolom_constraintNOTNULL);

ConstraintUNIQUE
Mendefinisikan suatu kolom menjadi bersifat unik. Sintaks untuk
constraintUNIQUEadalah:

CREATETABELnama_tabel(
nama_kolomtipe_data,
.........
CONTRAINTtable_constraintUNIQUE(nama_kolom_constraint)
);

ConstraintPRIMARYKEY
Membentukkeyyangunikuntuksuatutabel.Kolomyangdidefinisikan
sebagaiprimarykeyakanmengidentifikasisuatubarisdatamenjadiunik.

CREATETABLEnama_tabel(
nama_kolomtipedata,
.
CONSTRAINTtable_constraintPRIMARYKEY
(nama_kolom_constraint)
9
);

Contohpenulisanconstraint:
CREATETABLEemployees(
employee_idvarchar(6),
last_nameVARCHAR(20),
emailVARCHAR(20),
CONSTRAINTemployee_id_pkPRIMARYKEY(employee_id)
);

ConstraintFOREIGNKEY
Mendefinisikan pada suatu kolom yang ada pada suatu table, dimana
kolomtersebutjugadimilikiolehtableyanglainsebagaisuatuPRIMARY
KEY.
SintaksuntukconstraintFOREIGNKEYadalah:
CREATETABLEnama_tabel(
nama_kolomtipedata,
.
CONSTRAINTtable_constraintFOREIGNKEY
(nama_kolom_constraint)REFERENCES
table_contraints_kunci_primer(nama_kolom_kunci_primer)
);

Sedangkanuntukmenghapustabel,dapatdilakukandengansintaksnya
sebagaiberikut:

DROPTABLEnama_tabel;


Sedangkan untuk mengubah tabel, dapat dilakukan dengan menggunakan
sintakssebagaiberikut:

ALTERTABLEnama_tabel
ADD(nama_kolom_barutype_kolom[BEFOREnama_kolom])
MODIFY(nama_kolom_lamatype_kolom)
DROP(nama_kolom_lamatype_kolom);

10
1.2.3Index
Index adalah skema object yang digunakan untuk meningkatkan
kecepatan dalam mendapatkan baris data yang diinginkan dengan
menggunakanpointer.DapatmereduksidiskI/Odenganmenggunakanmetode
pengaksesanuntukmelokasikandatasecaracepat.Sertaindepedentdaritabel
yangdiindeks.
Caramembuatindexadalahindexyangunikdibuatsecaraotomatis
pada saat mendefinisikan constraint PRIMARYKEYatau UNIQUE dalam
definisitabel.Sedangkansecaramanualuserdapatmembuatindexnonunik
pada kolom yang ada untuk meningkatkan kecepatan akses. Syntax untuk
membuatindexpadasatuataulebihkolom:

CREATEINDEXnama_index
ONtabel(nama_kolom);

Contoh:

CREATEINDEXemp_last_name_idxONemployees(
last_name);

Sedangkansintaksuntukmenghapusindexdaridatadictionarydigunakan
DROPINDEXadalah:

DROPINDEXnama_index;

1.2.4.View
salah satuobjekdatabase, yangsecara logikamerepresentasikan sub
himpunandaridatayangberasaldarisatuataulebihtabel.Kegunaanview
adalah untuk membatasi akses database, membuat query kompleks secara
mudah, mengijinkan independensi data dan untuk menampilkan view
(pandangan)datayangberbedadaridatayangsama.Adaduamacamtipeview
adalahsimpleviewdancomplexview.Berikutiniperbandinganantarasimple
viewdancomplexviewadalah:

Tabel2.1PerbandinganSimpleViewdanComplexView

11
Fitur Simpleview ComplexView
JumlahTable Satu Satuataulebih
BerisiFungsi Tidak Ya
BerisiGroupData Tidak Ya
DMLmelaluiView Ya Tidakselalu

View dapat dibuat dengan perintah CREATE VIEW. Subquery


dapat dicantumkan dalam CREATE VIEW, tapi subquery yang digunakan
tidakbolehberisiklausaORDERBY.SyntaxpenulisanVIEWadalah:

CREATEVIEWnama_view
ASsubquery;

Contoh:

CREATEVIEWempvu80
ASselectemployee_id,last_name
fromemployees
wheredepartment_id=80;

Sedangkanuntukmemanggil data dari view,digunakan perintah


yang sama seperti memanggil data dari tabel. Dan untuk menghapus view
dengansintakssebagaiberikut:

DROPVIEWnama_view;

2. KegiatanPraktikum
1. Membuat system informasi perpustakaan dimana ada koleksikoleksi
bukuyangdisediakan,peminjamanolehanggotaperpustaanmakadalam
system tersebut akses yangdapat dilakukanolehanggotaadalahdapat
melihatdatadatabukuyangpernahdipinjam,dendayangharusdibayar
juga melakukan pencarian bukubuku diperpustakaan tersebut. Dengan
desaindatabasesebagaiberikut:

12
13
14
2. Amatilahapayangterjadidarikegiatan1!
3. Tugastambahan(ditentukanolehasistenpraktikum)!

3. TugasAkhir
1. Buatlahdesaindatabaseuntuksuatuperusahaan:
a. Tabel department dengan memiliki primary key pada field
department_id. Dan tabel department terdiri atas fieldfield:
department_id,department_name,manager_iddanlocation_id.
b. Tabel employee dengan memiliki constraint foreign key pada
department_id. Dan tabel employess terdiri dari: employee_id,
last_nameNOTNULL,email,salary,commission_pct,hire_date
NOTNULL.
c. TabelTabel lain yang saling berelasi (seperti tabel persediaan
barang,tabelpemasokbarang,dll).
2. Buatviewempvu80yangberisiid_number,name,sal,department_iddari
pegawaiyangbekerjadidepartment=80.kemudiantampilkanstruktur
dariviewempvu80.
3. BuatnonuniqueindexpadakolomFOREIGNKEYyangadapadatabel
EMPLOYEE.

15
MODULIII
DML(DATAMANIPULATIONLANGUAGE)

Tujuan:
Praktikandapatmemahamidanmengisitabeldalamdatabase
Praktikandapatmemahamidanmemanipulasidatadalamdatabase

TugasPendahuluan
ApayangandaketahuitentangDML?
ApayangandaketahuitentangperintahINSERT,UPDATEdanDELETE?
Sebutkan macammacam klausa maupun operator yang terdapat dalam
perintahSELECT!

DasarTeori

16
DML (Data Manipulation Language) adalah bahasa yang
memungkinkanpenggunamengaksesataumemanipulasidatasepertiyangdiatur
olehmodeldata.Manipulasidataadalah:
Pengambilaninformasiyangdisimpandalambasisdata
Penempataninformasibarudalambasisdata
Penghapusaninformasidaribasisdata
Modifikasiinformasiyangdisimpandalambasisdata

DML (Data Manipulation Language) merupakan bahasa yang bertujuan


memudahkanpemakaiuntukmengaksesdatasebagaimanadirepresentasikanoleh
modeldata.Ada2jenisDML,yaitu:
Prosedural,yangmensyaratkanagarpemakaimenentukan,dataapayang
diinginkansertabagaimanacaramendapatkannya.
Nonprosedural,yangmembuatpemakaidapatmenentukandataapayang
diinginkantanpamenyebutkanbagaimanacaramendapatkannya.

Queryadalahpernyataanyangmemintapenggunamengambilinformasi.Bagian
DML yang terlibat dalam pengambilan informasi disebut bahasa query. Istilah
bahasaqueryseringdisamakandenganistilahbahasamanipulasidata.Sedangkan
SQLadalahsebuahsintaksuntukmengeksekusiquery.

Praktikum
CobasemuacontohoperasiDMLdibawahini:
1. PernyataanINSERTINTO
Pernyataan INSERT INTO digunakan untuk memasukkan data baru pada
tabel.

Sintaks:
INSERTINTOnama_tabel
VALUES(nilai1,nilai2,...)

Urutannilaiyangdiletakkandalamtandakurungdisesuaikandenganurutankolom
dalam tabel. Akan tetapi kita bisa menentukan kolomkolom yang akan diisi
dengandatabaru,yaitu:
INSERTINTOnama_tabel(kolom1,kolom2,...)
VALUES(nilai1,nilai2,...)

17
KolomkolomyangtidakdisebutkanpadaInsertsecaraotomatisakandiisidengan
NulldankolomyangtidakdisebutkandalamInsertharuslahyangtidakNotNull.
Contoh:
InsertIntoMahasiswa
Values('01012','Irwan','Jl.Beo23','Bogor')

2. PernyataanUPDATE
PernyataanUPDATEdigunakanuntukmodifikasidatadalamtabel.
Sintaks:
UPDATEnama_tabel
SETnama_kolom=nilai_baru
WHEREnama_kolom=nilai

Padapernyataandiatas:
SETuntukmenentukankolomyangakandiubahdannilaipenggantinya.
WHEREmenentukankondisidaribarisbarisyangakandiganti.

Contoh:
UpdateMahasiswaSetNama='Riri'
WhereNPM='01010'

3. PernyataanDELETE
PernyataanDELETEdigunakanuntukmenghapusbarispadatabel.
Sintaks:
DELETEFROMnama_tabel
WHEREnama_kolom=nilai

Contoh:
UntukmenghapusbarispadatabelMahasiswayangnilaiNPMnyaadalah01013,
andabisamemberikanpernyataansepertiberikut:
DeleteFromMahasiswa
WhereNPM=01013

DalamperintahDELETEjikakitainginmenghapussemuadatapadatabeltanpa
menghapustabelmakaWheretidakperludisebutkan.
DELETEFROMnama_tabel
Atau
DELETE*FROMnama_tabel
18
4. PernyataanSELECT
SecaraumumperintahSELECThanyadifungsikanuntukmenampilkandata
yangadadidalamsuatutabel.Tetapidalampengembangannya,perintahiniakan
menjadi sebuah perintah yang sangat penting dan berpengaruh hingga saat
pemrogramandistoredproceduresdantriggers.Dalambasisdata2iniyangkita
bahasadalahsemuapernyataanSELECTyangdigunakanuntukmemilihdatadari
tabel,yangmanahasilnyadisimpandalamtabelhasilyangdisebutResultSet.

Sintaks:
SELECTnama_kolom
FROMnama_tabel

UntukmemilihbeberapakolomgunakanpernyataanSELECTsebagaiberikut:
SELECTnama_kolom1,nama_kolom2,...
FROMnama_tabel

Contoh:
PernyataanuntukmenampilkankolomNPMdanNamayangterdapatpadatabel
Mahasiswa.
SelectNPM,Nama
FromMahasiswa

Untuk memilih semua kolom dari tabel, dapat menuliskan tanda asterisk ( * )
sesudahkataSelect.Simbol*berartisemuakolom,sepertiberikut:
SELECT*
FROMnama_tabel

Contoh:
Select*
FromMahasiswa

Dalam perintah SELECT banyak sekali perintah/klausa/operator yang bisa


digunakanuntukmemanipulasidatadenganlebihrinci,diantaranyaadalahdistinct,
klausawhere,like,alias,orderby,groupby,having,operatorAND,OR,between...
AND,fungsiaggregate,danmasingbanyaklagiyanglainnya.

Tugas:
Daritopikpembuatanaplikasibasisdatayangtelahandabuat,buatlahmasing
masingperintahDMLberikut:
19
1. Sisipkanmin10barisdatadalammasingmasingtabel
2. Tambahkanmin2operasiupdatedandelete
3. BuatlahperintahSQLuntukmenampilkandatayangberasaldaridua
tabeldantigatabel.
4. BuatlahperintahSQLyangmenggunakanklausaOrderBy,GroupBy,
danHaving.
5. BuatlahperintahSQLyangmenggunakanoperatorANDdanOR.
6. BuatlahperintahSQLyangmenggunakanfungsiAgregate(masing
masing1).
7. BuatlahperintahSQLyangmenggunakanoperatorINdanBETWEEN...
AND.
8. BuatlahperintahSQLuntukmenampilkandatayangberasaldaridua
tabeldantigatabeldenganmenggunakanperintahJOIN.
9. BuatlahperintahSQLyangmenggunakanUNION,INTERSECT,dan
EXCEPT.
10. BuatlahperintahSQLyangmenggunakanoperatorcomparisonANYdan
ALL.

MODULIV
STOREDPROCEDUREDANTRANSAKSI

Tujuan:
1. Mampumemahamidanmembuatprocedureataufunctiondalambasisdata
2. Mampumenggunakanperintahperintahdalamstoredprocedure

20
TugasPendahuluan:
1. Apayangandaketahuitentangstoredprocedure!
2. Bagaimanacaramembuatprocedureataufunctiondalambasisdata!
3. Apakegunaanperintahdelimiterdalamstoredprocedured!jelaskandengan
contoh

1.

1.Teori
1.1.StoredProcedure

Storedproceduredanstoredfunctionmerupakanfasilitasbarudari
MySQLversi5.0.StoredproceduremerupakansekumpulanSQLyangdisimpan
kedalamserverMySQL.Keuntunganmenggunakanstoreprocedure,klien
MySQLtidakperlumenuliskanperintahSQLkeservernamunhanyaperlu
memanggilprocedureyangsudahdisimpandiserver(jikatersedia).Perbedaan
antaraproceduredanfunctionpadaMySQLhampirmiripdenganproceduredan
functionpadabahasapemrograman.Functionmengembalikansuatunilaiskalar
dandapatdipanggildidalamstatementprocedureataufunctionlain.Procedure
dipanggilmelaluiperintahCALLdandapatmengembalikannilaimelaluivariabel
output.

StoredProcedureadalahprosedur(sptsubprogramdalambhspemrograman)yang
disimpandidalamdatabase.
Mysqlmendukungduajenisrutin(subprogram):
Storedprocedureyangdapatdipanggil,

21
fungsiyangmenghasilkannilaiyangdapatdipakaidalamstatemenSQL
lain.

Statemenyangmenciptakanstoredprocedure
CREATEprocedureprocedure1/*nama*/
(INparameter1INTEGER)/*parameter*/
BEGIN/*awalblok*/
DECLAREvariable1CHAR(10);/*variabel*/
IFparameter1=17THEN/*awalIF*/
SETvariable1='burung';/*assignment*/
ELSE
SETvariable1='kelelawar';/*assignment*/
ENDIF;/*akhirIF*/
INSERTINTOtable1VALUES(variable1);/*statement*/
END/*akhirblok*/

Denganstoredprocedureeksekusimenjadicepat.Tidakadakompilasi.
Peningkatankecepatandatangdarireduksilalulintasjaringan.Jikaadapekerjaan
pengecekanberulang,looping,multiplestatement,dikerjakandenganpemanggilan
tunggalkeproseduryangtelahdisimpankeserver.
Stored procedure adalah komponen. Andaikan aplikasi kemudian ditulis dalam
bahasaberbeda,tidakadamasalah,karenalogikaberadadidalamdatabasebukan
dalamaplikasi.
StoredProcedureadalahportable.StoredprocedureditulisdalamSQL,Andabisa
jalankanpadasetiapplatformdimanaMysqldijalankandisitu.

CreateProceduredanCreateFunction
SebelummembuatprocedureataufunctionterlebihdahulupastikanbahwaAnda
sudahmasukkedalamsuatudatabase(usenama_database).Bentukumumdari
perintahcreateproceduredanfunctionadalah

Createprocedure
<nama_procedure>
(parameter)
<karakteristikprocedure>
<badanprogram>

Createfunction
22
<nama_procedure>
(parameter)
<karakteristikfunction>
<tipedatareturn>
<badanprogram>

Dimana:

Parameter=terdiridarijenisparameter[IN,OUT,atauINOUT],namaparameter
dantipedataparameter.
Karakteristik=terdiridaribahasaSQL,komentar,dsb.
Tipedata=tipedatayangdapatdireturnadalahsemuatipedatayangvaliddi
MySQL.
Program=semuasyntaxprocedureSQLyangvalid.

Jenisparameterada3yaitu:INberartivariabelparameterhanyaberfungsisebagai
masukan,OUTberartivariabelparameterberfungsisebagaitempatuntuk
menyimpannilaikeluarandariprocedure,danINOUTberartivariabelparameter
berfungsisebagaimasukandanpenyimpannilaikeluaranprocedure.
2.KegiatanPraktikum
1. Buatdatabasedengannamadbparkir,kemudianaktifkan

2. Buattabelkendaraandalamdatabasedbparkir
3. Tampilkanmsql>select*fromdbparkir;

4. Memilihdelimiter

23
Kemudian sebelum create procedure dijalankan terdapat perintah
delimiter.YaitumenggantikankarakterberhentiMySQLdari;menjadi|.
Hasilnya MySQL akan mengabaikan karakter ; dan menganggapnya
sebagaikarakterbiasa
5. Menciptakanstoredprocedure

p1=namaprosedur
()=daftarparameter
SELECT*FROMkendaraan;=bodiprosedur
6. Memanggilprocedurep1

7. Mengembalikandelimiterdanmemulainya

8. Menghapusdelimiter

9. Buatproceduresederhanayangmemilikifungsiuntukmenghitungjumlah
record pada tabel kendaraan. Kemudian jumlah kolom tersebut
dimasukkankedalamvariabelparam1.

24
10. panggilproceduredanlihathasilnya

selectcount(*)intoparam1fromt;

Kemudiansebelumcreateproceduredijalankanterdapatperintah
delimiter.YaitumenggantikankarakterberhentiMySQLdari;menjadi|.Hasilnya
MySQLakanmengabaikankarakter;danmenganggapnyasebagaikarakterbiasa.
Semisalperintahdelimiterinitidakada,makapadacontohbariske3dimana
terdapatkarakter;diakhirstatement.MySQLakanmenganggapbarisperintah
createprocedureberakhirdisitu.Endkebawahbukanbagiandaribadanprogram
procedure.Akibatnyaperintahcreateprocedurekitasalah.
Padabariske6,procedureyangtelahdibuatdipanggildenganfungsicall.
Janganlupauntukmemberikanparametersesuaidenganyangdibutuhkanoleh
proceduresimple.Padabaristerakhir,variabelparametertempatmenyimpan
keluarandariprocedureditampilkan.
Mengapavariabelparameteruntukprocedurediatasmemakaitambahankarakter
@?Halinisupayavariabelparameterbisadiberlakukanpadafungsiselect.Jika
variabelparametersemuadigantitanpa@,makaperintahselecta|tidak
menampilkanhasilapaapa.

3.TUGAS
25
1. Buatlahsebuahproseduredenganketentuan:
a. NamaProsedur:latihan1
b. Tanpaparameter
c. Isiprosedur:menampilkanisidaritabelactor(tabelharusada,
fieldsembarang)
d. Buatlahcarauntukmemanggilprosedurtersebut
2. Lihatisidariprocedurelatihan
3. Hapuslahprosedurlatihan
4. Penggunaanekspresi:
Buatlahsebuahproseduruntukmenampilkan:customer_id,rental_id,
amount,discount,total
daritabelpaymentdimana:
customer_idditampilkansebagaiKodePelanggan
Rental_idditampilkansebagaiKodeToko
AmountditampilkansebagaiJumlah
Discountdihitungdariamount*0.1
Totaldihitungdariamountdiscount

26
MODULV
STOREDPROCEDUREDANTRANSAKSI

Tujuan:
1. MampumemahamidanmembuatprocedureTransaksidalambasisdata
2. Mampumenggunakanperintahperintahdalamtransaksi

TugasPendahuluan:
1. Berikankesimpulanmengenaistoredprocedure
2. Apayangandaketahuitentangtransaksi!
3. Sebutkandanjelaskanperintahperintahdalamtransaksi!

27
1.DasarTeori
1.1.Parameterdalamstoredprocedure

1.Tanpaparameter
CREATEPROCEDUREp5()...

2.Satuparameterinput
CREATEPROCEDUREp5
([IN]namatipedata)...

3.Satuparameteroutput
CREATEPROCEDUREp5
(OUTnamatipedata)...

4.Satuparameteruntukinputdanoutput
CREATEPROCEDUREp5
(INOUTnamatipedata)...

1.2.ArtiTransaksi

Transaksi:serangkaiankelompokdarioperasimanipulasidatabaseyangdilakukan
seolaholahsebagaisatuunitkerjasecaraindividu.Jikasebuahoperasididalam
transaksigagaldijalankan,makakeseluruhantransaksijugaakangagaldijalankan.
4propertistandaryangdimilikidariTransaksipadaMySQL:
(ACID)
Atomicity:memastikanbahwaseluruhoperasidalamunitkerjadiselesaikan
denganbaik.Jikatidak,transaksiakandihentikanpadapoinkegagalandanoperasi
sebelumnyaakandibatalkansehinggakembalikekeadaansemula.

Consistency:memastikanbahwadatabasesecaratepatmengubahkeadaantransksi
yangberhasildijalankandengancommit

Isolation:memungkinkantransaksiuntukberoperasisecaraindependent

28
Durability:memastikanbahwahasilatauefekdaritransaksidapatbertahan
apabilasistemmengalamikegagalan

1.3.AutoCommit,StartTransaction,Commit,Roolback
Fasilitaspenanganankesalahan(errorhandling)biasadiperlukanuntuk
mengantisipasiterjadinyakesalahanpadasuatuprosestransaksi,sehingga
programmerbisamengaturskenariojikasuatuoperasigagalsebagianatau
seluruhnya.

SecaradefaultskenariodaritransaksiadalahAUTOCOMMIT.Artinyasemua
prosesyangberhasildilaksanakanakansecaraotomatissecarafisikdisimpan
dalamdatabase.JikadiinginkanmulaidariposisitertentuAUTOCOMMITtidak
berfungsi,dapatdigunakanperintahSTARTTRANSACTION.

SelanjutnyasesuatuperintahsesudahpernyataanSTARTTRANSACTIONakan
ditundauntukdisimpan,sampaibertemupernyataanCOMMITyangakan
menyimpanseluruhprosesyangtertundaataubertemupernyataanROLLBACK
yangakanmembatalkanseluruhprosesyangtertunda.

AkantetapiperludiingatadabeberapaperintahyangtidakdapatdiROLLBACK
karenamengandungfungsiCOMMITsecaraimplisit.
Perintahtersebutadalah:
ALTERTABLE
BEGIN
CREATEINDEX
CREATETABLE
CREATEDATABASE
DROPDATABASE
DROPINDEX
DROPTABLE
LOADMASTERDATA
LOCKTABLES
SETAUTOCOMMIT=1
STARTTRANSACTION
TRUNCATETABLE
UNLOCKTABLES

2.KegiatanPraktikum:
1. BuatTabelDibawahini:

29
2. CREATETABLEtabelmhs(
no_mhschar(4)DEFAULTNULL,
namachar(25)DEFAULTNULL,
alamatchar(25)DEFAULTNULL
)ENGINE=InnoDB;
3. Untukmembuattransaksipadamysqlgunakanengine=innoDBpada
pembuatan/createtabelnya
4. TransaksipenambahanrekamanmenggunakanSTARTTRANSACTION

5. Penambahandatatabelmhs

6. LihatHasilPenambahan

7. Mahasiswauntuksementarasudahdirekam
8. MambatalkanrekamandenganperintahROLLBACK;
Mysql>rollback;
9. Tampilkansemuadatatabelmhssetelahdiberikanperintahrollback
10. mysql>STARTTRANSACTION;
mysql>INSERTINTOmhsVALUES(0005,Untung
Raharja,'Bandung);
mysql>INSERTINTOmhsVALUES(0006,DiahAyu
Subekti,'Semarang)
mysql>COMMIT;
11. mysql>rollback;

30
12. lihathasilnyaapaperbedaanya?

13. Buatlah Stored Procedure : Suatutransaksi penjualan secara sederhana


misalnyamelibatkan2tabel,antaralaintabelbarangyangmenyimpanan
stokdanjenisbarang,dantabeljualmerekamtransakasipenjualan.Untuk
prosesmerekamantransaksipenjualanmenggunakan2storedprosedure,
yang pertama perekaman jual, dan kedua pemotongan stok pada tabel
barang.Adapunlangkahlangkahnyasebagaiberikut:

BuatlahstrukturtabelBARANGberikut:
CREATETABLEbarang(kd_brgCHAR(5),
nm_brgCHAR(20),
stokint,
satuanCHAR(20),
hargaint,
primarykey(kd_brg));

14. Tambahkanisirekamansebagaiberikut:
INSERTINTObarangVALUES('K0001','Buku',100,'Pcs',5000);
INSERTINTObarangVALUES('K0002','Pesil2B',200,'Pcs',3000);
INSERTINTObarangVALUES('K0003','Pengahpus',100,'Pcs',1000);
INSERTINTObarangVALUES('K0004','KertasHVS',200,'Rem',30000);
INSERTINTObarangVALUES('K0005','Guntingkecil',10,'Pcs',6000);

15. BuatlahstrukturtabelJUALsepetipadaperintahberikut:
CREATETABLEjual(no_notachar(4),
tgldate,
kd_brgCHAR(5),
jumlahint);

31
16. DELIMITER$$
17. KemudianbuatlahStoredProcedureSimpan_jual(),isikan
parameternyasepertipadaskriptberikut:
18. DROPPROCEDUREIFEXISTS`akademik`.`Simpan_jual`$$
CREATEPROCEDURE`akademik`.`Simpan_jual`(in_no_nota
char(4),
in_tgldate,
in_kd_brgCHAR(5),
in_jumlahint)
BEGIN
INSERTINTOjualVALUES(in_no_nota,in_tgl,in_kd_brg,in_jumlah);
CALLpotong_stok(in_kd_brg,in_jumlah);
END$$
DELIMITER;
19. Lakukaneksekusi
20. KemudianbuatlahStoredProcedurePotong_stok(),isikan
parameternyasepertipadaskriptberikut:
DELIMITER$$
DROPPROCEDUREIFEXISTS`akademik`.`potong_stok`$$
CREATEPROCEDURE`akademik`.`potong_stok`(in_kd_brg
char(5),in_jumlahint)
BEGIN
UPDATEbarangSETstok=stokin_jumlahWHEREkd_brg=in_kd_brg;
END$$
DELIMITER;
21. Lakukaneksekusi
22. JalankanStoredProcedureSimpan_jua
23. CALLSimpan_jual('0001',CURRENT_DATE,'K0001',2)
24. Hasilselecttablejualdanbarang

32
3.TUGAS
1. BuatKesimpulandaripraktikumdiatasmengenaiartitransaksimulai
autocommitsampaicommit,rollbacksertamengenaistoredprocedure
2. Buatprocedureuntukperhitungandari(a*b)+cdengannilaivariablea=9,
b=90,c=78
3. Buatstoredprocedureuntukkonversinilaiangkakenilaihurufdengan
kondisisebagaiberikut:
025 :D
2650 :C
5175 :B
76100:A
Nilaiangkaditentukandarisebuahvariablestatisdidalamstored
procedure.Gunakanpercabangandalammenentukankonversinilai.

33
MODULVI
TRIGGER

Tujuan:
Praktikandapatmemahamidanmembuat proceduredanfunctiondalam
database
Praktikandapatmemahamidanmembuattriggerdalamdatabase

TugasPendahuluan
Apayangandaketahuitentangprocedure?
Apayangandaketahuitentangfunction?
Apayangandaketahuitentangtrigger?
Bagaimanamembuattrigger?

DasarTeori

34
Trigger atau pemicu merupakan store procedures jenis khusus yang
menempel padasuatutabel tertentu dandieksekusi secaraotomatis saat terjadi
manipulasi data untuk tabel tersebut. Sebuah trigger dapat ditempelkan pada
operasi manipulasi insert, update dan delete. Dalam kata lain, jika kita
menempatkan trigger di sebuah tabel, maka setiap kali kita melakukan operasi
yang sudah didefinisikan triggernya, maka data yang akan dimanipulasi akan
melaluiprosesyangadadalamtriggertersebutterlebihdahulu.
Sebuah trigger akan dibutuhkan dalam suatu database yang tabeltabel
didalamnyamembutuhkanberbagaimacamaturanbisnisyanglebihrestricteddan
dinamis.Sehinggatidaksemuaorang(bahkanprogrammersekalipun)yangbisa
memanipulasidatasecaraserampangantanpamengetahuijalanceritadaritrigger
yangadadalamdatabasetersebut.
Dalampembuatantriggerharusdiperhitungkanberbagaihaldiantaranya
adalah:
Pembuatantriggertidakbolehbertentangandenganconstraint,primary
keydanforeignkeyyangadadalamsebuahtabel.
Pembuatantriggertidakbolehbertentangandenganreferentialintegrity
danrelasiantartabel.
Pembuatantriggerjugadiperhitungkandarisisikompleksitasagartidak
memperlambat proses manipulasi data, khususnya jika dalam sebuah tabel
yangdiperkirakanakandiaksesolehbanyakuserdalamsatuwaktu.
Jikadalamsuatutriggerterdapatkesalahanyangmenyebabkaneksekusi
suatumanipulasidataterhentiataudibatalkan,dianjurkanuntukmemberikan
pesankesalahankepadapenggunaagarpenggunamengetahuibahwaproses
yangdilakukantelahdibatalkan.

Praktikum
Berikut adalahdasardasartrigger,function,proceduresertaviewyang
bisa diimplementasikan pada MYSQL 5 keatas. Dengan menggunakan trigger,
function, procedure serta view, pemanfaatan MYSQL akan lebih bermanfaat.
Contohnya:kitabisamembuaturutanlangkahlangkahtertentusetelahsuatueven
dilakukan(ex:insert,update,delete).
Cobasemuacontohoperasidibawahini:
1. ProceduredanFunction
1.1 Procedure
SyntakuntukmembuatproceduredalamMySQLadalahsebagaiberikut.
CREATE
[DEFINER={user|CURRENT_USER}]
35
PROCEDUREsp_name([proc_parameter[,...]])
[characteristic...]routine_body

1.2 Function
SyntaksuntukmembuatfunctiondalamMySQLadalahsebagaiberikut.
CREATE
[DEFINER={user|CURRENT_USER}]
FUNCTIONsp_name([func_parameter[,...]])
RETURNStype
[characteristic...]routine_body

Keterangansyntaks:
1. proc_parameter(hanyapadaprocedure):
[IN|OUT|INOUT]param_nametype

INparameterdilewatkankedalamproceduretetapimodifikasinilaidari
parameterinitidakkelihatansetelahproceduretersebutdipanggil.
Out parameter merupakan parameter yang dilewatkan dari dalam
procedure ke pemanggil procedure tersebut. Nilai inisialisasi saat
memanggil adalah null dan hasil parameter akan kelihatan setelah
proceduredipanggil.
INOUTparameterdiinisilaisaiolehpemanggilprocedure,kemudianhasil
modifikasinya tersebut akan kelihatan setelah procedure tersebut
dipanggil.

2. characteristic
LANGUAGESQL
|[NOT]DETERMINISTIC
|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQL
DATA}
|SQLSECURITY{DEFINER|INVOKER}
|COMMENT'string'
3. routine_body:
ValidSQLprocedurestatement
Routinebodyberisisyntaxsyntaxsqlyangvalid,sepertiinsertatauselect.
Bisajugaberisicompound.Compountdiapitolehbeginend.Syntaxdari
compoundsystemadalahsebagaiberikut.
36
[begin_label:]BEGIN
[statement_list]
END[end_label]
Compoundinibisadiisidenganlabel.Beginlabeldanendlabelharussama.
Didalamcompoundjugabisaberisideklaraivariabel,loopingataukontrol
program lainnya. Setiap Function harus punya return value untuk
mengembalikannilaiyangdihasilkan

2. ContohProceduredanFunctionMySQL
Berikut adalah contoh penggunaan procedure. Pertama kita buat
terlebih dahulu database dengan nama adakara. Kemudian silakan buat table
berikutdenganisinya.Berikutiniadalahhasildumpingdaridatabaseadakara.
CREATETABLE`siswa`(
`NIS`varchar(20)collatelatin1_general_ciNOTNULL,
`Nama`varchar(30)collatelatin1_general_ciNOTNULL,
`Angkatan`varchar(9)collatelatin1_general_ciNOTNULL,
PRIMARYKEY(`NIS`)
)

INSERTINTO`siswa`VALUES('1024','resikaarthana','2005/2006'),
('1','cxfbsdjg','2005/2006'),('2','dshfk','2005/2006'),('3','dsfku','2005/2006'),
('11','Aridamayanti','2005/2006'),('12','wedana','2005/2006'),
('122','andika','2005/2006'),('123','masayu','2005/2006');

2.2Procedure
Berikutiniadalahprosespembuatanprocedure,dibuatdalamcommandfrom.
mysql>delimiter//
mysql>CREATEPROCEDUREjumlahSiswa(OUTparam1INT)
>BEGIN
>SELECTCOUNT(*)INTOparam1FROMsiswa;
>END;
>//
QueryOK,0rowsaffected(0.00sec)
mysql>delimiter;

2.2Function
Functionadalahsebuahproseduryangbisakitadefinisikandengan
perintahCREATE FUNCTION.Bahasayangdigunakanuntukmendefinisikan
functiondapatditentukanpadaparameterLANGUAGE.Duabuahfunctiondapat

37
memiliki nama yang sama tapi dengan parameter yang berbeda baik tipe data
maupun jumlahnya. Beberapa contoh function (builtin) dalam Posgres, dapat
dilihatdenganmengetikkanperintah\dfpadaconsoleposgres.
Contoh:
SELECTUPPER(otomatismenjadicapital);

SyntaxCreateFunction:
CREATE[ORREPLACE]FUNCTIONname([argtype[,...]])RETURNS
rettypeAS'definition'LANGUAGElangname[WITH(attribute[,...])]

Cobalahcontohsebuahfunctionsederhanaberikutini:
CREATEFUNCTIONtambah(int,int)RETURNSintASSELECT$1+$2
LANGUAGEsql;

SELECTtambah(10,12);
Untukmenghapussebuahfunction,gunakanperintahDROP.

Berikutiniadalahcontohprosespembuatanfunctiondimysql:
mysql>createfunctiontmbhSaudara(namachar(20))returnschar(5)
>returnconcat('Saudara',nama);
QueryOK,0rowsaffected(0.36sec)

3. PemanggilanProceduredanFunction
Pemanggilanproceduremenggunakansyntax
CALLprocedure_atau_function_name([parameter[,...]])
Keterangan:
procedure_atau_function_nameadalahnamaprocedureatafungsiyang
dipanggildanparameteradalahnamanamaparameterprocedureataufungsi
tersebut

3.1Procedure
Contohprocedure:
mysql>calljumlahSiswa(@a);
QueryOK,0rowsaffected(0.00sec)
mysql>select@a;
++
|@a|
++
|8|

38
++
1rowinset(0.00sec)

3.2Function
Contohfunction:
mysql>selecttmbhSaudara('resikaarthana');
++
|tmbhSaudara('resikaarthana')|
++
|Saudararesikaarthana|
++
1rowinset(0.00sec)

4. MenghapusProceduredanFunction
Untukmenghapusprocedureataufunctiondigunakanperintahsebagaiberikut
DROP{PROCEDURE|FUNCTION}[IFEXISTS]
procedure_or_function_name

5. Trigers
Triggerberfungsiuntukmenyisipkansuatufungsipadasaatsuatu
recorddiINSERT,UPDATE,atauDELETE.
Syntax:
CREATETRIGGERname{BEFORE|AFTER}{event[OR...]}ONtable
FOREACH{ROW|STATEMENT}EXECUTEPROCEDUREfunc(
arguments)
AtausyntaxUmumTriger
CREATE
[DEFINER={user|CURRENT_USER}]
TRIGGERtrigger_nametrigger_timetrigger_event
ONtbl_nameFOREACHROWtrigger_stmt
Keterangan:
DEFINERmenunjukkannamauseryangmempunyaihakaksesuntuk
mengaksestriger.
Triger_timemenunjukkansaattrigertersebutdijalankan.Terdiridari
BeforeatauAfter
Triger_timemenandakansaatkeadaanbagaimanatrigertersebutaktif.
Terdiridari
Insert:Trigeraktifsaatbarisbarudimasukkankedalamtabel

39
Update:Trigeraktifsaatadabarisdiperbaharuidimasukkandidalam
tabel
Delete:Trigeraktifsaatbarisdihapusdalamtabel
ContohTrigers:
CREATETABLEtest1(a1INT);
CREATETABLEtest2(a2INT);
CREATETABLEtest3(a3INTNOTNULLAUTO_INCREMENT
PRIMARYKEY);
CREATETABLEtest4(
a4INTNOTNULLAUTO_INCREMENTPRIMARYKEY,
b4INTDEFAULT0
);
DELIMITER|
CREATETRIGGERtestrefBEFOREINSERTONtest1
FOREACHROWBEGIN
INSERTINTOtest2SETa2=NEW.a1;
DELETEFROMtest3WHEREa3=NEW.a1;
UPDATEtest4SETb4=b4+1WHEREa4=NEW.a1;
END;
||
DELIMITER;
INSERTINTOtest3(a3)VALUES
(NULL),(NULL),(NULL),(NULL),(NULL),
(NULL),(NULL),(NULL),(NULL),(NULL);
INSERTINTOtest4(a4)VALUES
(0),(0),(0),(0),(0),(0),(0),(0),(0),(0);
Silakanmasukkannilaiketest1
mysql>INSERTINTOtest1VALUES
>(1),(3),(1),(7),(1),(8),(4),(4);
QueryOK,8rowsaffected(0.01sec)
Records:8Duplicates:0Warnings:0
Asaresult,thedatainthefourtableswillbeasfollows:
mysql>SELECT*FROMtest1;
++
|a1|
++
|1|
|3|
|1|

40
|7|
|1|
|8|
|4|
|4|
++
8rowsinset(0.00sec)
mysql>SELECT*FROMtest2;
++
|a2|
++
|1|
|3|
|1|
|7|
|1|
|8|
|4|
|4|
++
8rowsinset(0.00sec)

mysql>SELECT*FROMtest3;
++
|a3|
++
|2|
|5|
|6|
|9|
|10|
++
5rowsinset(0.00sec)

mysql>SELECT*FROMtest4;
+++
|a4|b4|
+++
|1|3|
|2|0|
41
|3|1|
|4|2|
|5|0|
|6|0|
|7|1|
|8|1|
|9|0|
|10|0|
+++
10rowsinset(0.00sec)

Tugas:
1. Buatlahfungsibaruyangberfungsiuntukmengubahsemuadatanama
yangakandiINSERTketabelpegawai(buatjugatabelpegawaidengan
duakolomsaja,yaituid,dannama)menjadicapitalsemua.
2. Buatlahtriggeruntukmemanggilfungsiyangtelahdibuatdiatas.
3. INSERTkanketabelpegawaidataberikut:id=1012dannama=owo.
4. SELECTdaritabelpegawai.

MODULVII
EVALUASIBASISDATA

42
Tujuan:
Pesertamemhamitentangnormalisasi,storedprocedure,trigger,transaksi

TugasEvaluasi:
1. TentukanTopik(setiapmahasiswaberbedatopic)
2. BuatdesaintableMinimal5tabelsalingterelasi
3. BuatnormalisasidalambentukCDMdanPDM
4. BuatTransaksi:penggunaanautocommit,starttransaction,operasidml,
commit,rollback
5. BuatProceduredaritableanda
6. BuatTriggerdaritableanda

AtauTugasproyekbisaditentukandosenPengampu.

43
MODULVIII
FUNCTIONDANTRIGGER

Tujuan:
Mampu membuat function dalam pengelolahan database dan memahami macam
macamtipetriggersertamembuatdatabasetrigger.

PrePraktikum
1.Apakahyangandaketahuitentangfunction?
2. Apakahyangandaketahuitentangtrigger?
3. Sebutkanmacammacamtipetrigger?
4. Triggerdapatdibuatsesuai dengankeperluan.Kapantriggerperludibuat
dankapantriggertidakperludibuat?
5. Sebutkantigamacamtriggertimingdantriggerevent?

DasarTeori
1 Function

44
FunctionadalahsuatublokPL/SQLyangmemilikikonsepsamadengan
procedure,hanyasajapadafunctionterdapatpengembaliannilai(returnvalue).
Karena function dapat mengembalikan sebuah nilai, function dapat diakses
sepertilayaknyasebuahvariabelbiasa.
Pembuatan function sangat berguna dalam proses pengelolahan
database. Dengan sekali membuat function, anda dapat menggunakannya
untukkeperluanyangsamapadablokblokPL/SQLlainnya,procedureatau
bahkan dalam function lainnya. Hal ini sama dengan konsep pembuatan
procedure yang tentunya dapat meringankan pekerjaan karena tidak perlu
mengulang statemenstatemen yang sama pada setiap blok PL/SQL yang
dibuat.Sintaxumumuntukmembuatsebuahfunctionadalahsebagaiberikut:
CREATEFUNCTIONnama_function([func_parameter[,...]])
RETURNStype_data
[characteristic...]routine_body

2 Trigger
TriggeradalahprosedurtersimpanpadaMicrosoftSQLServeryang
secara otomatis dijalankan apabila data di dalam tabel berubah karena
eksekusi perintah SQL (INSERT, UPDATE atau DELETE). Salah satu
penggunaannyayangpalingumumadalahuntukmenerapkanpembatasanyang
lebihkompleksdariyangtelahdiizinkanmelaluipembatasanCHECK,yang
berfungsimembatasiinformasiyangdisisipkankedalamkolom.
Trigger bisa dibuat bersama dengan perintah INSERT, yang akan
melakukanqueryketabellaindanmengembalikannilailogikyangmembantu
membatasi data yang diberikan kepada kolom tertentu. Sebagai contoh:
Triggerbisadibuatuntukmenjalankanreplikasi,misalnyaapabilaadasebuah
baris disisipkan ke dalam database Z, sebuah baris dengan informasi yang
sama akan ditambahkan ke dalam database Y. Atau Apabila sebuah baris
dihapus dari sebuah tabel, Trigger akan menghapus baris lain yang
berhubungan dengan baris tersebut pada tabel lain. Trigger dibuat sebagai
sebuahtransaksidanbisadimundurkanapabilaadamasalahyangdideteksi.
Syntaxtrigger:
CREATE
[DEFINER={user|CURRENT_USER}]
TRIGGERtrigger_nametrigger_timetrigger_event
ONtbl_nameFOREACHROWtrigger_stmt

45
4. KegiatanPraktikum
1. SettingINODBpadaMySQLkitajaditerlebihdahulusilakanaktifkan
INODB pada MySQL, Setelah aktif barulah kita bisa menggunkan
fasilitastriggerpadaMySQL.Oklangsungpadatujuanmarikitamulai
proyekkita,pertama tamakitaakanmembuat 2buah tabel untuk
percobaankita:

2. TriggerdapatbekerjaBEFOREatauAFTERsebuahtabelmengalami
tigakejadian[Insert,Edit,delete].:

46
47
3. Amatilahprosesdarikegiatan1dan,kemudianapayangterjadi?
4. Tugastambahan(ditentukanolehasistenpraktikum)!

5. TugasAkhir
1. Buatlah function dengan nama fungsi test.hello dengan tipe data char
dengankapasitas20danmenggabungkanhello,sdan!.
2. Buatterlebihdahulutabelbarang,tabeldetailpembeliansesuaidengan
strukturyangtelahditetapkansertatriggeruntukkasuspenjualan.Tabel
identikdengantablepenjualan
3. Buatlahsebuahfungsiyangdigunakanuntukmendapatkanvolumesebuah
balok.Ujilahfungsiyangandabuat!
48
4. Buatlahtriggeruntukkasusfakturpenjualan,jikakuantitas(jumlahitems)
yangdimasukkanlebihdari5itemsmakadiskonnyasebesar10persen,
danjikakurangdari5makaakandisikandengannilai0.
5. Buatlah beberapa trigger untuk event pada tabel detailpembelian baik
untukdelete,insertmaupunupdate.

49
MODULIX
CURSORI

Tujuan:
PraktikandapatmemanggilsintaksSQLdenganmenggunakancursor

TugasPendahuluan
1. Apayangandaketahuitentangcursor?Jelaskan!

DasarTeori

Cursormerupakanpointeryangmenunjukankesuatubagianmemoriuntuk
menyimpanhasilperintahSQLsepertiSelect,Insert,UpdatedanDelete.
PemakaiancursorpadaSQLServermendukungstrukturpengulangan(loop)
diantararesultset,membacasetiapbarisdatasatupersatu.

Praktikum:

Beberapatahapanyangharusdilakukandalammemakaicursoranataralain:

1. DeklarasiCursor
Sebelummenggunakancursorpertamatamayangharusdilakukanadalah
mendeklarasikannamacursordanvariabelyangdigunakan.
DECLAREcursor_nameCURSORFORselect_statement

50
2. OpenCursor
Untukmenggunakancursordanfetchdata,andaharusmengaktifkancursor
sesuaidengannamayangtelahdideklarasikansebelumnya.
OPENcursor_name

3. Membacabarisdatadaricursor
Setelahcursordiaktifkan,SQLServerakanmembacabarisdatasecara
berulangulang(loop)daribarisdatadarisuatutabel.

4. MenutupCursor
Menutupcursordilakukanjikainginmenguncidatasetelahtidakdigunakan
CLOSEcursor_name

5. Dealokasicursor
Dealokasicursorbertujuanuntukmembuangataumenghapuscursordari
memorijikasudahtidakdigunakanlagi

Syntax
DECLARE nama_cursor [INSENSITIVE][SCROOL] CURSOR FOR select_statement
Declare
[FOR {READ ONLY|UPDATE [OF nama_kolom [,.n]]}]
OPEN nama_cursor
CLOSE nama_cursor
DEALLOCATE nama_cursor

51
Contoh :
DECLARE Cursor_Barang CURSOR
FOR
Select Kode, Nama From BARANG
Declare
@Kode Char(5),
@Nama Varchar(30)
OPEN Cursor_Barang
FETCH NEXT From Cursor_Barang
Into @Kode, @Nama
CLOSE Cursor-Barang
DEALLOCATE Cursor_Barang

Tugas:

Buatimplementasidari:
Copysalahsatutabeldaridatabaseyangandabuat(hasilmodulView)ke
sebuahtabelbaru

52
53
MODULX
CURSORII

Tujuan:
PraktikandapatmemanggilsintaksSQLdenganmenggunakancursor

TugasPendahuluan
1. ApayangandaketahuitentangfungsiCount(Max,Min,Avarage)
dengancursor.Bericontohscriptnya.

DasarTeori

Suatuqueryyangdibuatuntukmenyamakanbeberaparecordtidakharus
mempunyaiclauseinto.Jikasuatuquerydiharapkanmengembalikanbeberapa
record,makacursorharusdipakaisebagaipenggantinya.Cursordapatdigunakan
untukmenegaskansaturecordpadasuatuwaktu.Dengancursor,tiaptiaprecord
dapatdikembalikanolehqueryolehindividualpadasuatuwaktu.

Berikutcontohperintahselectuntukmenemukanrecorddalambasisdata.

Select*fromstate

Perintahiniakangagaldijalankanmeskiprogramtelahbenarkarenaqueryakan
memilihsemuanamadalamtabel.Queryakanmenemukan50tupledalamstate
basisdata.
databasestore
main
select*fromstate
endmain

Programiniakandikompiledandijalankan.Programtersebutakanberhentidan
menampilkanpesan.
54
asubqueryhasreturnnotexactlyonevalue

Halinidisebabkanperintahselectmenemukanlebihdarisaturecord.

Masalahinidapatdiselesaikandengancursor,karenacursordideklarasikanuntuk
mengoperasikan perintah select. Perintah select digabungkan dengan cursor.
Perintahselectdapatmenyamakansuatukelompokrecorddalambasisdata.Cursor
kemudiandapatdigunakanuntukmenegaskanmasingmasingpilihanrecord.
Berikutcontohpenggabunganperintahselectdancursor.

declarec_statecursorfor
select*fromstate

Perintah tersebut membuat cursordengannamac_state.Cursordapat memilih


masingmasingrecordyangdikembalikanolehperintahselect*fromstate.

Tugas:
1. Tambahkandatakedalamrelasidenganperintahinsert
2. Rubahlahsalahsatudatapadarecorddatabaseanda
3. Implementasikantugaspendahuluanyangsudahandakerjakan.

55
MODULXI
PENGEMBANGANAPLIKASIBASISDATA

Tujuan:
MemahamilangkahlangkahkoneksiPHPdenganMySQL.
Memahamiperbedaanpengambilanrecorddaridatabase.

TugasPendahuluan
JelaskanmengenaiPHP!
Apabedanyawebserverdanwebbrowser?
Sebutkanlangkahmengkoneksikanantaraphpdandatabasemysql?

56
TEORI

1.1. PHP

PHPadalahsalahsatubahasapemrogramaninternetyangmendukung
penggunaandatabasesepertiMySQL,PostgreSQL,mSQL,Oracle,danlainlain.
UntukdapatmenjalankanPHPmelaluibrowser,makaandadiharuskanterlebih
dahulumenginstallwebserver(misalnyaApache,PWS,IIS)lalumenginstall
PHP,sedangkanuntukmenjalankanMySQLandatidakperlumenginstallweb
server,hanyasajajikaingindijalankanmelaluibrowser,makaandaharus
menginstallwebserver.PHPsebagaialternatiflainmemberikansoulsisangat
murah(karenagratisdigunakan)dandapatberjalandiberbagaijenisplatform.
PHP(atauresminyaPHP:HypertextPreprosessor)adalahskripbersifat
serversideyangditambahkankedalamHTML.PHPsendirimerupakansingkatan
dariPersonalHomePageTools.Skripiniakanmembuatsuatuaplikasidapat
diintegrasikankedalamHTMLsehinggasuatuhalamanwebtidaklagibersifat
statis,namunmenjadibersifatdinamis.Sifatserversideberartipengerjaanskrip
dilakukandiserver,barukemudianhasilnyadikirmkankebrowser.
CaraPenulisanskripPHPadaduamacam,yaituEmbeddedScriptdanNon
EmbeddedScript.ContohdarijenisskripPHPditunjukkandalamgambarberikut:

GambarSkripdalamPHP:(a)EmbeddedScript,(b)NonEmbeddedScript

57
GambardiatasmenjelaskanbahwaskripPHPdapatberupaembeddedscriptyaitu
meletakkantagPHPdiantaratagtagHTMLsedangkannonembeddedscriptyaitu
semuatagHTMLdiletakkandalamtagPHP.SemuaKodePHPmenyerupaidengan
kodebahasaC,walaupuntidaksepenuhnyasama.
UntukpenulisantagPHPterdiridariempatstyle,yaituStyleStandartFormat,
denganformat:<?php.?>,ShortStyledenganformat:<?.?>,Javascript
Styledenganformat:<scriptlanguage=php>.</script>danASPstyledengan
format:<%.%>.

1.2. Langkah-langkah koneksi PHP-MySQL

1.MembukakoneksikeserverMySQL
mysql_connect()
DigunakanuntukmelakukanujidankoneksikepadaserverdatabaseMySQL.

Sintaks:

$conn=mysql_connect(host,username,password);

$conn adalahnamavariabelpenampungstatushasilkoneksikepada
database.
host adalahnamahostataualamatserverdatabaseMySQL.
username adalahnamauseryangtelahdiberihakuntukdapatmengakses
server
database.
password adalahkatasandiuntukusernameuntukdapatmasukkedalam
database.

2.Memilihdatabaseyangakandigunakandiserver
mysql_select_db()
Digunakanuntukmelakukankoneksikepadadatabaseyangdalamserveryang
berhasildikoneksidenganperintahmysql_connect().

Sintaks:

58
$pilih=mysql_select_db(namadatabase,$conn);

$pilih berisistatuskoneksikepadadatabase.
$conn merupakankoneksikepadaserverdatabaseyangberhasil.
namadatabase adalahnamadatabaseyangakandikenaiproses.

3.Mengambilsebuahquerydarisebuahdatabase.
mysql_query()
DigunakanuntukmelakukaneksekusiperintahSQLuntukmemanipulasidatabase
yangberhasildilakukankoneksinyamenggunakanmysql_select_db().

Sintaks:

$hasil=mysql_query(SQLStatement);

$hasil akanberuparecordsetapabilaSQLStatementberupaperintah
select.

4.Mengambilrecorddaridatabase
a.mysql_fetch_array()
Digunakanuntukmelakukanpemrosesanhasilqueryyangdilakukandengan
perintahmysql_query(),danmemasukkannyakedalamarrayasosiatif,array
numerisataukeduanya.

Sintaks:

$row=mysql_fetch_array($hasil);

$row adalaharraysaturecorddarirecord$hasilyangdiprosesnomorrecord
sesuaidengannomorurutdariprosesmysql_fetch_arrayyangsedangdilakukan.
$hasil adalahrecordsetyangakandiproses.

b.mysql_fetch_assoc()

59
Fungsiinihampirsamadenganfungsimysql_fetch_array(),hanyasajaarrayyang
dihasilkanhanyaarrayasosiatif.

Sintaks:

$row=mysql_fetch_assoc($hasil);

c.mysql_fetch_row()
Fungsiinihampirsamadenganfungsimysql_fetch_array(),hanyasajaarrayyang
dihasilkanhanyaarraynumeris.
Sintaks:

$row=mysql_fetch_row($hasil);

d.mysql_num_rows()
Fungsiinidigunakanuntukmenghitungjumlahrecordyangadapadadatabase.

Sintaks:

$jml=mysql_num_rows($hasil);

60
$jml akanmemilikinilaisesuaidenganjumlahrecordyangada.

2.KegiatanPraktikum:

1.MengujiinterkoneksiPHPdenganMySQL.

<html>
<head>
<title>Koneksi Database MySQL</title>
</head>
<body>
<h1>Demo koneksi database MySQL</h1>
<?
$conn=mysql_connect ("localhost","root","");
if ($conn) {
echo "OK";
} else {
echo "Server not connected";
}
?>
</body>
</html>

61
2.Melihatperbedaanantaramysql_fetch_array(),mysql_fetch_assoc(),
mysql_fetch_row().

a.Buatlahtabelligaberikutini,dengan3field:kode,negara,champion.
Create table liga (
kode char(3) not null,
negara char(15),
champion int
);

b.Isilahtabeldengandataberikutini:
Insert into liga (kode, negara, champion)
values (jer,Jerman,4);
Insert into liga (kode, negara, champion)
values (spa,Spanyol,4);
Insert into liga (kode, negara, champion)
values (ing,Inggris,3);
Insert into liga (kode, negara, champion)
values (bel,Belanda,3);

c.Aksesdatabasesmenggunakanmysql_fetch_array()
62
<HTML>
<HEAD>
<title>Koneksi Database MySQL</title>
</HEAD>
<BODY>
<h1>Koneksi database dengan mysql_fetch_array</h1>
<?
$conn=mysql_connect ("localhost","root","")
or die ("koneksi gagal");
mysql_select_db("faruq",$conn);
$hasil = mysql_query("select * from liga",$conn);
while ($row=mysql_fetch_array($hasil)) {
echo "Liga " .$row["negara"]; //array asosiatif
echo " mempunyai " .$row[2]; //array numeris
echo " wakil di liga champion <br>";
}
?>
</BODY>
</HTML>

d.Aksesdatabasesmenggunakanmysql_fetch_assoc()

63
<HTML>
<HEAD>
<title>Koneksi Database MySQL</title>
</HEAD>
<BODY>
<h1>Koneksi database dengan mysql_fetch_assoc</h1>
<?
$conn=mysql_connect ("localhost","root","")
or die ("koneksi gagal");
mysql_select_db("faruq",$conn);
$hasil = mysql_query("select * from liga",$conn);
while ($row=mysql_fetch_array($hasil)) {
echo "Liga " .$row["negara"];
echo " mempunyai " .$row[champion];
echo " wakil di liga champion <br>";
}
?>
</BODY>
</HTML>

e.Aksesdatabasesmenggunakanmysql_fetch_row()

64
<HTML>
<HEAD>
<title>Koneksi Database MySQL</title>
</HEAD>
<BODY>
<h1>Koneksi database dengan mysql_fetch_assoc</h1>
<?
$conn=mysql_connect ("localhost","root","")
or die ("koneksi gagal");
mysql_select_db("faruq",$conn);
$hasil = mysql_query("select * from liga",$conn);
while ($row=mysql_fetch_row($hasil)) {
echo "Liga " .$row[1];
echo " mempunyai " .$row[2];
echo " wakil di liga champion <br>";
}
?>
</BODY>
</HTML>

3.MembuatBukuTamu
65
a.Buatlahtabelbukutamuyangmemiliki3field:nama,email,komentar.
Create table bukutamu (
nama char(20) not null,
email char(20),
komentar char (40)
);

b.Buatformuntukbukutamu,berinamabukutamu.htm
<HTML>
<HEAD>
<title>Buku Tamu</title>
</HEAD>
<BODY>
<h1>Buku Tamu untuk database MySQL</h1>
<form action="bukutamu_add_form.php" method="post">
Nama : <input type="text" name="nama" size="35" maxlength="50"> <br>
Email : <input type="text" name="email" size="35" maxlength="50"> <br>
Komentar : <textarea name="komentar" rows="5" cols="30"></textarea> <br>
<input type="submit" value="Simpan">
<input type="reset" value="Reset">
</form>
</BODY>
</HTML>

66
c.Buatfilebukutamu_add_form.phpuntukmemprosesdatadaribukutamu.htm
danmenambahkandataketabelbukutamu.

67
<HTML>
<HEAD>
<title>Simpan Buku Tamu</title>
</HEAD>
<BODY>
<h1>Simpan Buku Tamu MySQL</h1>
<?
$nama = $_POST["nama"];
$email = $_POST["email"];
$komentar = $_POST["komentar"];
$conn=mysql_connect ("localhost","root","")
or die ("koneksi gagal");
mysql_select_db("faruq",$conn);
echo "Nama : $nama <br>";
echo "Email : $email <br>";
echo "Komentar : $komentar <br>";
$sqlstr="insert into bukutamu (nama,email,komentar)
values ('$nama','$email','$komentar')";
$hasil = mysql_query($sqlstr,$conn);
echo "Simpan bukutamu berhasil dilakukan";
?>
</BODY>
</HTML>

68
d.Buatfileview.phpuntukmenampilkanisibukutamu.
<?
$conn = mysql_connect("localhost","root","");
mysql_select_db("faruq",$conn);
$hasil = mysql_query("select * from bukutamu",$conn);
$jumlah = mysql_num_rows($hasil);
echo "<center>Daftar Pengunjung</center>";
echo "Jumlah pengunjung : $jumlah";
$a=1;
while($baris = mysql_fetch_array($hasil))
{
echo "<br>";
echo $a;
echo "<br>";
echo "Nama : ";
echo $baris[0];
echo "<br>";
echo "Email : ";
echo $baris[1];
echo "<br>";
echo "Komentar : ";
echo $baris[2];
$a++;
}
?>

69
4.Membuatprogramsearchingdatabasedenganmenggunakantabelno3a
a.Buatfilesearch.htm
<HTML>
<HEAD>
<title>Cari Database</title>
</HEAD>
<BODY>
<h1>Searching Buku Tamu untuk database MySQL</h1>
<form action="hasilsearch.php" method="post">
<select name="kolom">
<option value="nama">nama</option>
<option value="email">email</option>
</select>
Masukkan kata yang anda cari
<input type ="text" type ="text" name="cari">
<input type ="submit" value="cari" >
</form>
</BODY>
</HTML>

70
b.Buatfilehasilsearch.phpuntukmenampilkandata
<?
$kolom=$_POST['kolom'];
$cari=$_POST['cari'];
$conn=mysql_connect("localhost","root","");
mysql_select_db("faruq", $conn);
$hasil=mysql_query("select * from bukutamu where $kolom like '%$cari%'", $conn);
$jumlah=mysql_num_rows($hasil);
echo "<br>";
echo "Ditemukan: $jumlah";
echo "<br>";
while($baris=mysql_fetch_array($hasil))
{
echo "Nama : ";
echo $baris[0];
echo "<br>";
echo "Email : ";
echo $baris[1];
echo "<br>";
echo "Komentar :";
echo $baris[2];
}
?>

71
3.TUGAS:
1.BuatKesimpulandaripraktikumdiatas.

2.Modifikasilahprogramdiatas,sehinggaandamemiliki3tombolyaitu,
Bukutamuuntukinputandata,Tampilanuntukmenampilkandatabasebukutamu
dalambentuktabel,Searchuntukmelakukansearchingdatabasebukutamudalam
bentuktabel.

72
MODULXII
PROJECTTUGASAKHIR

Tujuan:
Peserta dapat mengimplementasikan semua modul dalam suatu proyek
untukmengkoneksikandatabasedenganprogramaplikasi

TugasProyek:
1. TentukanTopikProject(setiapmahasiswaberbedatopic)
2. BuatdesaintableMinimal5tabelsalingterelasi
3. BuatnormalisasidalambentukCDMdanPDM
4. KoneksikantabledenganprogramaplikasiberbasisWEB
5. Buatdesainyangsesuai.
73
AtauTugasproyekbisaditentukandosenPengampu.

74