basis data mysql

Upload: ksatrio

Post on 14-Oct-2015

159 views

Category:

Documents


1 download

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