basis data mysql
TRANSCRIPT
-
BASIS DATA 2
MODULIENTITYRELATIONSHIPMODEL(ERMODEL)
1
D3 Manajemen InformatikaFakultas TeknikUniversitas Trunojoyo
Tujuan:MampumemahamikonsepdatamodeldaribasisdatadanmerancangskemabasisdatadalamERmodeldandipresentasikandalambentukgambar(ERDiagram).
TugasPendahuluan:1. ApakahyangandaketahuitentangERModel?2. ERModeldigunakandalamfasedesainbasisdatakonseptual,sebutkandan
jelaskan6tahapprosesdesainbasisdatatersebut?3. SebutkandanjelaskandarielemenelemendasarpadaERModel?4. Sebutkan dan jelaskan macammacam batasan integritas (integrity
constraints)dalamERDiagram?
MODUL PRAKTIKUM
-
1. DasarTeoriTinjauanDesainBasisData
PadaERmodel, gambarandunianyatadiistilahkandalamobjekdanrelasinya. ER model biasa digunakan untuk mengembangkan inisial daridesainbasisdata.ERmodelmenyediakansuatukonsepyangbermanfaatyangdapat mengubah deskripsi informal dari apa yang diinginkan oleh usermenjadi hal yang lebih detail, presisi dan deskripsi detail tersebut dapatdiimplementasikankedalamDBMS.
Padakonteksyanglebihluas,ERmodeldigunakandalamfasedesainbasisdatakonseptual.Berikutiniprosesdesainbasisdatayangdapatdibagidalam6tahapERmodelbiasanyadigunakanpadatigatahappertamadariprosesdesaindibawahini:1. AnalisaKebutuhan
Pertamakaliyangharusdipahamiadalahkebutuhanuserterhadapbasisdata.Prosespadatahapinibiasanyaberlangsungsecarainformalmeliputidiskusi dengan kelompok user, melakukan studi terhadap lingkunganoperasi dan kemungkinan perubahan yang dilakukan, analisa terhadapdokumentasi dari aplikasi yang sudah ada yang dimaksudkan untukdiganti atau disempurnakan oleh basis data. Beberapa metodologidiusulkandanalatbantu(tools)dikembangkanuntukmendukungprosesini.
2. DesainKonseptualBasisdataInformasi dikumpulkan pada bagian analisis kebutuhan dan digunakanuntukmengembangkandeskripsitingkattinggidaridatayangdisimpandalambasisdata, dengancosntraints yangdigunakanuntukmenanganidatadataini.PadatahapinidigunakanERmodel.
3. DesainlogikaBasisdataPadatahapinimengubahdesainkonseptualbasisdatakedalamskemabasisdatadalammodeldatayangdipiliholehDBMS.Dalamhaliniyang
2
-
dipilihadalahDBMSRelasional.Hasilnyaberupaskemakonseptualyangdisebutjugadenganskemalogika.
4. SkemaPerbaikanPada tahap ini, himpunan relasi dalam skema basis data relasionaldianalisauntukmengidentifikasipersoalanyangakanmuncul,kemudianmemperbaikinya. Dalam hal ini dilakukan normalisasi, denganrestrukturisasi ulang untuk memastikan beberapa properti yangdikehendaki.
5. DesainFisikBasisdataPada tahap ini, ditentukan workload (masukan) yang harus disupport,memperbaikidesainberbasisdatauntukmemastikankriteriaperformanceyang diinginkan sudah tercapai. Tahap ini melibatkan indeks padabeberapa tabel dan pengelompokan (clustering) beberapa tabel, ataumelibatkanpuladesainulangbagianskemabasisdatayangdidapatkandaritahapdesainawal..
6. DesainKeamananPada tahap ini, didentifikasi kumpulan user yang berbeda denganperanannyamasingmasing(misalnyatimpengembanganproduk,bagiancustomer, manajer produk, dll). Untuk tiapperandansekelompokuserharusdiidentifikasibagianmanadaridatabaseyangdapatmerekaaksesdanbagianmanayangtidakbolehdiakses.
Entiti,AtributdanHimpunanEntiti
Entityadalahobyekdunianyatayangdapatdibedakandariobyekyanglain.Entitydigambarkan(dalambasisdata)denganmenggunakanhimpunanatribut. Himpunan entiti yang sejenis disimpan dalam himpunan entiti.Himpunanentitiadalahkumpulanentityyangsejenis.
Gambar1.2EntitiPegawai(Employee)
RelasidanHimpunanRelasi
3
-
Relasi adalah asosiasi diantara dua atau lebih entity. Misalnya anibekerjadidepartemenfarmasi.Sedangkanhimpunanrelasiadalahhimpunanrelasi yang sejenis. Himpunan relasi nary R berelasi dengan sejumlahhimpunan entity n E1 .... En sehingga himpunan entity yang sama daparberpartisipasi dalamhimpunanrelasi yangberbeda.Ataumempunyaiperanyangberbedadalamsuatuhimpunanyangsama.
Gambar1.3.RelasidanEntity
FiturTambahanuntukERModel1.4.1BatasanKunci(KeyConstraints)
Padamodel databaserelasional, kaitannyaatauasosiasi antaraduabuahtabledisebuthubungan(relationship).Hubungandapatberupa:
1to1,yaknisatudatapadasuatutabelberpasangandenganhanya satu data pada tabel lain. Contoh : seorang mahasiswa hanyadimungkinkanmempunyaisebuahno_regdansatuno_reghanyadapatditugaskanpadasatuorangmahasiswasaja. 1 to many, yakni satu data pada suatu tabel berpasangandenganbanyakdatapadatabellain.Contoh:Seorangmahasiswadapatmengambillebihdarisatumatakuliah. Manyto1,yaknibanyakdatapadasuatutabelberpasangandengansuatudatapadatabellain. Many to Many, yakni banyak data pada suatu tabelberpasangandenganbanyakdatapadatabellain.Contoh:seorangdosendapat mengajar banyak mahasiswa dan sebaliknya seorang mahasiswajugadapatdiajarlebihdarisatudosen.
4
-
Gambar1.4ContohKeyConstraintantarEntity
1.4.2BatasanPartisipasi(ParticipationConstraints)Apakahsetiapdepartemenmempunyaiseorangmanajer?Jika semua departemen pasti mempunyai manager maka partisipasiDepartements dalam manages dapat dikatakan total. Sebaliknya jika tidaksemuadepartemenmemilikimanagermakapartisipasinyaadalahpartial.
Gambar1.5ContohParticipationConstraint
2. KegiatanPraktikum1. Buatkanrancanganentitydanrelasitiaptabeldarisistemperpustakaanberikut
ini:
5
-
Gambar1.6skemarelasidatabaseuntuksistemperpustakaan2. Tugastambahan(ditentukanolehasistenpraktikum)!
3. TugasAkhirDarikasusIpadakegiatanpraktikummakabagaimanadesainbatasankuncinya?
I. Relasipublished_by:a1:toa2:
II. Relasibook_copies:b1:tob2:
III. Relasibook_loan:d1:toc:c:tod2:
6
-
MODULIIDATADEFINITIONLANGUAGE(DDL)
7
Tujuan:Mampumemahamiperintahperintahuntukmenjelaskanobjekdaridatabasedanmendefinisikan atributatribut database, tabel dan batasanbatasan terhadapsuatuatributsertahubunganantartabel.
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?
-
1. DasarTeori1.1 StatementDataDefinitionLanguange
DDL adalah perintahperintah yang digunakan untuk menjelaskanobjek dari database. Dengankata lain DDLmerupakan kelompokperintahyang berfungsi untuk mendefinisikan atributatribut database, tabel,atribut(kolom), batasanbatasan terhadapsuatuatribut serta hubunganantartabel.YangtermasukkelompokDDLiniadalah: CREATE:untukmembuatdatabase,tabel,viewdanindex ALTER:untukmengubahstrukturtabel DROP:untukmenghapusdatabase,tabel,viewdanindex
1.2 Database,Tabel,IndexdanView1.2.1Database
Database adalah sekumpulan data/informasi yang diorganisasikandengan beberapa cara logika, saling berhubungan dan digunakan untukkeperluantertentu.Sintaksuntukmembuatdatabaseadalah:
CREATEDATABASEnama_db;
sedangkansintaksuntukmenghapusdatabaseadalah:
DROPDATABASEnama_db;
1.2.2TabelTabeladalahekuivalensidarisebuahentitasdalamsebuahERmodel.
Sebuahtabelterdiridaribeberapakolomyangdisebutdenganfielddansebuahfieldterdiridaribeberapabaris(record).Sedangkanfieldadalahekuivalensidari atribut sebuah entitas dalam sebuah ER model. Dapat juga dianggapsebagaibentukpengelompokandatapadasebuahtabel.Recordadalahsatuandataatomik(terkecil)yangadadalamsebuahtabel.Sebuahrecordterbentukdari beberapa informasi/data dari beberapa field. Contoh : 05621045,Anamisa,Jl.PinangNo.75adalahsebuahrecordyangtersimpandalamfieldtabelmahasiswa.
Untukmembuatsebuahrelationshipdiperlukanfieldfieldyangsalingberpadanan. 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][,.]);
ConstraintNOTNULLSuatu kolom yang didefinisikan dengan constraint NOT NULL tidakboleh berisi nilai NULL. Kolomyang berfungsi sebagai kunci primer(primarykey)otomatistidakbolehNULL.SyntaksuntukconstraintNOTNULLadalah:
CREATETABELnama_tabel(nama_kolomtipe_data,.........CONTRAINTnama_kolom_constraintNOTNULL);
ConstraintUNIQUEMendefinisikan suatu kolom menjadi bersifat unik. Sintaks untukconstraintUNIQUEadalah:
CREATETABELnama_tabel(nama_kolomtipe_data,.........CONTRAINTtable_constraintUNIQUE(nama_kolom_constraint));
ConstraintPRIMARYKEYMembentukkeyyangunikuntuksuatutabel.Kolomyangdidefinisikansebagaiprimarykeyakanmengidentifikasisuatubarisdatamenjadiunik.
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));
ConstraintFOREIGNKEYMendefinisikan pada suatu kolomyang ada pada suatu table, dimanakolomtersebutjugadimilikiolehtableyanglainsebagaisuatuPRIMARYKEY.SintaksuntukconstraintFOREIGNKEYadalah:CREATETABLEnama_tabel(
nama_kolomtipedata,.CONSTRAINTtable_constraintFOREIGNKEY(nama_kolom_constraint)REFERENCEStable_contraints_kunci_primer(nama_kolom_kunci_primer)
);
Sedangkanuntukmenghapustabel,dapatdilakukandengansintaksnyasebagaiberikut:
DROPTABLEnama_tabel;
Sedangkan untuk mengubah tabel, dapat dilakukan dengan menggunakansintakssebagaiberikut:
ALTERTABLEnama_tabelADD(nama_kolom_barutype_kolom[BEFOREnama_kolom])MODIFY(nama_kolom_lamatype_kolom)DROP(nama_kolom_lamatype_kolom);
10
-
1.2.3IndexIndex adalah skema object yang digunakan untuk meningkatkan
kecepatan dalam mendapatkan baris data yang diinginkan denganmenggunakanpointer.DapatmereduksidiskI/Odenganmenggunakanmetodepengaksesanuntukmelokasikandatasecaracepat.Sertaindepedentdaritabelyangdiindeks.
Caramembuatindexadalahindexyangunikdibuatsecaraotomatispada saat mendefinisikan constraint PRIMARYKEYatau UNIQUEdalamdefinisitabel.Sedangkansecaramanualuserdapatmembuatindexnonunikpada kolom yang ada untuk meningkatkan kecepatan akses. Syntax untukmembuatindexpadasatuataulebihkolom:
CREATEINDEXnama_indexONtabel(nama_kolom);
Contoh:
CREATEINDEXemp_last_name_idxONemployees(last_name);
SedangkansintaksuntukmenghapusindexdaridatadictionarydigunakanDROPINDEXadalah:
DROPINDEXnama_index;
1.2.4.Viewsalah satuobjekdatabase, yangsecara logikamerepresentasikan sub
himpunandari datayangberasal dari satuataulebihtabel. Kegunaanviewadalah untuk membatasi akses database, membuat query kompleks secaramudah, mengijinkan independensi data dan untuk menampilkan view(pandangan)datayangberbedadaridatayangsama.Adaduamacamtipeviewadalahsimpleviewdancomplexview.Berikutiniperbandinganantarasimpleviewdancomplexviewadalah:
Tabel2.1PerbandinganSimpleViewdanComplexView
11
-
Fitur Simpleview ComplexViewJumlahTable Satu SatuataulebihBerisiFungsi Tidak YaBerisiGroupData Tidak YaDMLmelaluiView Ya Tidakselalu
View dapat dibuat dengan perintah CREATE VIEW. Subquerydapat dicantumkan dalamCREATEVIEW, tapi subquery yang digunakantidakbolehberisiklausaORDERBY.SyntaxpenulisanVIEWadalah:
CREATEVIEWnama_viewASsubquery;
Contoh:
CREATEVIEWempvu80ASselectemployee_id,last_namefromemployeeswheredepartment_id=80;
Sedangkanuntukmemanggil data dari view, digunakan perintahyangsamaseperti memanggil data dari tabel. Danuntukmenghapus viewdengansintakssebagaiberikut:
DROPVIEWnama_view;
2. KegiatanPraktikum1. Membuat system informasi perpustakaan dimana ada koleksikoleksi
bukuyangdisediakan,peminjamanolehanggotaperpustaanmakadalamsystemtersebut akses yangdapat dilakukanolehanggotaadalahdapatmelihatdatadatabukuyangpernahdipinjam,dendayangharusdibayarjuga melakukan pencarian bukubuku diperpustakaan tersebut. Dengandesaindatabasesebagaiberikut:
12
-
13
-
14
-
2. Amatilahapayangterjadidarikegiatan1!3. Tugastambahan(ditentukanolehasistenpraktikum)!
3. TugasAkhir1. Buatlahdesaindatabaseuntuksuatuperusahaan:
a. Tabel department dengan memiliki primary key pada fielddepartment_id. Dan tabel department terdiri atas fieldfield:department_id,department_name,manager_iddanlocation_id.
b. Tabel employee dengan memiliki constraint foreign key padadepartment_id. Dan tabel employess terdiri dari: employee_id,last_nameNOTNULL,email,salary,commission_pct,hire_dateNOTNULL.
c. TabelTabel lain yang saling berelasi (seperti tabel persediaanbarang,tabelpemasokbarang,dll).
2. Buatviewempvu80yangberisiid_number,name,sal,department_iddaripegawaiyangbekerjadidepartment=80.kemudiantampilkanstrukturdariviewempvu80.
3. BuatnonuniqueindexpadakolomFOREIGNKEYyangadapadatabelEMPLOYEE.
15
-
MODULIIIDML(DATAMANIPULATIONLANGUAGE)
DasarTeori
16
Tujuan: Praktikandapatmemahamidanmengisitabeldalamdatabase Praktikandapatmemahamidanmemanipulasidatadalamdatabase
TugasPendahuluan ApayangandaketahuitentangDML? ApayangandaketahuitentangperintahINSERT,UPDATEdanDELETE? Sebutkan macammacam klausa maupun operator yang terdapat dalam
perintahSELECT!
-
DML (Data Manipulation Language) adalah bahasa yangmemungkinkanpenggunamengaksesataumemanipulasidatasepertiyangdiaturolehmodeldata.Manipulasidataadalah:
Pengambilaninformasiyangdisimpandalambasisdata
Penempataninformasibarudalambasisdata
Penghapusaninformasidaribasisdata
Modifikasiinformasiyangdisimpandalambasisdata
DML (Data Manipulation Language) merupakan bahasa yang bertujuanmemudahkanpemakaiuntukmengaksesdatasebagaimanadirepresentasikanolehmodeldata.Ada2jenisDML,yaitu:
Prosedural,yangmensyaratkanagarpemakaimenentukan,dataapayangdiinginkansertabagaimanacaramendapatkannya.
Nonprosedural,yangmembuatpemakaidapatmenentukandataapayangdiinginkantanpamenyebutkanbagaimanacaramendapatkannya.
Queryadalahpernyataanyangmemintapenggunamengambilinformasi.BagianDMLyang terlibat dalam pengambilan informasi disebut bahasa query. Istilahbahasaqueryseringdisamakandenganistilahbahasamanipulasidata.SedangkanSQLadalahsebuahsintaksuntukmengeksekusiquery.
PraktikumCobasemuacontohoperasiDMLdibawahini:
1. PernyataanINSERTINTOPernyataan INSERT INTO digunakan untuk memasukkan data baru pada
tabel.
Sintaks:INSERTINTOnama_tabelVALUES(nilai1,nilai2,...)
Urutannilaiyangdiletakkandalamtandakurungdisesuaikandenganurutankolomdalam tabel. Akan tetapi kita bisa menentukan kolomkolom yang akan diisidengandatabaru,yaitu:
INSERTINTOnama_tabel(kolom1,kolom2,...)VALUES(nilai1,nilai2,...)
17
-
KolomkolomyangtidakdisebutkanpadaInsertsecaraotomatisakandiisidenganNulldankolomyangtidakdisebutkandalamInsertharuslahyangtidakNotNull.Contoh:
InsertIntoMahasiswaValues('01012','Irwan','Jl.Beo23','Bogor')
2. PernyataanUPDATEPernyataanUPDATEdigunakanuntukmodifikasidatadalamtabel.
Sintaks:UPDATEnama_tabelSETnama_kolom=nilai_baruWHEREnama_kolom=nilai
Padapernyataandiatas: SETuntukmenentukankolomyangakandiubahdannilaipenggantinya.
WHEREmenentukankondisidaribarisbarisyangakandiganti.
Contoh:UpdateMahasiswaSetNama='Riri'WhereNPM='01010'
3. PernyataanDELETEPernyataanDELETEdigunakanuntukmenghapusbarispadatabel.
Sintaks:DELETEFROMnama_tabelWHEREnama_kolom=nilai
Contoh:UntukmenghapusbarispadatabelMahasiswayangnilaiNPMnyaadalah01013,andabisamemberikanpernyataansepertiberikut:
DeleteFromMahasiswaWhereNPM=01013
DalamperintahDELETEjikakitainginmenghapussemuadatapadatabeltanpamenghapustabelmakaWheretidakperludisebutkan.
DELETEFROMnama_tabelAtauDELETE*FROMnama_tabel
18
-
4. PernyataanSELECTSecaraumumperintahSELECThanyadifungsikanuntukmenampilkandata
yangadadidalamsuatutabel.Tetapidalampengembangannya,perintahiniakanmenjadi sebuah perintah yang sangat penting dan berpengaruh hingga saatpemrogramandistoredproceduresdantriggers.Dalambasisdata2iniyangkitabahasadalahsemuapernyataanSELECTyangdigunakanuntukmemilihdatadaritabel,yangmanahasilnyadisimpandalamtabelhasilyangdisebutResultSet.
Sintaks:SELECTnama_kolomFROMnama_tabel
UntukmemilihbeberapakolomgunakanpernyataanSELECTsebagaiberikut:SELECTnama_kolom1,nama_kolom2,...FROMnama_tabel
Contoh:PernyataanuntukmenampilkankolomNPMdanNamayangterdapatpadatabelMahasiswa.
SelectNPM,NamaFromMahasiswa
Untukmemilih semuakolomdari tabel, dapat menuliskan tandaasterisk ( * )sesudahkataSelect.Simbol*berartisemuakolom,sepertiberikut:
SELECT*FROMnama_tabel
Contoh:Select*FromMahasiswa
Dalam perintah SELECT banyak sekali perintah/klausa/operator yang bisadigunakanuntukmemanipulasidatadenganlebihrinci,diantaranyaadalahdistinct,klausawhere,like,alias,orderby,groupby,having,operatorAND,OR,between...AND,fungsiaggregate,danmasingbanyaklagiyanglainnya.
Tugas:Daritopikpembuatanaplikasibasisdatayangtelahandabuat,buatlahmasingmasingperintahDMLberikut:
19
-
1. Sisipkanmin10barisdatadalammasingmasingtabel2. Tambahkanmin2operasiupdatedandelete3. 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.
MODULIVSTOREDPROCEDUREDANTRANSAKSI
20
Tujuan:1. Mampumemahamidanmembuatprocedureataufunctiondalambasisdata2. Mampumenggunakanperintahperintahdalamstoredprocedure
-
1.
1.Teori1.1.StoredProcedure
StoredproceduredanstoredfunctionmerupakanfasilitasbarudariMySQLversi5.0.StoredproceduremerupakansekumpulanSQLyangdisimpankedalamserverMySQL.Keuntunganmenggunakanstoreprocedure,klienMySQLtidakperlumenuliskanperintahSQLkeservernamunhanyaperlumemanggilprocedureyangsudahdisimpandiserver(jikatersedia).PerbedaanantaraproceduredanfunctionpadaMySQLhampirmiripdenganproceduredanfunctionpadabahasapemrograman.Functionmengembalikansuatunilaiskalardandapatdipanggildidalamstatementprocedureataufunctionlain.ProceduredipanggilmelaluiperintahCALLdandapatmengembalikannilaimelaluivariabeloutput.
StoredProcedureadalahprosedur(sptsubprogramdalambhspemrograman)yangdisimpandidalamdatabase.Mysqlmendukungduajenisrutin(subprogram):
Storedprocedureyangdapatdipanggil,
21
TugasPendahuluan:1. Apayangandaketahuitentangstoredprocedure!2. Bagaimanacaramembuatprocedureataufunctiondalambasisdata!3. Apakegunaanperintahdelimiterdalamstoredprocedured!jelaskandengan
contoh
-
fungsiyangmenghasilkannilaiyangdapatdipakaidalamstatemenSQLlain.
StatemenyangmenciptakanstoredprocedureCREATEprocedureprocedure1/*nama*/(INparameter1INTEGER)/*parameter*/BEGIN/*awalblok*/DECLAREvariable1CHAR(10);/*variabel*/IFparameter1=17THEN/*awalIF*/SETvariable1='burung';/*assignment*/ELSESETvariable1='kelelawar';/*assignment*/ENDIF;/*akhirIF*/INSERTINTOtable1VALUES(variable1);/*statement*/END/*akhirblok*/
Denganstoredprocedureeksekusimenjadicepat.Tidakadakompilasi.Peningkatankecepatandatangdarireduksilalulintasjaringan.Jikaadapekerjaanpengecekanberulang,looping,multiplestatement,dikerjakandenganpemanggilantunggalkeproseduryangtelahdisimpankeserver.Stored procedure adalah komponen. Andaikan aplikasi kemudian ditulis dalambahasaberbeda,tidakadamasalah,karenalogikaberadadidalamdatabasebukandalamaplikasi.StoredProcedureadalahportable.StoredprocedureditulisdalamSQL,AndabisajalankanpadasetiapplatformdimanaMysqldijalankandisitu.
CreateProceduredanCreateFunctionSebelummembuatprocedureataufunctionterlebihdahulupastikanbahwaAndasudahmasukkedalamsuatudatabase(usenama_database).Bentukumumdariperintahcreateproceduredanfunctionadalah
Createprocedure
(parameter)
Createfunction
22
-
(parameter)
Dimana:
Parameter=terdiridarijenisparameter[IN,OUT,atauINOUT],namaparameterdantipedataparameter.Karakteristik=terdiridaribahasaSQL,komentar,dsb.Tipedata=tipedatayangdapatdireturnadalahsemuatipedatayangvaliddiMySQL.Program=semuasyntaxprocedureSQLyangvalid.
Jenisparameterada3yaitu:INberartivariabelparameterhanyaberfungsisebagaimasukan,OUTberartivariabelparameterberfungsisebagaitempatuntukmenyimpannilaikeluarandariprocedure,danINOUTberartivariabelparameterberfungsisebagaimasukandanpenyimpannilaikeluaranprocedure.2.KegiatanPraktikum
1. Buatdatabasedengannamadbparkir,kemudianaktifkan
2. Buattabelkendaraandalamdatabasedbparkir3. Tampilkanmsql>select*fromdbparkir;
4. Memilihdelimiter
23
-
Kemudian sebelum create procedure dijalankan terdapat perintahdelimiter.YaitumenggantikankarakterberhentiMySQLdari;menjadi|.Hasilnya MySQL akan mengabaikan karakter ; dan menganggapnyasebagaikarakterbiasa
5. Menciptakanstoredprocedure
p1=namaprosedur()=daftarparameterSELECT*FROMkendaraan;=bodiprosedur
6. Memanggilprocedurep1
7. Mengembalikandelimiterdanmemulainya
8. Menghapusdelimiter
9. Buatproceduresederhanayangmemilikifungsiuntukmenghitungjumlahrecord pada tabel kendaraan. Kemudian jumlah kolom tersebutdimasukkankedalamvariabelparam1.
24
-
10. panggilproceduredanlihathasilnya
selectcount(*)intoparam1fromt;
Kemudiansebelumcreateproceduredijalankanterdapatperintahdelimiter.YaitumenggantikankarakterberhentiMySQLdari;menjadi|.HasilnyaMySQLakanmengabaikankarakter;danmenganggapnyasebagaikarakterbiasa.Semisalperintahdelimiterinitidakada,makapadacontohbariske3dimanaterdapatkarakter;diakhirstatement.MySQLakanmenganggapbarisperintahcreateprocedureberakhirdisitu.Endkebawahbukanbagiandaribadanprogramprocedure.Akibatnyaperintahcreateprocedurekitasalah.
Padabariske6,procedureyangtelahdibuatdipanggildenganfungsicall.Janganlupauntukmemberikanparametersesuaidenganyangdibutuhkanolehproceduresimple.Padabaristerakhir,variabelparametertempatmenyimpankeluarandariprocedureditampilkan.Mengapavariabelparameteruntukprocedurediatasmemakaitambahankarakter@?Halinisupayavariabelparameterbisadiberlakukanpadafungsiselect.Jikavariabelparametersemuadigantitanpa@,makaperintahselecta|tidakmenampilkanhasilapaapa.
3.TUGAS25
-
1. Buatlahsebuahproseduredenganketentuan:a. NamaProsedur:latihan1b. Tanpaparameterc. Isiprosedur:menampilkanisidaritabelactor(tabelharusada,
fieldsembarang)d. Buatlahcarauntukmemanggilprosedurtersebut
2. Lihatisidariprocedurelatihan3. Hapuslahprosedurlatihan4. Penggunaanekspresi:
Buatlahsebuahproseduruntukmenampilkan:customer_id,rental_id,amount,discount,totaldaritabelpaymentdimana:
customer_idditampilkansebagaiKodePelanggan Rental_idditampilkansebagaiKodeToko AmountditampilkansebagaiJumlah Discountdihitungdariamount*0.1 Totaldihitungdariamountdiscount
26
-
MODULVSTOREDPROCEDUREDANTRANSAKSI
27
Tujuan:1. MampumemahamidanmembuatprocedureTransaksidalambasisdata2. Mampumenggunakanperintahperintahdalamtransaksi
TugasPendahuluan:1. Berikankesimpulanmengenaistoredprocedure2. Apayangandaketahuitentangtransaksi!3. Sebutkandanjelaskanperintahperintahdalamtransaksi!
-
1.DasarTeori1.1.Parameterdalamstoredprocedure
1.TanpaparameterCREATEPROCEDUREp5()...
2.SatuparameterinputCREATEPROCEDUREp5([IN]namatipedata)...
3.SatuparameteroutputCREATEPROCEDUREp5(OUTnamatipedata)...
4.SatuparameteruntukinputdanoutputCREATEPROCEDUREp5(INOUTnamatipedata)...
1.2.ArtiTransaksi
Transaksi:serangkaiankelompokdarioperasimanipulasidatabaseyangdilakukanseolaholahsebagaisatuunitkerjasecaraindividu.Jikasebuahoperasididalamtransaksigagaldijalankan,makakeseluruhantransaksijugaakangagaldijalankan.4propertistandaryangdimilikidariTransaksipadaMySQL:(ACID)Atomicity:memastikanbahwaseluruhoperasidalamunitkerjadiselesaikandenganbaik.Jikatidak,transaksiakandihentikanpadapoinkegagalandanoperasisebelumnyaakandibatalkansehinggakembalikekeadaansemula.
Consistency:memastikanbahwadatabasesecaratepatmengubahkeadaantransksiyangberhasildijalankandengancommit
Isolation:memungkinkantransaksiuntukberoperasisecaraindependent
28
-
Durability:memastikanbahwahasilatauefekdaritransaksidapatbertahanapabilasistemmengalamikegagalan
1.3.AutoCommit,StartTransaction,Commit,RoolbackFasilitaspenanganankesalahan(errorhandling)biasadiperlukanuntukmengantisipasiterjadinyakesalahanpadasuatuprosestransaksi,sehinggaprogrammerbisamengaturskenariojikasuatuoperasigagalsebagianatauseluruhnya.
SecaradefaultskenariodaritransaksiadalahAUTOCOMMIT.Artinyasemuaprosesyangberhasildilaksanakanakansecaraotomatissecarafisikdisimpandalamdatabase.JikadiinginkanmulaidariposisitertentuAUTOCOMMITtidakberfungsi,dapatdigunakanperintahSTARTTRANSACTION.
SelanjutnyasesuatuperintahsesudahpernyataanSTARTTRANSACTIONakanditundauntukdisimpan,sampaibertemupernyataanCOMMITyangakanmenyimpanseluruhprosesyangtertundaataubertemupernyataanROLLBACKyangakanmembatalkanseluruhprosesyangtertunda.
AkantetapiperludiingatadabeberapaperintahyangtidakdapatdiROLLBACKkarenamengandungfungsiCOMMITsecaraimplisit.Perintahtersebutadalah:ALTERTABLEBEGINCREATEINDEXCREATETABLECREATEDATABASEDROPDATABASEDROPINDEXDROPTABLELOADMASTERDATALOCKTABLESSETAUTOCOMMIT=1STARTTRANSACTIONTRUNCATETABLEUNLOCKTABLES
2.KegiatanPraktikum:1. BuatTabelDibawahini:
29
-
2. CREATETABLEtabelmhs(no_mhschar(4)DEFAULTNULL,namachar(25)DEFAULTNULL,alamatchar(25)DEFAULTNULL)ENGINE=InnoDB;
3. Untukmembuattransaksipadamysqlgunakanengine=innoDBpadapembuatan/createtabelnya
4. TransaksipenambahanrekamanmenggunakanSTARTTRANSACTION
5. Penambahandatatabelmhs
6. LihatHasilPenambahan
7. Mahasiswauntuksementarasudahdirekam8. MambatalkanrekamandenganperintahROLLBACK;
Mysql>rollback;9. Tampilkansemuadatatabelmhssetelahdiberikanperintahrollback10. mysql>STARTTRANSACTION;
mysql>INSERTINTOmhsVALUES(0005 ,Untung Raharja,'Bandung);mysql>INSERTINTOmhsVALUES(0006 ,DiahAyu Subekti,'Semarang)mysql>COMMIT;
11. mysql>rollback;
30
-
12. lihathasilnyaapaperbedaanya?
13. Buatlah StoredProcedure : Suatu transaksi penjualan secara sederhanamisalnyamelibatkan2tabel,antaralaintabelbarangyangmenyimpananstokdanjenisbarang,dantabeljualmerekamtransakasipenjualan.Untukprosesmerekamantransaksipenjualanmenggunakan2storedprosedure,yang pertama perekaman jual, dan kedua pemotongan stok pada tabelbarang.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_notachar(4),in_tgldate,in_kd_brgCHAR(5),in_jumlahint)
BEGININSERTINTOjualVALUES(in_no_nota,in_tgl,in_kd_brg,in_jumlah);CALLpotong_stok(in_kd_brg,in_jumlah);END$$DELIMITER;
19. Lakukaneksekusi20. 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. Lakukaneksekusi22. JalankanStoredProcedureSimpan_jua23. CALLSimpan_jual('0001',CURRENT_DATE,'K0001',2)24. Hasilselecttablejualdanbarang
32
-
3.TUGAS1. BuatKesimpulandaripraktikumdiatasmengenaiartitransaksimulai
autocommitsampaicommit,rollbacksertamengenaistoredprocedure2. Buatprocedureuntukperhitungandari(a*b)+cdengannilaivariablea=9,
b=90,c=783. Buatstoredprocedureuntukkonversinilaiangkakenilaihurufdengan
kondisisebagaiberikut:025 :D2650 :C5175 :B76100:ANilaiangkaditentukandarisebuahvariablestatisdidalamstoredprocedure.Gunakanpercabangandalammenentukankonversinilai.
33
-
MODULVITRIGGER
DasarTeori
34
Tujuan: Praktikandapatmemahamidanmembuat proceduredanfunctiondalam
database Praktikandapatmemahamidanmembuattriggerdalamdatabase
TugasPendahuluan Apayangandaketahuitentangprocedure? Apayangandaketahuitentangfunction? Apayangandaketahuitentangtrigger? Bagaimanamembuattrigger?
-
Trigger atau pemicu merupakan store procedures jenis khusus yangmenempel padasuatu tabel tertentu dandieksekusi secaraotomatis saat terjadimanipulasi data untuk tabel tersebut. Sebuah trigger dapat ditempelkan padaoperasi manipulasi insert, update dan delete. Dalam kata lain, jika kitamenempatkan trigger di sebuah tabel, makasetiap kali kita melakukanoperasiyang sudah didefinisikan triggernya, maka data yang akan dimanipulasi akanmelaluiprosesyangadadalamtriggertersebutterlebihdahulu.
Sebuah trigger akan dibutuhkan dalamsuatudatabase yang tabeltabeldidalamnyamembutuhkanberbagaimacamaturanbisnisyanglebihrestricteddandinamis.Sehinggatidaksemuaorang(bahkanprogrammersekalipun)yangbisamemanipulasidatasecaraserampangantanpamengetahuijalanceritadaritriggeryangadadalamdatabasetersebut.
Dalampembuatantriggerharusdiperhitungkanberbagaihaldiantaranyaadalah:
Pembuatan trigger tidakbolehbertentangandenganconstraint, primarykeydanforeignkeyyangadadalamsebuahtabel. Pembuatantrigger tidakbolehbertentangandenganreferential integritydanrelasiantartabel. Pembuatantriggerjugadiperhitungkandarisisikompleksitasagartidakmemperlambat proses manipulasi data, khususnya jika dalam sebuah tabelyangdiperkirakanakandiaksesolehbanyakuserdalamsatuwaktu. Jikadalamsuatutriggerterdapatkesalahanyangmenyebabkaneksekusisuatumanipulasidataterhentiataudibatalkan,dianjurkanuntukmemberikanpesankesalahankepadapenggunaagarpenggunamengetahuibahwaprosesyangdilakukantelahdibatalkan.
PraktikumBerikut adalahdasardasar trigger, function, procedureserta viewyang
bisa diimplementasikan pada MYSQL5 keatas. Dengan menggunakan trigger,function, procedure serta view, pemanfaatan MYSQL akan lebih bermanfaat.Contohnya:kitabisamembuaturutanlangkahlangkahtertentusetelahsuatuevendilakukan(ex:insert,update,delete).Cobasemuacontohoperasidibawahini:
1. ProceduredanFunction1.1 ProcedureSyntakuntukmembuatproceduredalamMySQLadalahsebagaiberikut.
CREATE[DEFINER={user|CURRENT_USER}]
35
-
PROCEDUREsp_name([proc_parameter[,...]])[characteristic...]routine_body
1.2 FunctionSyntaksuntukmembuatfunctiondalamMySQLadalahsebagaiberikut.
CREATE[DEFINER={user|CURRENT_USER}]FUNCTIONsp_name([func_parameter[,...]])RETURNStype[characteristic...]routine_body
Keterangansyntaks:1. proc_parameter(hanyapadaprocedure):
[IN|OUT|INOUT]param_nametype
INparameterdilewatkankedalamproceduretetapimodifikasinilaidariparameterinitidakkelihatansetelahproceduretersebutdipanggil.
Out parameter merupakan parameter yang dilewatkan dari dalamprocedure ke pemanggil procedure tersebut. Nilai inisialisasi saatmemanggil adalah null dan hasil parameter akan kelihatan setelahproceduredipanggil.
INOUTparameterdiinisilaisaiolehpemanggilprocedure,kemudianhasilmodifikasinya tersebut akan kelihatan setelah procedure tersebutdipanggil.
2. characteristicLANGUAGESQL|[NOT]DETERMINISTIC|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}|SQLSECURITY{DEFINER|INVOKER}|COMMENT'string'
3. routine_body:ValidSQLprocedurestatementRoutinebodyberisisyntaxsyntaxsql yangvalid, seperti insert atauselect.Bisajugaberisicompound.Compountdiapitolehbeginend.Syntaxdaricompoundsystemadalahsebagaiberikut.
36
-
[begin_label:]BEGIN[statement_list]END[end_label]
Compoundinibisadiisidenganlabel.Beginlabeldanendlabelharussama.Didalamcompoundjugabisaberisideklarai variabel, loopingataukontrolprogram lainnya. Setiap Function harus punya return value untukmengembalikannilaiyangdihasilkan
2. ContohProceduredanFunctionMySQLBerikut adalah contoh penggunaan procedure. Pertama kita buat
terlebih dahulu database dengan nama adakara. Kemudian silakan buat tableberikutdenganisinya.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.2ProcedureBerikutiniadalahprosespembuatanprocedure,dibuatdalamcommandfrom.
mysql>delimiter//mysql>CREATEPROCEDUREjumlahSiswa(OUTparam1INT)>BEGIN>SELECTCOUNT(*)INTOparam1FROMsiswa;>END;>//QueryOK,0rowsaffected(0.00sec)mysql>delimiter;
2.2FunctionFunctionadalahsebuahproseduryangbisakitadefinisikandengan
perintahCREATE FUNCTION.BahasayangdigunakanuntukmendefinisikanfunctiondapatditentukanpadaparameterLANGUAGE.Duabuahfunctiondapat
37
-
memiliki nama yang sama tapi dengan parameter yang berbeda baik tipe datamaupun jumlahnya. Beberapa contoh function (builtin) dalam Posgres, dapatdilihatdenganmengetikkanperintah\dfpadaconsoleposgres.Contoh:
SELECTUPPER(otomatismenjadicapital);
SyntaxCreateFunction:CREATE[ORREPLACE]FUNCTIONname([argtype[,...]])RETURNSrettypeAS'definition'LANGUAGElangname[WITH(attribute[,...])]
Cobalahcontohsebuahfunctionsederhanaberikutini:CREATEFUNCTIONtambah(int,int)RETURNSintASSELECT$1+$2LANGUAGEsql;
SELECTtambah(10,12);Untukmenghapussebuahfunction,gunakanperintahDROP.
Berikutiniadalahcontohprosespembuatanfunctiondimysql:mysql>createfunctiontmbhSaudara(namachar(20))returnschar(5)>returnconcat('Saudara',nama);QueryOK,0rowsaffected(0.36sec)
3. PemanggilanProceduredanFunctionPemanggilanproceduremenggunakansyntax
CALLprocedure_atau_function_name([parameter[,...]])Keterangan:
procedure_atau_function_nameadalahnamaprocedureatafungsiyangdipanggildanparameteradalahnamanamaparameterprocedureataufungsitersebut
3.1ProcedureContohprocedure:
mysql>calljumlahSiswa(@a);QueryOK,0rowsaffected(0.00sec)mysql>select@a;++|@a|++|8|
38
-
++1rowinset(0.00sec)
3.2FunctionContohfunction:
mysql>selecttmbhSaudara('resikaarthana');++|tmbhSaudara('resikaarthana')|++|Saudararesikaarthana|++1rowinset(0.00sec)
4. MenghapusProceduredanFunctionUntukmenghapusprocedureataufunctiondigunakanperintahsebagaiberikut
DROP{PROCEDURE|FUNCTION}[IFEXISTS]procedure_or_function_name
5. TrigersTriggerberfungsiuntukmenyisipkansuatufungsipadasaatsuatu
recorddiINSERT,UPDATE,atauDELETE.Syntax:
CREATETRIGGERname{BEFORE|AFTER}{event[OR...]}ONtableFOREACH{ROW|STATEMENT}EXECUTEPROCEDUREfunc(arguments)
AtausyntaxUmumTrigerCREATE[DEFINER={user|CURRENT_USER}]TRIGGERtrigger_nametrigger_timetrigger_eventONtbl_nameFOREACHROWtrigger_stmt
Keterangan: DEFINERmenunjukkannamauseryangmempunyaihakaksesuntukmengaksestriger. Triger_timemenunjukkansaattrigertersebutdijalankan.TerdiridariBeforeatauAfter Triger_timemenandakansaatkeadaanbagaimanatrigertersebutaktif.Terdiridari
Insert:Trigeraktifsaatbarisbarudimasukkankedalamtabel
39
-
Update:Trigeraktifsaatadabarisdiperbaharuidimasukkandidalamtabel Delete:Trigeraktifsaatbarisdihapusdalamtabel
ContohTrigers:CREATETABLEtest1(a1INT);CREATETABLEtest2(a2INT);CREATETABLEtest3(a3INTNOTNULLAUTO_INCREMENTPRIMARYKEY);CREATETABLEtest4(a4INTNOTNULLAUTO_INCREMENTPRIMARYKEY,b4INTDEFAULT0);DELIMITER|CREATETRIGGERtestrefBEFOREINSERTONtest1FOREACHROWBEGININSERTINTOtest2SETa2=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);Silakanmasukkannilaiketest1mysql>INSERTINTOtest1VALUES>(1),(3),(1),(7),(1),(8),(4),(4);QueryOK,8rowsaffected(0.01sec)Records:8Duplicates:0Warnings:0Asaresult,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(buatjugatabelpegawaidenganduakolomsaja,yaituid,dannama)menjadicapitalsemua.
2. Buatlahtriggeruntukmemanggilfungsiyangtelahdibuatdiatas.3. INSERTkanketabelpegawaidataberikut:id=1012dannama=owo.4. SELECTdaritabelpegawai.
MODULVIIEVALUASIBASISDATA
42
-
TugasEvaluasi:1. TentukanTopik(setiapmahasiswaberbedatopic)2. BuatdesaintableMinimal5tabelsalingterelasi3. BuatnormalisasidalambentukCDMdanPDM4. BuatTransaksi:penggunaanautocommit,starttransaction,operasidml,
commit,rollback5. BuatProceduredaritableanda6. BuatTriggerdaritableanda
AtauTugasproyekbisaditentukandosenPengampu.
43
Tujuan: Pesertamemhamitentangnormalisasi,storedprocedure,trigger,transaksi
-
MODULVIIIFUNCTIONDANTRIGGER
DasarTeori1 Function
44
Tujuan:Mampumembuat function dalampengelolahan database dan memahami macammacamtipetriggersertamembuatdatabasetrigger.
PrePraktikum1.Apakahyangandaketahuitentangfunction?2. Apakahyangandaketahuitentangtrigger?3. Sebutkanmacammacamtipetrigger?4. Triggerdapatdibuatsesuai dengankeperluan. Kapantriggerperludibuat
dankapantriggertidakperludibuat?5. Sebutkantigamacamtriggertimingdantriggerevent?
-
FunctionadalahsuatublokPL/SQLyangmemilikikonsepsamadenganprocedure,hanyasajapadafunctionterdapatpengembaliannilai(returnvalue).Karena function dapat mengembalikan sebuahnilai, function dapat diaksessepertilayaknyasebuahvariabelbiasa.
Pembuatan function sangat berguna dalam proses pengelolahandatabase. Dengan sekali membuat function, anda dapat menggunakannyauntukkeperluanyangsamapadablokblokPL/SQLlainnya,procedureataubahkan dalam function lainnya. Hal ini sama dengan konsep pembuatanprocedure yang tentunya dapat meringankan pekerjaan karena tidak perlumengulang statemenstatemen yang sama pada setiap blok PL/SQL yangdibuat.Sintaxumumuntukmembuatsebuahfunctionadalahsebagaiberikut:CREATEFUNCTIONnama_function([func_parameter[,...]])RETURNStype_data[characteristic...]routine_body
2 TriggerTriggeradalahprosedurtersimpanpadaMicrosoftSQLServeryang
secara otomatis dijalankan apabila data di dalam tabel berubah karenaeksekusi perintah SQL (INSERT, UPDATE atau DELETE). Salah satupenggunaannyayangpalingumumadalahuntukmenerapkanpembatasanyanglebihkompleksdariyangtelahdiizinkanmelaluipembatasanCHECK,yangberfungsimembatasiinformasiyangdisisipkankedalamkolom.
Trigger bisa dibuat bersama dengan perintah INSERT, yang akanmelakukanqueryketabellaindanmengembalikannilailogikyangmembantumembatasi data yang diberikan kepada kolom tertentu. Sebagai contoh:Triggerbisadibuatuntukmenjalankanreplikasi,misalnyaapabilaadasebuahbaris disisipkan kedalamdatabase Z, sebuah baris dengan informasi yangsama akan ditambahkan ke dalam database Y. Atau Apabila sebuah barisdihapus dari sebuah tabel, Trigger akan menghapus baris lain yangberhubungan dengan baris tersebut pada tabel lain. Trigger dibuat sebagaisebuahtransaksidanbisadimundurkanapabilaadamasalahyangdideteksi.Syntaxtrigger:CREATE
[DEFINER={user|CURRENT_USER}]TRIGGERtrigger_nametrigger_timetrigger_event
ONtbl_nameFOREACHROWtrigger_stmt
45
-
4. KegiatanPraktikum1. SettingINODBpadaMySQLkitajaditerlebihdahulusilakanaktifkan
INODB pada MySQL, Setelah aktif barulah kita bisa menggunkanfasilitastriggerpadaMySQL.Oklangsungpadatujuanmarikitamulaiproyekkita, pertama tamakita akanmembuat 2 buah tabel untukpercobaankita:
2. TriggerdapatbekerjaBEFOREatauAFTERsebuahtabelmengalamitigakejadian[Insert,Edit,delete].:
46
-
47
-
3. Amatilahprosesdarikegiatan1dan,kemudianapayangterjadi?4. Tugastambahan(ditentukanolehasistenpraktikum)!
5. TugasAkhir1. Buatlah function dengan nama fungsi test.hello dengan tipe data char
dengankapasitas20danmenggabungkanhello,sdan!.2. Buatterlebihdahulutabelbarang,tabeldetailpembeliansesuaidengan
strukturyangtelahditetapkansertatriggeruntukkasuspenjualan.Tabelidentikdengantablepenjualan
3. Buatlahsebuahfungsiyangdigunakanuntukmendapatkanvolumesebuahbalok.Ujilahfungsiyangandabuat!
48
-
4. Buatlahtriggeruntukkasusfakturpenjualan,jikakuantitas(jumlahitems)yangdimasukkanlebihdari5itemsmakadiskonnyasebesar10persen,danjikakurangdari5makaakandisikandengannilai0.
5. Buatlah beberapa trigger untuk event pada tabel detailpembelian baikuntukdelete,insertmaupunupdate.
49
-
MODULIXCURSORI
DasarTeori
CursormerupakanpointeryangmenunjukankesuatubagianmemoriuntukmenyimpanhasilperintahSQLsepertiSelect,Insert,UpdatedanDelete.PemakaiancursorpadaSQLServermendukungstrukturpengulangan(loop)diantararesultset,membacasetiapbarisdatasatupersatu.
Praktikum:
Beberapatahapanyangharusdilakukandalammemakaicursoranataralain:
1. DeklarasiCursorSebelummenggunakancursorpertamatamayangharusdilakukanadalahmendeklarasikannamacursordanvariabelyangdigunakan.
DECLAREcursor_nameCURSORFORselect_statement
50
Tujuan:PraktikandapatmemanggilsintaksSQLdenganmenggunakancursor
TugasPendahuluan1. Apayangandaketahuitentangcursor?Jelaskan!
-
2. OpenCursorUntukmenggunakancursordanfetchdata,andaharusmengaktifkancursorsesuaidengannamayangtelahdideklarasikansebelumnya.
OPENcursor_name
3. MembacabarisdatadaricursorSetelahcursordiaktifkan,SQLServerakanmembacabarisdatasecaraberulangulang(loop)daribarisdatadarisuatutabel.
4. MenutupCursorMenutupcursordilakukanjikainginmenguncidatasetelahtidakdigunakan
CLOSEcursor_name
5. DealokasicursorDealokasicursorbertujuanuntukmembuangataumenghapuscursordarimemorijikasudahtidakdigunakanlagi
51
SyntaxDECLARE nama_cursor [INSENSITIVE][SCROOL] CURSOR FOR select_statementDeclare[FOR {READ ONLY|UPDATE [OF nama_kolom [,.n]]}]OPEN nama_cursorCLOSE nama_cursorDEALLOCATE nama_cursor
-
Tugas:
Buatimplementasidari:Copysalahsatutabeldaridatabaseyangandabuat(hasilmodulView)kesebuahtabelbaru
52
Contoh :DECLARE Cursor_Barang CURSORFOR Select Kode, Nama From BARANGDeclare @Kode Char(5), @Nama Varchar(30)OPEN Cursor_Barang FETCH NEXT From Cursor_Barang Into @Kode, @NamaCLOSE Cursor-BarangDEALLOCATE Cursor_Barang
-
53
-
MODULXCURSORII
DasarTeori
Suatuqueryyangdibuatuntukmenyamakanbeberaparecordtidakharusmempunyaiclauseinto.Jikasuatuquerydiharapkanmengembalikanbeberaparecord,makacursorharusdipakaisebagaipenggantinya.Cursordapatdigunakanuntukmenegaskansaturecordpadasuatuwaktu.Dengancursor,tiaptiaprecorddapatdikembalikanolehqueryolehindividualpadasuatuwaktu.
Berikutcontohperintahselectuntukmenemukanrecorddalambasisdata.
Select*fromstate
Perintahiniakangagaldijalankanmeskiprogramtelahbenarkarenaqueryakanmemilihsemuanamadalamtabel.Queryakanmenemukan50tupledalamstatebasisdata.
databasestoremainselect*fromstateendmain
Programiniakandikompiledandijalankan.Programtersebutakanberhentidanmenampilkanpesan.
54
Tujuan:PraktikandapatmemanggilsintaksSQLdenganmenggunakancursor
TugasPendahuluan1. ApayangandaketahuitentangfungsiCount(Max,Min,Avarage)
dengancursor.Bericontohscriptnya.
-
asubqueryhasreturnnotexactlyonevalueHalinidisebabkanperintahselectmenemukanlebihdarisaturecord.
Masalahinidapatdiselesaikandengancursor,karenacursordideklarasikanuntukmengoperasikan perintah select. Perintah select digabungkan dengan cursor.Perintahselectdapatmenyamakansuatukelompokrecorddalambasisdata.Cursorkemudiandapatdigunakanuntukmenegaskanmasingmasingpilihanrecord.Berikutcontohpenggabunganperintahselectdancursor.
declarec_statecursorforselect*fromstate
Perintah tersebut membuat cursor dengannamac_state. Cursor dapat memilihmasingmasingrecordyangdikembalikanolehperintahselect*fromstate.
Tugas:1. Tambahkandatakedalamrelasidenganperintahinsert2. Rubahlahsalahsatudatapadarecorddatabaseanda3. Implementasikantugaspendahuluanyangsudahandakerjakan.
55
-
MODULXIPENGEMBANGANAPLIKASIBASISDATA
56
Tujuan:MemahamilangkahlangkahkoneksiPHPdenganMySQL.Memahamiperbedaanpengambilanrecorddaridatabase.
TugasPendahuluanJelaskanmengenaiPHP!Apabedanyawebserverdanwebbrowser?Sebutkanlangkahmengkoneksikanantaraphpdandatabasemysql?
-
TEORI
1.1. PHP
PHPadalahsalahsatubahasapemrogramaninternetyangmendukungpenggunaandatabasesepertiMySQL,PostgreSQL,mSQL,Oracle,danlainlain.UntukdapatmenjalankanPHPmelaluibrowser,makaandadiharuskanterlebihdahulumenginstallwebserver(misalnyaApache,PWS,IIS)lalumenginstallPHP,sedangkanuntukmenjalankanMySQLandatidakperlumenginstallwebserver,hanyasajajikaingindijalankanmelaluibrowser,makaandaharusmenginstallwebserver.PHPsebagaialternatiflainmemberikansoulsisangatmurah(karenagratisdigunakan)dandapatberjalandiberbagaijenisplatform.
PHP(atauresminyaPHP:HypertextPreprosessor)adalahskripbersifatserversideyangditambahkankedalamHTML.PHPsendirimerupakansingkatandariPersonalHomePageTools.SkripiniakanmembuatsuatuaplikasidapatdiintegrasikankedalamHTMLsehinggasuatuhalamanwebtidaklagibersifatstatis,namunmenjadibersifatdinamis.Sifatserversideberartipengerjaanskripdilakukandiserver,barukemudianhasilnyadikirmkankebrowser.CaraPenulisanskripPHPadaduamacam,yaituEmbeddedScriptdanNonEmbeddedScript.ContohdarijenisskripPHPditunjukkandalamgambarberikut:
GambarSkripdalamPHP:(a)EmbeddedScript,(b)NonEmbeddedScript
57
-
GambardiatasmenjelaskanbahwaskripPHPdapatberupaembeddedscriptyaitumeletakkantagPHPdiantaratagtagHTMLsedangkannonembeddedscriptyaitusemuatagHTMLdiletakkandalamtagPHP.SemuaKodePHPmenyerupaidengankodebahasaC,walaupuntidaksepenuhnyasama.UntukpenulisantagPHPterdiridariempatstyle,yaituStyleStandartFormat,denganformat:,ShortStyledenganformat:,Javascript Styledenganformat:.danASPstyledenganformat:.
1.2. Langkah-langkah koneksi PHP-MySQL
1.MembukakoneksikeserverMySQLmysql_connect()DigunakanuntukmelakukanujidankoneksikepadaserverdatabaseMySQL.
Sintaks:
$conn=mysql_connect(host,username,password);
$conn adalahnamavariabelpenampungstatushasilkoneksikepadadatabase.host adalahnamahostataualamatserverdatabaseMySQL.username adalahnamauseryangtelahdiberihakuntukdapatmengaksesserverdatabase.password adalahkatasandiuntukusernameuntukdapatmasukkedalamdatabase.
2.Memilihdatabaseyangakandigunakandiservermysql_select_db()Digunakanuntukmelakukankoneksikepadadatabaseyangdalamserveryangberhasildikoneksidenganperintahmysql_connect().
Sintaks:
58
-
$pilih=mysql_select_db(namadatabase,$conn);
$pilih berisistatuskoneksikepadadatabase.$conn merupakankoneksikepadaserverdatabaseyangberhasil.namadatabase adalahnamadatabaseyangakandikenaiproses.
3.Mengambilsebuahquerydarisebuahdatabase.mysql_query()DigunakanuntukmelakukaneksekusiperintahSQLuntukmemanipulasidatabaseyangberhasildilakukankoneksinyamenggunakanmysql_select_db().
Sintaks:
$hasil=mysql_query(SQLStatement);
$hasil akanberuparecordsetapabilaSQLStatementberupaperintahselect.
4.Mengambilrecorddaridatabasea.mysql_fetch_array()Digunakanuntukmelakukanpemrosesanhasilqueryyangdilakukandenganperintahmysql_query(),danmemasukkannyakedalamarrayasosiatif,arraynumerisataukeduanya.
Sintaks:
$row=mysql_fetch_array($hasil);
$row adalaharraysaturecorddarirecord$hasilyangdiprosesnomorrecordsesuaidengannomorurutdariprosesmysql_fetch_arrayyangsedangdilakukan.$hasil adalahrecordsetyangakandiproses.
b.mysql_fetch_assoc()
59
-
Fungsiinihampirsamadenganfungsimysql_fetch_array(),hanyasajaarrayyangdihasilkanhanyaarrayasosiatif.
Sintaks:
$row=mysql_fetch_assoc($hasil);
c.mysql_fetch_row()Fungsiinihampirsamadenganfungsimysql_fetch_array(),hanyasajaarrayyangdihasilkanhanyaarraynumeris.Sintaks:
$row=mysql_fetch_row($hasil);
d.mysql_num_rows()Fungsiinidigunakanuntukmenghitungjumlahrecordyangadapadadatabase.
Sintaks:
$jml=mysql_num_rows($hasil);
60
-
$jml akanmemilikinilaisesuaidenganjumlahrecordyangada.
2.KegiatanPraktikum:
1.MengujiinterkoneksiPHPdenganMySQL.
61
Koneksi Database MySQL
Demo koneksi database MySQL
-
2.Melihatperbedaanantaramysql_fetch_array(),mysql_fetch_assoc(),mysql_fetch_row().
a.Buatlahtabelligaberikutini,dengan3field:kode,negara,champion.
b.Isilahtabeldengandataberikutini:
c.Aksesdatabasesmenggunakanmysql_fetch_array()
62
Create table liga (kode char(3) not null,negara char(15),champion int
);
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);
-
d.Aksesdatabasesmenggunakanmysql_fetch_assoc()
63
Koneksi Database MySQL
Koneksi database dengan mysql_fetch_array
-
e.Aksesdatabasesmenggunakanmysql_fetch_row()
64
Koneksi Database MySQL
Koneksi database dengan mysql_fetch_assoc
-
3.MembuatBukuTamu
65
Koneksi Database MySQL
Koneksi database dengan mysql_fetch_assoc
-
a.Buatlahtabelbukutamuyangmemiliki3field:nama,email,komentar.
b.Buatformuntukbukutamu,berinamabukutamu.htm
66
Create table bukutamu (nama char(20) not null,email char(20),komentar char (40)
);
Buku Tamu
Buku Tamu untuk database MySQL
Nama : Email : Komentar :
-
c.Buatfilebukutamu_add_form.phpuntukmemprosesdatadaribukutamu.htmdanmenambahkandataketabelbukutamu.
67
-
68
Simpan Buku Tamu
Simpan Buku Tamu MySQL
-
d.Buatfileview.phpuntukmenampilkanisibukutamu.
69
-
4.Membuatprogramsearchingdatabasedenganmenggunakantabelno3aa.Buatfilesearch.htm
70
Cari Database
Searching Buku Tamu untuk database MySQL
namaemail
Masukkan kata yang anda cari
-
b.Buatfilehasilsearch.phpuntukmenampilkandata
71
-
3.TUGAS:1.BuatKesimpulandaripraktikumdiatas.
2.Modifikasilahprogramdiatas,sehinggaandamemiliki3tombolyaitu,Bukutamuuntukinputandata,Tampilanuntukmenampilkandatabasebukutamudalambentuktabel,Searchuntukmelakukansearchingdatabasebukutamudalambentuktabel.
72
-
MODULXIIPROJECTTUGASAKHIR
TugasProyek:1. TentukanTopikProject(setiapmahasiswaberbedatopic)2. BuatdesaintableMinimal5tabelsalingterelasi3. BuatnormalisasidalambentukCDMdanPDM4. KoneksikantabledenganprogramaplikasiberbasisWEB5. Buatdesainyangsesuai.
73
Tujuan: Peserta dapat mengimplementasikan semua modul dalam suatu proyek
untukmengkoneksikandatabasedenganprogramaplikasi
-
AtauTugasproyekbisaditentukandosenPengampu.
74