Anda di halaman 1dari 109

IGOSTrainingToolKit RDBMS(Relational DataBaseManagement System):MySQL

I.PengantarRDBMS

1.1Pendahuluan
SQL(StructuredQueryLanguage) adalahbahasaqueryyangstandardyangdigunakan sebagai suatu bahasa sederhana dan dasar, yang memungkinkan Anda untuk berkomunikasi dengan database, membaca, menulis, dan memperoleh informasi yang berguna dari database. Meskipun sifatnya nonprocedural, lebih mudah bekerja dengan SQLdaripadadengankebanyakanbahasapemrogramansepertiPHP,PERL,Javadanlain lain,namunkadangkalamenyulitkanuntukbeberapakasusyangrumitbagimerekayang baru mengenal SQL. Perintah atau statement SQL yang paling sederhana yang memungkinkanseoranguserdapatmenampilkanataumemperolehdatadarisuatutabel adalah perintah atau statement SELECT. Sesuai dengan namanya, dengan perintah SELECTseoranguserdapatmemilihdatayangspesifikdaritabeluntukmenampilkannya. Dengan mengasumsikan bahwa tabel dalam database Anda memiliki nama tabel 'mahasiswa',denganstrukturtabelsebagaiberikut:

KemudianAndajalankanquerysepertiini:
mysql>select*frommahasiswa;

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL1

1.2SQL92
SQLtelahdistandarisasi,danversisaatinimengacupadaSQL92. Beberapadatabase yang mendukung SQL seharusnya menyesuaikan dengan standard SQL saat ini. Standarisasi SQL telah mejadikan SQL sebagai perangkat atau tool istimewa yang digunakandalampengembangandandesainweb.Sebagianbesarprogramatau software untuk pengembangan aplikasi web, terutama Allaire's Cold Fusion dan Macromedia Dreamweaver Ultradev, mengandalkan pada SQL atau perintahperintah SQL untuk menghubungkandanmemperoleh informasidaridatabase.Untukinformasilebihdetil tentangSQL92,kunjungi: http://developer.mimer.se/documentation/html_82/Mimer_SQL_Reference_Manual/Intro_S QL_Stds3.html

1.3RelationalDatabases
1.3.1Relationalvs.flatfiledatabases
Flatfliedatabaseadalahsuatudatabaseyangdidesainmenyertakansuatutabeltunggal. Flat file database meletakkan seluruh data kedalam tabel tunggal, atau daftar, dengan kolomkolomyangmerepresentasikanseluruhparameter.Sebuahflatfilebisaterdiridari banyakkolom,seringkalidenganduplikasidatayangcenderungmenyebabkankerusakan data (datacorruption).JikaAndamemutuskanuntukmenggabungkandatadiantaradua flatfile,makaAndaharusmelakukancopydanpasteinformasiyangrelevandarisatufile kefileyanglainnya.Disinitidakadaotomatisasidiantaraduaflatfile.JikaAndamemiliki duaataulebihflatfileyangberisidataalamatklien,sebagaicontoh,klientelahberpindah alamat,makaAndaharusmerubahsecaramanualalamatklientersebutyangadadalam setiapflatfile.Perubahaninformasidalamsatufiletidakmemilikisangkutpautdengan file lainnya. Flat file menawarkan fungsionalitas untuk menyimpan informasi, memanipulasi kolomkolom, mencetak dan menampilkan informasi yang terformat, pertukaraninformasidenganoranglainmelaluiemaildanmelaluiinternet.Beberapaflat file bisa dikerjakan pada filefile eksternal, seperti text editor, agar memperluas fungsionalitasdanmengaturinformasiyangberhubungan.

2PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Dilain pihak, suatu Relational database, menggabungkan tabeltabel dengan berbagai metode untuk dapat berkerjasama. Hubunganhubungan antar tabel data dapat dibandingkan, disatukan, dan ditampilkan dalam formform database. Sebagian besar relationaldatabasemenawarkanfungsionalitasuntukberbagi(share)data:

melaluijaringan melaluiinternet denganlaptopdanperangkatelektroniklainnyasepertipalmpilots Dengansoftwaresoftwaresystemyanglain

Mendesainflatfiledatabaseadalahsederhana,danmemerlukansedikitpengetahuandesain database.Flatfiledapatdikembangkandenganhanyamenggunakansatudatabaseengine. Flatfiledapatdibuatdalamrelationaldatabaseenginedengantidakmengambilmanfaat ataukeuntungandarikonsepkonsepdesainrelasional.Mendesainsuaturelationaldatabase memerlukan perencanaan yang lebih dari pada flat file database. Dengan flat file, menambahinformasisepertinyaperludipertimbangkan.Denganrelationaldatabase,dapat menyimpandatakedalamtabeltabelsedemikianrupasehinggahubunganantartabeldapat dimengerti. Membangun suatu relational database sangat tergantung pada kemampuan Andauntukmenetapkansuatumodelrelasional.Modelharusbenarbenarmenggambarkan penuh bagaimana data diorganisir dalam ketentuan struktur data, intergriti, query, manipulasi,danpenyimpanan. Relationaldatabasememungkinkanuseruseruntukmendefinisikankolomkolomrecord tertentusebagaikeyatauindex,melakukanpencarian,menghubungkanrecordrecordantar tabeldanmenetapkanbatasanbatasanintegritas.Queryquerypencarianlebihcepatdan lebih akurat jika berdasarkan nilainilai yang telah diindex. Recordrecord tabel dapat dengan mudah dihubungkan dengan nilainilai yang telah diindex. Batasanbatasan integritasdapatditetapkanuntukmenjaminbahwahubunganantartabeltersebutsyah.Jika Andadapatmembuatsebuahhubungansatukebanyak(onetomany)dalamtabeltabel dataAnda,sebaiknyaAndamenggunakanrelationaldatabasekarenaflatfiletidakcukup untukmenanganiseluruhpemrosesandatayangAndabutuhkan. Relationaldatabasemenawarkanprosesreportingyanglebihbaik,denganberbagaireport generator yang memfilter dan menampilkan kolomkolom pilihan. Relational database menawarkan kemampuan membuat modulemodule reporting Anda sendiri. Sebagian besarrelationaldatabasejugamenawarkankemampuanmengimpordanmengekspordata darisoftwarelainnya.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL3

Terdapat tiga sistem relational database yang utama: proprietary, open source, dan embedded. Relational database yang proprietary biasanya memerlukan penggunaan bahasabahasapengembanganyangjugabersifatproprietarygunamenyempurnakanSQL. Sebagaicontoh MSAccessyangmenggabungkanvisualbasicdenganSQL.Database database open source, seperti MySQL, didistribusikan dengan gratis agar mendorong pengembanganuser.Embeddeddanrelationaldatabasedikemassebagaibagiandaripaket paket software lainnya, seperti paketpaket software taxpreparation. Vendor mensuplai database, dan seluruh perlengkapanperlengkapan manipulasi yang berhubungan, untuk mengontrol struktur database. Databasedatabase ini biasanya disertakan oleh perlengkapanperlengkapanyangmanamenyediakanauditbekasbekastransaksi.

1.3.2Normalisasidatabase
Jika Anda bekerja dengan database, maka Anda harus familiar dengan istilah normalisasi.MungkinorangseringbertanyakepadaAnda,apakahdatabasenyasudah dinormalisasi?atau,apakahdatabasenyadalamBCNF?.Namundenganmengetahui prinsipprinsip dari normalisasi, dan dengan menerapkannya pada tugastugas desain database Anda maka semuanya itu bukanlah hal yang sulit, dan dapat meningkatkan performaDBMSAnda. Normalisasi adalah suatu proses mengefisiensikan pengorganisasian data dalam suatu database.Adaduatujuandariprosesnormalisasi:

Untukmengeliminasiataumenghilangkanduplikasidata(menyimpandatayang samakedalamlebihdarisatutabel) Untuk menjamin bahwa ketergantungan data dapat dimengerti atau masuk akal (hanyamenyimpandatayangberhubungandalamsuatutabel)

Kedua tujuan normalisasi tersebut mengurangi jumlah konsumsi space database, dan menjaminbahwadatasecaralogikadisimpan. Komunitas database telah mengembangkan petunjukpetunjuk untuk menjamin bahwa databasedinormalisasi.ItusemuadiacusebagaibentukbentuknormalatauNornalForms (NF)danserangkainpetunjuktersebutdiberinomordarinomorsatu(bentuknormalisasi yangpalingrendah)sampainomorlima(bentuknormalkelimaatau5NF).Dalamaplikasi aplikasi praktis, Anda akan sering menemukan 1NF, 2Nf, dan 3NF kadang bersama dengan 4 NF. Bentuk normal kelima sangat jarang ditemukan. Bentuk normal kesatu (1NF)menentukanaturantauranyangpalingdasaruntuksuatupengaturandatabase:

Menghilangkanduplikasikolomkolomdalamtabelyangsama Membuat tabel terpisah untuk setiap grup data yang berhubungan dan mengidentifikasi setiap baris dengan suatu kolom yang unik atau sekumpulan

4PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

kolomyangunik(primarykey) Bentuk normal kedua (2NF) selanjutnya memusatkan perhatian pada konsep menghilangkanduplikasidata:

Menemukansemuasyaratsyaratbentuknormalkesatu Hilangkansubsetdatayangditerapkanpadabeberapabarisdarisebuahtabeldan letakkankedalamtabelterpisah Buatlah relasi antara tabeltabel baru dan tabeltabel pendahulunya melalui penggunaanForeignKeys Menemukansemuasyaratsyaratbentuknormalkedua Menghilangkankolomkolomyangtidaksecaralangsungtergantungpadaprimary key Menemukansemuasyaratsyaratbentuknormalketiga Suatu relasi adalah dalam bentuk normal keempat (4NF) jika relasi itu tidak memilikiketergantunganbanyaknilai(value)

Bentuknormalketiga(3NF)melakukansatulangkahbesarselanjutnya:

Terakhir,bentuknormalkeempat(4NF)memilikisatusyarattambahan:

Ingat,petunjuknormalisasiiniadalahbersifatkomulatif.Untuksuatudatabasemenjadi bentuk normal kedua (2NF), pertama harus terpenuhi dahulu seluruh kriteria bentuk normalkesatu(1NF).

1.3.3RelasiAntarTabel
SelainAndamengetahuibentuknormalhallainyangperluAndapahamiadalahtipetipe relasi antar tabel. Tipe relasi amat penting untuk menjaga keutuhan Database Anda. Ringkasnya ada 3 tipe relasi yaitu relasi satukesatu, relasi satukebanyak dan relasi banyakkebanyak. 1.3.3.1Relasisatukebanyak(OnetoMany) Relasidisebutrelasisatukebanyakapabilasatunilaipadasebuahkolommerujukkedua ataulebihkolompadatabelyanglain,contohsebagaiberikut: TabelA:perusahaan_ienisusaha id_perusahaan 1 2 3 Astra Festo TNT nama_perusahaan id_jenis 1 1 3

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL5

4 5 6 TabelB:jenisusaha id_jenis 1 2 3

NurulFikriCiptaInovasi HAFANA Telkom

2 2 3

nama_jenis Manufaktur TeknologiInformasi Telekomunikasi

Perhatikanbahwaid_jenispadatabelperusahaan_jenisusahamerujukpadaid_jenispada tabeljenisusahauntukmengetahuiataumemperolehnamajenisusaha(nama_jenis). 1.3.3.2Relasisatukesatu(OnetoOne) Relasisatukesatuterjadiapabilasatubarispadasuatutabelhanyamerujukkesatubaris ditabellainnya,contohsebagaiberikut: TabelA:eksekutif id_eksekutif 1 2 3 TabelB:asisten id_asisten 1 2 3 nama_asisten Ayu Fitria Sandra id_eksekutif 1 2 3 nama AkhtarNaufalShagufta HanaFahmidaZahra UmarFawaz

Perhatikanid_eksekutifpadatabeleksekutiftepatberelasisatuketabelasistenpadakolom id_eksekutif.

6PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

1.3.3.3Relasibanyakkebanyak(ManytoMany) Relasibanyakkebanyakterjadibilabeberapabarispadasebuahtabelberelasikebeberapa baris pada tabel yang lain. Jika terjadi kasus seperti ini Anda tidak dapat merepresentasikanrelasiinihanyadengan duatabelAndamemerlukansatutabellain yangmewakilirelasibanyakkebanyakitu.SebagaicontohAndainginmerelasikantabel surat_berita dan tabel klien, pada kasus ini beberapa klien dapat memilih beberapa surat_beritasehinggasatusurat_beritapundapatmerujukkebeberapaklienmakauntuk menggambarkanrelasisepertiitugunakansatutabeltambahan.Sehinggahasilnyaadalah sepertiberikut: TabelA:klien id_klien 1 2 3 nama_klien AkhtarNaufalShagufta HanaFahmidaZahra UmarFawaz

TabelB:surat_berita id_sb 1 2 3 Komputer Politik Populer nama_sb

TabelC:klien_surat_berita id_ksb 1 2 3 4 5 6 id_klien 1 1 2 2 3 3 id_sb 1 3 1 3 2 3

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL7

8PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

II.PengantarMySQL
2.1Pendahuluan
MySQLmerupakanDatabaseManagementSystemSQLopensourceyangpalingpopuler, yangdikembangkan,didistribusikan,dandidukungolehMySQLAB.MySQLABadalah sebuahperusahaankomersial,yangdidirikanolehparapengembangMySQL.MySQLAB adalahperusahaanopensourcegenerasikeduayangmenyatukannilainilaidanmetodologi opensourcedengansuatumodelbisnisyangsukses. BerikutinifiturfiturutamaMySQL:

MySQLadalahrelationaldatabasemanagementsystem SoftwareMySQLadalahopensource DatabaseserverMySQLsangatcepat,reliable,danmudahdigunakan DatabaseservercMySQLbekerjadalamclient/serveratauembeddedsystem

2.2PenyesuaiandenganstandarstandarSQL
MySQL mendukung entrylevel SQL92. Entrylevel berisi serangkaian keistimewaan keistimewaan yang mendefinisikan dasardasar pemenuhan SQL92. Oracle menyesuaikandenganSQL89,yangmanaadalahsuatusubsetdaritipeSQL92dengan tambahantipetipespesifik.BeberapatipeSQL92 dipetakankedalamtipetipeoracle. PostgreSQLmenggunakansuatusubsetdaribahasaSQL9299yangdiperluasdanbahasa SQL3.SintaktipetipedataSQL92dipetakanlangsungkedalamtipeaslipostgreSQL.

2.3ProgramprogramklienMySQL
Programprogram klien MySQL dapat dipanggil atau dijalankan dari commandline, sepertidarisebuahconsolepromptWindows,ataudarisebuahUNIXpromptshell.Ketika Anda menjalankan suatu program klien, Anda dapat menentukan opsiopsi untuk mengontroltindaktandukdariprogramklien.Beberapaopsimenjelaskankepadaprogram kliententangbagaimanamenghubungiserverMySQL.Beberapaopsilainnyamenjelaskan kepadaprogramklienaksiyangmanakahyangharusdilakukan.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL9

2.3.1Programklienmysql
Programklien mysql memungkinkanAndamengirimkanpermintaanpermintaan(query) keserverMySQL,danmenerimahasilnya.Untukmenentukanopsiopsiyangdidukung olehprogrammysql,jalankanperintahdenganopsihelp.Sebagaicontoh,untukmencari tahubagaimanamenggunakanmysql,ketiklahperintahberikutini:
shell>mysqlhelp

Untukmengetahuiversidariprogrammysql,gunakanopsiversion:
shell>mysqlversion

Untuk menghubungi server menggunakan program klien, klien harus mengetahui pada komputeryangmanakahserverMySQLaktifatauberjalan.Sebuahkoneksiatauhubungan bisadilakukansecaralokalpadasuatuserverMySQLyangberjalanpadakomputeryang sama dengan komputer yang sedang menjalankan program klien mysql, atau dapat dilakukansecarajarakjauh(remote)kesuatuserverMySQLyangberjalanpadakomputer yang berbedadengankomputeryang sedangmenjalankanprogramklien mysql,Anda tentunyaharusmemilikiuseraccount(usernamedanpassword)yangterdaftarpadaserver MySQLtersebutuntukdapatmelakukankoneksikeserver. DuabuahopsiyangmenunjukkankepadakliendimanakahserverMySQLberjalan,begitu jugatipekoneksiyangdilakukan.
host=nama_komputer

atau
hnama_komputer

10PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

OpsiinimenentukanpadakomputeryangmanakahserverMySQLaktifatauberjalan. Nilai dari opsi ini dapat berupa nama komputer atau nomor IP. Nilai default adalah localhost.

port=nomor_port

atau
Pnomor_port

Opsiinimenunjukkannomorportyangmanakahyangdapatdihubungipadakomputer server,inihanyaditerapkanuntukkoneksiTCP/IP.Defaultnomorport MySQLadalah 3306. Duabuahopsiyangmenyediakaninformasiindentifikasi,yaituusernamedanpassword atauuseraccountyangAndaakangunakanuntukdapatmengaksesserver.


user=username

atau
uusername

OpsiinimenentukanusernameuntukaccountMySQLAnda.
password=password

atau
ppassword

Opsiinimenentukanpassworduntukaccount MySQLAnda.Berikutinicontohcontoh bagaimanamenggunakanopsiopsiprogramklienmysqluntukmelakukankoneksi:

Koneksi ke server menggunakan default nama komputer dan default username tanpapassword:
shell>mysql

Koneksikeserverpadakomputerlokaldengannamauser'naufal',danmeminta mysqluntukmenanyakanpasswordAnda:
shell>mysqlhost=localhostpassworduser=naufal

Koneksi ke server dengan opsi yang sama dengan contoh sebelumnya, tetapi menggunakanbentukopsisingkat:
shell>mysqlhlocalhostpunaufal

KoneksikeserverdenganIPaddressyangspesifik,dengannamauser'naufal'dan password'rahasia':

shell>mysqlhost=1 1 1 92. .33password=rahasiauser=naufal 68.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL11

Koneksi ke server pada localhost dengan default username dan password dan denganmengkompresspaketdatayanglewatataumelintasantarakliendanserver:

shell>mysqlhost=localhostcompress

2.3.2Programklienmysqlimport
mysqlimport adalah program klien yang memuat filefile data kedalam tabeltabel. Programinimenyediakanantarmukacommandlinedenganpernyataan LOADDATA INFILE.Haliniberartimysqlimportmemeriksaopsiopsiyangdiberikanpadacommand linedanmembuatsuatupernyataanLOADDATAINFILEyangberhubungandenganaksi yangdisebutkanolehopsiopsitersebut.Kemudianmelakukankoneksikeserverdanuntuk setiap file input, menghasilkan pernyataan LOAD DATA INFILE yang memuat file tersebutdenganbenarkedalamtabelyangsesuai.Caramenjalankanperintahmysqlimport padacommandlinesepertiberikutini:
shell>mysqlimportoptionsnama_databasefile_input

nama_databaseadalahnamadaridatabaseyangberisitabeltabelyangakandiisidata,dan file_inputadalahnamafileyangberisidatayangakandimuatketabel. Setiaptabelyangakandiisiolehmysqlimportharussudahadadalamdatabase,dansetiap fileinputseharusnyahanyamengandungnilainilaidata. mysqlimport tidakdimasudkan untukmemprosesfilefileinputyangmengandungperintahperintahSQL(yaituseperti yangdibuatdenganprogrammysqldump).

2.3.3Programklienmysqldump
Programklienmysqldumpmengeksporisidaritabeltabelyangadadalamsuatudatabase ke suatu file. Program ini sangat berguna untuk membackup database, atau untuk mentransferisidaridatabasekeserverlain.mysqldumpdapatmenghasilkanfilefilehasil dumpberfornatSQLyangmengandungperintahperintahCREATETABLEdanINSERT untuk membuat ulang filefile dump, atau dapat menghasilkan filefile data dengan delimitertabulasi.

12PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

2.3.3.1Operasimysqldump Secaradefault mysqldump menginterpretasiargumenpertamayangbukanoptionsebagai namadatabasedanakanmengeksporseluruhtabeltabelyangadadalamdatabasetersebut.

Perintah berikut ini akan mengekspor seluruh isi tabeltabel dalam database sekolahkedalamsuatufiledengannamafile'sekolah.sql':
shell>mysqldumpsekolah>sekolah.sql

Perintah mysqldump berikut ini disertai dengan 3 argumen yang bukan option, argumenpertamaadalahnamadatabasedanargumenkeduandanketigaadalah namanamatabeldalamdatabase,hasildumpdisimpankedalamfiledengannama pelajar_guru.sql:
shell>mysqldumpsekolahpela jarguru>pela jar_guru.sql

2.3.3.2Memuatulanghasilmysqldump UntukmemuatulangsebuahfiledumpberformatSQLyangdihasilkanoleh mysqldump, gunakanprogramklienmysql.Gunamembuatsalinantabelpelajardaridatabasesekolah kedalamdatabasekampus,sebagaicontoh,Andadapatmenjalankanperintahberikutini:


shell>mysqldumpoptsekolahpela jar>perla .sql jar shell>mysqlkampus<pela .sql jar

mysqldapatmembacadarisebuahpipe,sehinggaAndadapatmengkombinasikandengan penggunaan perintah mysqldump dan mysql menjadi sebuah perintah tunggal. Contoh sebelumnyadapatditulismenjadiberikutini:
shell>mysqldumpoptsekolahpela jar|mysqlkampus

2.3.4Programklienmysqlcheckdanmyisamchk
Programklienmysqlcheckdanmyisamchkdigunakanuntukmemeriksadanmemperbaiki tabeltabel (khususnya tabel tabel MyISAM). Programprogram klien tersebut dapat membantumenjagatabeltabelAndaterbebasdarimasalahmasalah,ataumemeperbaiki tabeltabel Anda jika terjadi masalah sebagai contoh tabeltabel MyISAM menderita kerusakanakibatservercrash. mysqlcheckdanmyisamchkmemilikifungsiyangsama,tetapimerekamemilikibeberapa perbedaan.Berikutiniperbandinganantarakeduaprogramtersebut: Kedua program dapat memeriksa, memperbaiki dan menganalisa tabeltabel MyISAM. MysqlcheckdapatjugamengoptimasitabeltabelMyISAM,begitujugatabeltabelInnoDB PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL13

dan menganalisa tabeltabel BDB. Ada operasioperasi tertentu yang hanya dapat dilakukan oleh myisamchk sedangkan mysqlcheck tidak, yaitu mendisable atau mengenablepengindekan(indexes).

2.4Databasesecaraumumdanmanipulasitabel
SetiapserverMySQLmemilikisuatudirektoridatayangmanadidalamdirektoriinitabel tabeldandatabaseberadadandikelola.Servermerepresentasikanhalberikutini:

MySQLmenghubungkanmasingmasingdatabasedengansuatudirektoriyangada didalamdirektoridata(iniberartidirektoridataadalahdirektoriparentdarisemua direktoridirektoridatabase).Sebuahdirektoridatabasememilikinamayangsama dengan nama database itu sendiri. Sebagai contoh, suatu database diberi nama 'sekolah' maka direktori databasenya juga memiliki nama 'sekolah' yang berada dalam direktori data. MySQL menggunakan direktori database untuk mengatur komponenkomponendatabaseyaknitabeltabeldanindekindek.Sebuahdatabase bisajadikosongatauhanyaberisisatuataubeberapatabel.Databasetidakberanak atautidakdapatmemilikisubsubdatabase,dengankatalainsuatudatabasetidak lagimengandungatauberisidatabaselainnyadidalamnya. Setiaptabeldalamsuatudatabaseterdiridaribarisbarisdankolomkolom.Suatu tabelbisajadikosong(tidakmemilikibarisbarisdataataurecord),tetapiminimal harusmemilikisebuahkolom.Suatutabelbisajugadiindekagarmeningkatkan performa query. Setiap tabel dihubungkan dengan sebuah file formaAUTO_INCREMENT, diterapkan pada kolomkolom integer. Digunakan untukmenghasilkanintegerdenganurutannilaiyangunik.Kolomdemikiandalam suatutabelhanyaadasatu. BINARY,diterapkanpadaCHARdanVARCHAR NULLdanNOTNULL,dapatditerapkanpadasemuakolom DEFAULT, menyediakan suatu nilai baku dalam kasus tidak ada nilai yang diberikan. PRIMARY KEY dan UNIQUEt dalam direktori database yang berisi definisi definisidanstrukturstrukturtabeltersebut.Namadarifileformatsamadengan namatabelditambahakhiran.frm.Sebagaicontoh,fileformatuntuktabelpelajar dalam database sekolah diberi nama pelajar.frm dan diletakkan dalam direktori sekolahyangberadadibawahdirektoridataserverMySQL.Bergantungpadatipe tabel,storageengineuntuksuatutabelbiasanyaakanmembuatfilefiletambahan untuk tabel tersebut. Jika tabel pelajar memiliki tipe MyISAM, maka storage engine MyISAM akan membuat filefile data dan indek yang diberi nama pelajar.MYDdanpelajar.MYIyangmasingmasingdigunakanuntukmenyimpan

14PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

barisbarisdatadanindekindek.JikatabelpelajarmemilikitipeInnoDB,MySQL masih membuat suatu file format pelajar.frm dalam direktori database, tetapi storage engine InnoDB menyimpan tabel data dan informasi indeks kedalam InnoDBtablespace.

2.5StorageEnginedanTipetipetabel
MySQL mendukung beberapa storage engine yang bertindak sebagai pengatur untuk berbagai tipe tabel yang berbeda. Storage engine MySQL mencakup keduanya yang mengaturtabeltabelyangtransaksinya aman (transactionsafe), dan yang mengatur tabeltabel yang transaksinya tidak aman (nontransactionsafe):

StorageengineasliadalahISAM,yangmenanganitabeltabelnontransaksi(non transactional).StorageengineISAMtelahdigantikandenganMyISAMdansudah lamatidakdigunakanlagi.PadaMySQL4.1storageengineinisudahkuno,bahkan padaMySQL5.0dihilangkan. StorageengineMyISAMdiperkenalkanpadaMySQL3.23.0.MyISAMmerupakan peningkatan untuk menggantikan ISAM. MyISAM menangani tabeltabel non transaksi (nontransactional). MyISAM memberikan kecepatan dalam proses penyimpanan dan pengambilan, begitu juga kemampuankemampuan pencarian keseluruhanteks(fulltext).MyISAMdidukungdalamseluruhkonfigurasiMySQL, dan secara default MyISAM menjadi storage engine yang digunakan dalam MySQL,kecualijikaAndamengkonfigurasiMySQLmenggunakanstorageengien yanglainnya. Storage engine MEMORY menyediakan tabeltabel inmemory. Storage engine MERGEditambahkankedalamMySQL3.23.25.Storageengineinimemungkinkan sekumpulantabeltabelMyISAMyangidentikuntukdikelolasebagaisuatutabel tunggal. Seperti MyISAM, Storage engine MEMORY dan MERGE menangani tabeltabel nontransasksi ( nontransactional), dan keduanya juga disertakan secaradefaultdalamMySQL. Catatan:StorageengineMEMORYpertamakalidikenalsebagaiHEAPengine. Storage engine InnoDB dan BDB yang menangani tabeltabel transasctionsafe diperkenalkan dalam versi MySQL 3.23 selanjutnya.BDB disertakan dalam distribusi binari MySQLMax pada sistem operasi sistem operasi yang mendukungnya. InnoDB juga disertakan dalam distribusi binari MySQLMax untukMySQL3.23.MulaidenganMySQL4.0,InnoDBtelahdisertakansecara defaultdalamseluruhdistribusibinariMySQL.Dalamdistribusidistribusisource, Andadapatmengenableataumendisablestorageenginestorageenginetersebut PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL15

denganmengkonfigurasiMySQLsesuaidengankebutuhanAnda.

NDB cluster adalah storage engine yang digunakan oleh MySQL cluster untuk implementasitabeltabelyangterpisahdibeberapakomputer.Engineinitersedia dalamdistribusisourceMySQL4.1.2dandistribusi binari MySQLMax4.1.3. Storage engine ini saat ini didukung hana di Linux, Solaris, dan Mac OS X . MySQLberniatuntukmendukungengineinipadaplatformsistemoperasilainnya sepertiMSWindows,dandalamrilisMySQLmendatang. StorageengineEXAMPLEadalahsuatusubengineyangtidakmenanganiapapun. Andadapatmembuattabeltabeldenganengineini,tetapitidakadadatayangdapat disimpan atau diambil dalam tabel tersebut. Engine EXAMPLE ini disediakan sebagai contoh dalam kode sumber MySQL yang menggambarkan bagaimana memulaimembuatstorageenginebaru. Ini umumnyauntuk yangtertarikatau untukparapengembang. Storage engine ARCHIVE digunakan untuk penyimpanan sejumlah besar data tanpapengindekandengansebuahfootprintyangsangatkecil. Storageengine CSVmenyimpandatadalamfileteksdenganmenggunakantanda komasebagaiformatpemisahantarnilainilaidalamfiletekstersebut. Storage engine BLACKHOLE menerima tetapi tidak menyimpan data, selalu mengembalikanataumenampilkansesuatuyangkosong. Storage engine FEDERATED menyimpan data dalam remote database. Dalam MySQL 5.1, storage engine ini hanya bekerja dengan MySQL, dengan menggunakanMySQLCclientAPI.Dalamrilismasadepan,dimaksudkanuntuk memungkinkannya untuk terkoneksi dengan sumber data lainnya dengan menggunakandriverdriverataumetodemetodekoneksiklienyanglainnya.

2.6Tipetipekolom
Untuksetiaptipedata,sintakyangditampilkanmenggunakantandakurungsiku(square brackets)([])adalahuntukmenunjukkanbagiandarisintakyangbersifatopsional.Contoh berikutinimenunjukkanbagaimanaBIGINTdijelaskandalambabini:
BIGINT[(display_size)]

Sebagai tambahan terhadap tipe BIGINT, banyak jenis tipe data MySQL lainnya yang mendukung spesifikasi dari ukuran.. Kecuali jika tidak dispesifikasikan, nilai tersebut harusberupasebuahbilanganintegerataubilanganbulatantara1dan255.

16PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

2.6.1NUMERIK
MySQLmendukungsemuatipedata standarnumerik(bilangan)SQL.Jenisinimeliputi tipe databilanganbulat(INTEGER,SMALLINT,DESIMAL,danNUMERIC),seperti halnyatipedatabilangandesimal(FLOAT,REAL,danDOUBLEPRECISION).Keyword INTadalahsuatusinonimuntukBILANGANBULAT(INTEGER),dankeywordDEC adalahsatusinonimuntukbilanganDESIMAL. TerhitungsejakMySQL5.0.3,tipedataBITtersediauntukmenyimpannilainilaikolombit. (Sebelum5.0.3,MySQLmenginterpretasikanBITsepertiTINYINT(1).)DiMySQL5.0.3, BITdidukunghanyauntukMyISAM.MySQL5.0.5memperluasdukunganBITpada MEMORY,InnoDB,danBDB. SebagaisatuekstensikeSQLstandar,MySQLjugamendukungjenisbilanganbulat TINYINT,MEDIUMINT,danBIGINT. Untuk tipetipe bilangan bulat selalu disediakan atribut auto_increment, signed dan unsigned. Signed berarti nilai negatif ikut dalam deklarasi tersebut sedang unsigned hanyanilaipositif.Jikaunsignedtidakdideklarasikanmakanilaidefaultadalahsigned. INT/INTEGER Deklarasi:INT[(display_size)][auto_increment][unsigned][zerofill] Penyimpanan:4byte Nilaiyangdapatdisimpanadalahinteger0sampaidengan4294967295jika unsigned. 2147483648sampaidengan214797647jikasigned. TINYINT Deklarasi:TINYINT[(display_size)][auto_increment][unsigned][zerofill] Penyimpanan: 1 byteAUTO_INCREMENT, diterapkan pada kolomkolom integer. Digunakanuntukmenghasilkanintegerdenganurutannilaiyangunik.Kolomdemikian dalamsuatutabelhanyaadasatu.

BINARY,diterapkanpadaCHARdanVARCHAR NULLdanNOTNULL,dapatditerapkanpadasemuakolom DEFAULT,menyediakansuatunilaibakudalamkasustidakadanilaiyangdiberikan.

PRIMARYKEYdanUNIQUE Nilaiyangdapatdisimpanadalahinteger0sampaidengan255jikaunsigned.128sampai dengan127jikasigned. PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL17

MEDIUMINT Deklarasi:MEDIUMINT[(display_size)][auto_increment][unsigned][zerofill] Penyimpanan:3byte Nilai yang dapat disimpan adalah integer 0 sampai dengan 16777215 jika unsigned. 83888608sampaidengan82888607jikasigned. BIGINT Deklarasi:BIGINT[(display_size)][auto_increment][unsigned][zerofill] Penyimpanan:8byte Nilaiyangdapatdisimpanadalahinteger0sampaidengan18446744073709551615jika unsigned.9223372036854775807sampaidengan922337203685477580787jikasigned. SMALLINT Deklarasi:SMALLINT[(display_size)][auto_increment][unsigned][zerofill] Penyimpanan:2byte Nilai yang dapat disimpan dengan jangkauan mulai dari 0 sampai dengan 65535 jika unsigneddan32768sampai32767jikasigned. FLOAT Deklarasi:FLOAT[(display_size,digits)][zerofill] Penyimpanan:4byte Floatmenyimpanbilanganrealdantidakdapatbersifatunsigned.Nilaipresisitunggal yangdapatdisimpanadalah3,402823466E+38sampaidengan1,1175494351E38,0,dan 1,1175494351E38sampaidengan3,402823466E+38. DOUBLE Deklarasi:DOUBLE[(M,D)][zerofill] Penyimpanan:8byte Double menyimpan bilangan real dengan presisi ganda. Nilai yang boleh adalah 1,7976931348623167E+308 sampai dengan 2.2250738585072014E308,0, dan 2.2250738585072014E308 sampai dengan 1,7976931348623167E+308. Nilai M merupakanmaksimalpanjangtampilan.NilaiDmerupakannilaidesimal. 18PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

DECIMAL Deklarasi:DECIMAL[(precision[,scale])][zerofill] Penyimpanan:precision+2byte Menyimpanbilanganfloatingpointdimanaketepatanadalahkritis,sepertiuntuknilaimata uang.TipeDECIMALmemerlukanAndauntukmenspesifikasikanprecisiondanscale. Precisionadalahjumlahnilaidigityangberarti.Scaleadalahjumlahdigityangmengikuti tanda desimal. Sebagai contoh, sebuah kolom BALANCE dideklarasikan sebagai DECIMAL(9,2) yang akan menyimpan sejumlah 9 digit berarti, dengan dua digit diantaranyaberadadisebelahkanantandadesimal.Rangenilaidaricontohdeklarasikolom BALANCEtersebutadalahmulai9,999,999.99sampai9,999,999.99.

2.6.2String
Tipedatastringmenyimpanbermacammacamjenisdatateks.Terdapatsejumlahtipetipe datateksyangdiakomodasidenganberagamukuran.Untukmasingmasingukuran,ada suatutipeyangmenyusundanmembandingkandatasecaracasesensitive,sesuaidengan susunan karakter baku. Suatu tipe binari melakukan penyusunan dan perbandingan sederhana byte demi byte. Dengan kata lain, nilai binari adalah casesensitive. Untuk CHAR dan VARCHAR, tipetipe binari dideklarasikan dengan menggunakan atribut BINARY . Tipetipe TEXT, bagaimanapun juga, memiliki hubungan dengan tipetipe BLOB. BLOB Deklarasi:BLOB BentukbinaridariTEXT. CHAR Deklarasi:CHAR(size)[BINARY] ukuran:ditetapkanolehnilaiukurandenganjangkauansampaidengan255 Penyimpanan:sizebyte Suatukolomdengannilaiteksyangpanjangnyatetap.Nilaistringdenganjumlahkarakter lebihsedikitdariukurankolommakaakandiisidenganspasi.Spasiyangdiisikantersebut ketikadiambildaridatabaseakandihilangkan.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL19

LONGBLOB Deklarasi:LONGBLOB BentukbinaridariLONGTEXT LONGTEXT Deklarasi:LONGTEXT ukuran:0samapai4294967295 Penyimpanan:panjangnilai+4byte Menyimpannilaiteksyangbesar.Secarateoribatasukurandariteksyangdapatdisimpan dalam sebuah kolom LONGTEXT melampaui 4 GB, pada prakteknya kurang. Ini sehubungandenganbatasandariprotokolkomunikasiMySQL,danjumlahmemoriyang tersediapadakomunikasiantarakliendanserver. MEDIUMBLOB Deklarasi:MEDIUMBLOB bentukdariMEDIUMTEXT MEDIUMTEXT Deklarasi:MEDIUMTEXT ukuran:0sampai16777215 Penyimpanan:panjangnilai+3byte Menyimpannilaiteksdenganukuranmenengah. TEXT Deklarasi:TEXT ukuran:0sampai65535 Penyimpanan:panjangnilai+2byte Penyimpananuntuksebagianbesarteks. TINYBLOB Deklarasi:TINYBLOB 20PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

bentukbinaridariTINYTEXT TINYTEXT Deklarasi:TINYTEXT ukuran:0sampai255 Penyimpanan:panjangnilai+1byte Menyimpannilaiteksyangpendek VARCHAR Deklarasi:VARCHAR(size)[BINARY] ukuran:ditetapkanolehnilaiukurandalamsuatujangkauansampai255. Penyimpanan:panjangnilai+1byte Menyimpannilaiteksyangpanjangnyabervariasi.

2.6.3Date
TipetipedatadateMySQLadalahperangkatyangfleksibeluntukmenyimpaninformasi tanggal dan waktu. Untuk memvalidasi nilai tanggal dan waktu, itu diserahkan pada aplikasibukandatabase.MySQLhanyaakanmemeriksabulanyangmemilikijangkauan0 sampai12,dantanggaldari0smapai31.February31,2006adalahsuatucontohinformasi tanggalMySQLyangsah.February0,2006adalahinformasitanggalyangjugasahbagi MySQL.Dengankatalain,Andadapatmenggunakan0untukmenandakantanggalyang Andatidakketahuipasti. MySQL secara otomatis akan mengkonversi nilainilai tanggal dan waktu menjadi bilanganintegerketikadigunakandalamsuatukonteksbilanganinteger. DATE Deklarasi:DATE Format:YYYYMMDD(20060101) Penyimpanan:3byte Menyimpantanggaldalamjangkauandari1januari1000('10000101')sampaidengan31 Desember9999('99991231')dalamalmanakGregorian.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL21

DATETIME Deklarasi:DATETIME Format:YYYYMMDDhh:mm:ss(2006010101:00:00) Penyimpanan:8byte Menyimpaninformasiwaktuyangspesifikdalamjangkauandari1Januari100012:00:00 AM ('10000101 00:00:00') sampai 31 Desember 9999 11:59:59 PM ('99991231 23:59:59')dalamalmanakGregorian. TIME Deklarasi:TIME Format:hh:mm:ss(06:00:00) Penyimpanan:3byte Menyimpannilaiwaktudalamjangkauanmulaidaritengahmalam('00:00:00')sampai1 detiksebelumwaktutengahmalam('23:59:59').

TIMESTAMP Deklarasi:TIMESTAMP[(display_size)] Format:YYYYMMDDhhmmss(20010101060000) Penyimpanan:4byte Sebuahrepresentasidarisebuahpenunjukanwaktukedetikdalamjangkauandaritengah malam pada 1januari 1970,sampai pada satu menit sebelum tengahmalampada 31 Desember2037.Kegunaanutamaadalahmenjagajejakdariperubahanperubahantabel. KetikaAndamemasukkansuatunilaiNULLkedalamsuatukolomTIMESTAMP,maka tanggaldanwaktusaatiniyangakandimasukkan.JikaAndamerubahbeberapanilaidari sebuahbarisdengansuatukolomTIMESTAMP,makakolomTIMESTAMPyangpertama akandiupdatesecaraotomatisdengantanggaldanwaktusaatini.

YEAR Deklarasi:YEAR[(size)] Format:YYYY(2006) Penyimpanan:1byte Menyimpan suatu informasi tahun dari alamanak Gregorian. Parameter size 22PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

memungkinkanAndauntukmenyimpantahundenganmenggunakan2digitdari4digit tahun. Jangkauan untuk suatu YEAR(4) adalah mulai 1900 sampai 2155, sedangkan YEAR(2)dari1970sampai2069.NilaisizebakuadalahYEAR(4).

2.6.4TipedataKomplek
TipedatakomplekMySQLyaituENUMdanSETadalahtipestringyangkhusus.Mereka didaftarkan secara terpisah karena mereka secara konsep lebih komplek, dan merepresentasikansuatubawaantipedataSQL3yangdidukungMySQLdimasadatang. ENUM Deklarasi:ENUM(nilai1,nilai2,.....) Penyimpanan:1255anggotanilai:1byte/25665535anggotanilai:2byte Menyimpansatunilaidarisuatudaftarnilainilaiteksyangmungkinyangsebelumnya sudah didefinisikan. Ketika Anda membuat sebuah kolom ENUM, Anda menyediakan suatudaftardariseluruhnilainilaiyangmungkin.Nilainilaiyangdapatditambahkandan dirubahpadasuatukolomENUMhanyayangterdfatardalamdaftarnilainilaiteksyang mungkintersebut.JikaAndamencobamemasukkansuatunilaiyangtidakterdapatdalam daftarataubukanbagiandaridaftarmakaakanmenyebabkansebuahstringkosongyang akandisimpan. SET Deklarasi:SET(nilai1,nilai2,....) Penyimpanan: 1sampai8anggotanilai:1byte 9sampai16anggotanilai:2byte 17sampai24anggotanilai:3byte 25sampai32anggotanilai:4byte 33sampai64anggotanilai:8byte Sebuahdaftarnilainilaiyangdiambildarisekumpulannilainilaiyangsudahdidefinisikan sebelumnya.Sebuahkolomdapatmenyimpanbeberapaatautidaksamasekalinilainilai teksyangtelahdidefinisikandalampernyataanSET.SETpadadasarnyaadalahsebuah ENUM yang memungkinkan setiap kolom untuk menyimpan lebih dari satu nilai.SET tidakmenyimpansesuaidenganindek,tetapisepertisuatubitmapyangkomplek.Suatu SETdengananggotaanggotanilaiJeruk,Apel,Pir,danPisang,masingmasingelemen PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL23

dinyatakanolehsuatubit'on'dalamsebuahbyte,sebagaimanaditunjukkandibawahini:

RepresentasiElemenelemenSETMySQL Member Jeruk Apel Pir Pisang NilaiDesimal 1 2 4 8 RepresentasisecaraBit 0001 0010 0100 1000

Dalamcontohini,nilainilaiJerukdanPirdisimpandalamdatabasesebagai5(0101).Anda dapatmenyimpansuatunilaimaksimum64dalamsuatukolomSET.MeskipunAndadapat memberi nilaiyangsamabeberapakalidalamsuatupernyatanSQL pengubahansuatu kolomSET,hanyasebuahnilaiyangsebenarnyadisimpan.

2.7OpsiopsiKolom
DalamMySQL,padawaktupertamamembuattabel,ataudikemudianwaktu,Andadapat menambah, merubah opsiopsi kolom tabel. Opsiopsi kolom membatasi data agar dimasukkansesuaidenganopsiyangtelahditetapkan.

UNSIGNED,membuatkolomtidakbolehmemilikinilainegatif ZEROFILL,mengisilebardatayangditampilkandengannol AUTO_INCREMENT, diterapkan pada kolomkolom integer. Digunakan untuk menghasilkanintegerdenganurutannilaiyangunik.Kolomdemikiandalamsuatu tabelhanyaadasatu. BINARY,diterapkanpadaCHARdanVARCHAR NULLdanNOTNULL,dapatditerapkanpadasemuakolom DEFAULT,menyediakansuatunilaibakudalamkasustidakadanilaiyangdiberikan. PRIMARYKEYdanUNIQUE

2.8Operator
MySQLmenawarkantigajenisoperator:arithmatic,compparison,danlogical.

24PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

2.8.1Peraturanketentuanhakyanglebihtinggi
KetikaSQLmengandungpernyataanyangkomplek,subpernyataandievaluasiberdasarkan ketentuanaturanMySQLyanglebihtinggi.Andadapatmegesampingkanketentuanaturan MySQLyanglebihtinggidenganmengurungsuatupernyataandalamtandakurung: Prioritashakyanglebihtinggi 1 2 3 4 5 6 7 8 9 10 11 12 13 Operatoroperator BINARY NOT ^ (unaryminus) */% + <<>> & | <=>==<=><>INISLIKEREGEXP BETWEENCASE AND ORXOR

2.8.2OperatorArithmatic
Operatoroperatorarithmaticmelakukanarithmaticdasarantaraduabuahnilai: Operator + * / % | ^ & Deskripsi Menambahkanduabuahnilaibilangan Mengurangiduabuahnilaibilangan Mengalikanduabuahnilaibilangan Membagiduabuahnilaibilangan Memberikansisahasilbagiduabuahnilaibilangan MelakukanoperasiORsecarabitantaraduabuahnilaibilanganbulat MelakukanoperasieksklusifORsecarabitantaraduabuahnilaibilangan bulat MelakukanoperasiANDsecarabitantaraduabuahnilaibilanganbulat PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL25

<< >>

Melakukanoperasigeserkekirisecarabitpadasebuahnilaibilanganbulat Melakukanoperasigeserkekanansecarabitpadasebuahnilaibilanganbulat

2.8.3OperatorComparison
Operator comparison membandingkan nilainilai dan mengembalikan 1 jika perbandingan adalahbenar(true),dan0(false)jikasebaliknya.Kecualiuntukoperator<=>,nilaiNULL mengakibatkansuatuoperatorcomparisonmengevaluasinyakeNULL. Operatoroperator <>atau!= <= < >= > nilaiBETWEENnilai1 ANDnilai2 nilaiIN(nilai1,nilai2,....) nilaiNOTIN(nilai1, nilai2,....) nilai1LIKEnilai2 Deskripsi Mencocokkan baris jika kedua nilai tidak sama atau tidak sebanding Mencocokkan baris jika nilai sebelah kiri lebih kecil atau samadengannilaisebelahkanan Mencocokkanbarisjikanilaisebelahkirilebihkecildarinilai sebelahkanan Mencocokkan baris jika nilai sebelah kiri lebih besar atau samadengannilaisebelahkanan Mencocokkan baris jika nilai sebelah kiri lebih besar dari nilaisebelahkanan Mencocokkanbarisjikanilaiadalahantaranailai1dannilai2, atausamadengannilai1ataunilai2 Mencocokkanbarisjikanilaitermasukdalamdaftarnilai Mencocokkan baris jika nilai tidak termasuk dalam daftar nilai Membandingkan nilai1 dan nilai2 dan mencocokkan baris jika mereka sesuai. Nilai disebelah kanan dapat berupa karakter wildcard '%', yang cocok dengan semua karakter (termasuknolkarakter),dan'_',yangmencocokkantepatke satu karakter. Penggunaan yang sering adalah membandingkansuatunilaikolomdengansatustringyang mengandung wildcard (contoh: SELECT name FROM pegawaiWHEREnameLIKE'B%'). Membandingkannilai1dannilai2dan mencocokkanbaris jikamerekaberbeda.IniidentikdenganNOT(nilai1LIKE nilai2) Membandingkan nilai1 dan nilai2 dengan menggunakan

nilai1NOTLIKEnilai2

nilai1REGEXP/RLIKE

26PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

nilai2

extended reguler expression dan mencocokkan baris jika kedua nilai sesuai. Nilai sebelah kanan dapat mengandung penuh konsep wildcard reguler expression UNIX (contoh: SELECTnameFROMpegawaiWHEREnameRLIKE'^B.*'

nilai1NOTREGEXPnilai2 Membandingkan nilai1 dan nilai2 dengan menggunakan extended reguler expression dan mencocokkan baris jika keduanilaiberbeda.IniidentikdenganNOT(nilai1REGEXP nilai2).

2.8.4OperatorLogical
Operatorlogicalmemeriksanilaikebenarandarisatuataulebihpernyataan.Dalamistilah SQL,suatuoperatorlogicalmemeriksaapakahoperandoperandnyaadalah0,nonzero, atau NULL. Suatu nilai 0 berarti salah (false), nonzero berarti benar(true) dan NULL berartitakbernilai. Operatoroperator NOTatau! ORatau|| Deskripsi Melakukansuatulogikanot(mengembalikan'1'jikanilaiadalah0, NULLjikanilaiadalahNULL,jikatidakmengembalikan'0') Melakukansuatuoperasilogikaor(mengembalikan'1'jikasalahsatu argumenataunilaibukannonzeroataubukanNULL,NULL jika salahsatuargumenataunilainyaNULL,jikatidakmengembalikan '0') Melakukansuatuoperasilogikaeksklusifor(mengembalikan'1'jika satudanhanyasatuargumenyangbukan0danbukanNULL,NULL jikasalahsatuadalahNULL,jikatidakmengembalikan'0') Melakukan operasilogikaand (mengembalikan'0' jika salah satu dariargumenadalah0,NULLjikasalahsatuargumenadalahNULL, jikatidakmengembalikan'1')

XOR

ANDatau&&

2.9Memulaidanmengakhirikoneksikedatabaseserver
Untukkoneksikedatabaseserver,AndabiasanyaperlumemberikannamauserMySQL danpasswordnya ketikamenjalankanprogramklienmysql.Jikaserverberjalanpada komputeryangberbeda,Anda jugaperlumemberikannamakomouterataunomor IP komputerserverdatabasetersebut.Pembahasanlebihdetiltentangprogramklienmysql telahdibahasdalampembahasansebelumnya. Begitu Anda mengetahui parameterparameter yang diperlukan, maka Anda dapat PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL27

melakukankoneksikedatabaseserverMySQL,sepertiberikutini:

Tandapromptmysql>menjelaskanpadaAndabahwamysqltelahsiapmenerimaperintah (command)dariAnda.BeberapainstalasiMySQLmemungkinkanAndauntukkoneksike database server sebagai anonymous user (user tak bernama) pada komputer lokal (localhost). Untukmengakhirikoneksidaridatabaseserver,Andadapatmengetikkanperimtahquit, exit,atau(\q),sepertiberikutini:
mysql>q uit

atau
mysql>exit

atau
mysql>\q

Berikut ini tabel yang menampilkan kondisi setiap prompt yang akan Anda lihat, dan kesimpulanmengenaiapayangterjadidengankondisipromptsepertiitudidalammysql: Prompt mysql> > '> > `> Siapmenerimaperintahbaru Menunggubarisperintahberikutnyadarisuatuperintahterdiridaribanyak baris Menunggu baris perintah berikutnya, dengan mengelompokkan sebuah stringyangdiawalidengantandakutiptunggal(') Menunggu baris perintah berikutnya, dengan mengelompokkan sebuah stringyangdiawalidengantandakutipganda() Menunggu baris perintah berikutnya, dengan mengelompokkan sebuah identifierdiawalidengantandabacktick(`) kesimpulan

28PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

2.10Membuatdanmenggunakandatabase
Sebelum Anda dapat membuat sebuah tabel Anda harus terlebih dahulu membuat Database.PerintahSQLdapatAndaketikkandenganhurufbesarmaupunkecil.Hanyasaja di sini kita menggunakan huruf besar agar Anda lebih mudah membedakan antara perintah SQL dengan objekobjek lainnya. Perlu diingat, setelah selesai mengetikkan perintah SQL pada prompt MySQL, Anda wajib mengetikkan tanda titik koma yang menandakanakhirdariperintahSQL.Sintakpenulisanperintahuntukmembuatdatabase sepertiberikutini:
mysql>CREATEDATABASEdatabase_name; Halyangharusdiperhatikandalam penamaandatabaseadalahnamatidakbolehmenggunakan katakatayangmenjadikosakataSQLsepertiselectkarenahalituakanmembuatrancu.Perlujuga diperhatikanhurufbesaratauhurufkecilsebuahnamadatabasekarenapadasistemUNIXhuruf besar dan huruf kecil dibedakan. Pada contoh dibawah ini akan dibuat database dengan nama 'Perpustakaan'dan'perpustakaan'.

Sesudah Anda membuat suatu database, selanjutnya jika Anda ingin 'perpustakaan' menjadidatabaseyangAndaaksessaatinimakaAndadapatmengaksesdatabasetersebut denganperintahsebagaiberikut:
mysql>USEper pustakaan;

AtauAndadapatjugamengaksesdatabaseperpustakaanmelaluicommandlinesebagai

berikut:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL29

2.11Manipulasitabel
Tabeltabeldapatdibuatdandimodifikasijikadiperlukan.JikaAndasudahmemilihatau mengaksesdatabasemakaAndadapatmembuattabelsebagaiberikut.

2.11.1Membuattabel
Setelah Anda memilih Database barulah Anda dapat membuat sebuah tabel, Sintak penulisanperintahmembuattabelsebagaiberikut:
mysql>CREATETABLEnama_tabel( kolom1 tipe_data opsi_kolom,

kolom2tipe_dataopsi_kolom, ..........................., kolomNtipe_dataopsi_kolom, PRIMARYKEY(nama_kolom), INDEX(nama_kolom) )type=tipe_tabel

DalampemakaianpernyataancreatetableAndaakanmenemukan2opsiyangbiasanya menyertaideklarasidefinisikolomyaitu

null/notnull default

Null/notnullmengindikasikanapakahsuatukolomdapatmenerimanilainull(nilaitiada). Jika dinyatakan null berarti null dapat terjadi dikolom tersebut sebaliknya bila diberi atributnotnullmakanilainulltidakbolehpadakolomtersebut. Defaultmenyatakannilaibakuyangakandipakaijikadalamsuatuprosespemasukannilai kekolomtersebuttidakdiberinilai. Contohberikutakanmembuattabeldengannamabuku:

SetelahAndamembuattabel,perintahSHOWTABLESseharusnyamenampilkanoutput sebagaiberikut: 30PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Untuk memeriksa tabel yang telah Anda buat sesuai dengan spesifikasi yang telah ditetapkan,gunakanlahperintahDESCRIBEatauDESC.SebagaicontohjikaAndalupa namakolomatautipekolomdaritabelyangtelahAndabuat.Gunakanlahperintahseperti contohdalamgambarberikut:

2.11.2Menghapustabel
Untukmenghapustabelgunakanperintahberikutini:
mysql>DROPTABLEbuku;

atau
mysql>DROPTABLEIFEXISTSbuku;

2.11.3Merubahtabel
ALTERTABLEmemungkinkanAndauntukmerubahstrukturtabelyangada.Andadapat merubahtabeluntukkeperluan: PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL31

Menambahataumenghapuskolom Merubahnamaataudefinisikolom Menambahataumenghapusindex Menerapkansuatususunanberbedapadabarisbaris Merubahnamatabel

ALTER TABLE bekerja dengan cara membuat salinan tabel dari tabel yang asli yang bersifat sementara (temporer). Proses perubahan tabel dilakukan pada tabel salinan, kemudiantabelaslidihapus,danyangbarudirubahnamanya. KetikaperintahALTER TABLE sedang dieksekusi, tabel asli masih dapat dibaca oleh klienklien. Proses perubahan dan penulisan terhadap tabel dihentikan sampai tabel yang baru siap, dan kemudian secara otomatis diarahkan ke tabel baru tanpa kegagalan dalam proses perubahan. Contohberikutadalahperubahantabeldenganmenambahkolom.

GunakankeywordMODIFYatauCHANGE,jikaAndaakanmelakukanperubahantipe datakolom.MODIFYdanCHANGEmemilikifungsiyangsamayaitumerubahtipedata kolom,hanyasajadenganCHANGEmemungkinkannamakolomjugadapatdirubah.

2.11.4Merubahnamatabel
RENAMEmerubahnamatabel,danjugabekerjadalamperintahALTERTABLE:

Merubahbeberapanamatabelsekaligusdapatdilakukandengansatuperintahsajadimana tabeltabeldipisahakandengantandakoma,sepertiberikut:

32PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Merubahtipedanopsikolomtabeldapatdilakukanjuga bersamaandenganmerubah namatabeldalamsatuperintahsepertiberikutini:

2.12Index
Ketikadatadalamtabelbertambahbesarjumlahnya,prosespembacaandataakanmenjadi lambat. Index memungkinkan nilainilai kolom dapat ditemukan dengan lebih cepat, pengambilanataupembacaandataberdasarkanindexrelatiflebihcepat.Agarperforma queryAndaterjagasecara,sangatlahpentingmengindekskan(indexes)tabeltabelAnda. Indexdapatmelakukanpengunikkan(unique)untukmencegahduplikasi. MySQLmendukungempattipeindex:

Nonuniquesimpleindexes UNIQUEindex,setiapnilaiadalahberbedadariyanglainnya. PRIMARYKEYadalahsuatuUNIQUEkeyyangtidakmembolehkannilaiNULL. FULLTEXTdioptimasiuntukpencarianteks.

Indexdapatdidefinisikanketikatabeldibuat.Inimeliputidefinisiindexdalamperintah CREATETABLE,bersamadenganpendefinisiankolom.Suatudefinisiindexterdiridari suatukatakunciyangmenunjukkantipeindex,diikutiolehsuatudaftarnamanamakolom yangakandijadikanindexdidalamtandakurung.Denganmengasumsikanbahwadefinisi tabelbukutanpaindextampaksepertiberikut:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL33

2.12.1Nonuniqueindex
Untuk membuat tabel dengan dengan kolomkolom yang sama seperti tabel buku sebelumnya,tetapidengansuatuNonuniqueindexpadakolom'tahun',klausaINDEX disertakandalamperintahCREATETABLEberikutini:

2.12.2Uniqueindex
Uniquemelakukanpengunikkankolomdanmencegahduplikasi.Inibermanfaatkhususnya ketikamenetapkannilainilaiuntukproseslookup,sepertiid.

2.12.3PrimaryKeyindex
Dalamsebuahtabelhanyaadasatubuahprimarykey.Primarykeyada;ahsuatuUNIQUE indexyangtidakmengijinkannilaiNULL.

Indexdapatditambahkanpadasuatutabel.Sebagaitambahan,prosespenambahanindex dapatdilakukandenganmenggunakanperintahALTERTABLE,sepertiberikut:
mysql>AL TERTABLEbukuADDPRIMARYKEY(id)

34PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

2.12.4Menghapusindex
SuatuindexdapatdihapusdengandenganperintahDROPINDEXatauALTERTABLE, sepertiberikut:
mysql>DROPINDEXtahunONbuku mysql>ALTERTABLEbukuDROPINDEXtahun mysql>ALTERTABLEbukuDROPPRIMARYKEY

Primarykeyindexhanyadapatdihapusjikakolomyangmerupakanindextersebuttidak memilikiatributatauopsiauto_increment.

2.13MySQLquery
MySQLmendukungpenuhANSISQL92.ReferensiSQLuntukMySQLadalahreferensi SQLyangumumyangdigunakansecaraluas.SQLadalahbahasaquerydatabaseyang serupadenganbahasainggrisyangterdiridarisusunankatakerja.Setiapsusunankata kerjaini,diawalidengansebuahperintahSQLyangdiikutiolehkeyword,literals,dan indentifiers,ataupuctuation. DalamabagianinimenggambarkanprinsipprinsipdasarpenulisanperintahperintahSQL, bekerjadenganberbagaiquery,daridasarhinggayangkompleks.Querymenggambarkan beberapahaltentangklienmysql:

Ketika Anda menuliskan dan mengeksekusi perintah, program klien mysql mengirimkannyakeserveruntukdieksekusidanmenampilkanhasilnya,kemudian mencetakprompt mysql> kembaliuntukmenunjukkanbahwaklienmysqlsudah siapmenerimaperintahlainnya. Klienmysqlmenampilkanoutputdariquerydalambentuktabular(terdiridaribaris dankolom).Barispertamamenunjukkannamanamakolomtabel.Danbarisbaris berikutnyadalahhasilquery. Klien mysql menampilkan juga informasi mengenai berapa banyak baris yang dikembalikandanberapalamaquerytersebutdieksekusi,yangmemberikanAnda idepemikirantentangperformaserver.

2.13.1PerintahSELECT
Tidak ada gunanya menyimpan data kedalam database kecuali Anda bermaksud untuk menampilkandanmelakukansesuatuterhadapdatatersebut.Inilahfungsidariperintah SELECT.SintaksdasardariperintahSELECTtampaksepertiberikutini:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL35

SELECTdaftar_pilihan_kolomFROMdaftar_tabel WHEREbatasan_batasan_utama GROUPBY grup_kolom ORDERBY urutan_kolom HA VINGbatasan_batasan_tambahan LIMITjumlah

daftar_pilihan_kolom,menunjukkankolomkolomapasajayangakandipilihatau ditampilkan daftar_tabel,menunjukkandaritabelapasajabarisbarisdatadiambilataudipilih batasan_batasan_utama, menunjukkan apa saja kondisikondisi baris data yang harusterpenuhi grup_kolom,menunjukkanbagaimanamengelompokkanhasilhasilquery urutan_kolom,menunjukkanbagaimanamengurutkanhasilhasilquery batasan_batasan_tambahan,menunjukkanapasajakondisikondisitambahandari barisdatayangharusterpenuhi jumlah,menunjukkanbatasdarihasilquery.

2.13.1.1Pengambilandatasederhana Perintah SELECT sederhana untuk mengambil data dari suatu tabel dapat Anda lihat dalamcontohberikutini:

Untukpengambilandataberdasarkankolomkolomtertentu,tampaksepertiberikut:

36PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

2.13.1.2MembatasisuatuperintahSELECTdenganWHERE AndadapatmengambilataumemilihhanyabarisbarisdatatertentusajadaritabelAnda:

2.13.1.3MengurutkanpemilihandatamenggunakanORDERBY Dalam contoh sebelumnya, hasil barisbaris data yang ditampilkan tidak dalam urutan tertentu. Biasanya lebh mudah untuk menguji output dari query jika barisbaris data diurutkan.Untukmengurutkanbarisdata,gunakanklausaORDERBY,sepertiberikutini:

Pengurutanbakuadalahascending,dengansusunanurutandimulaidarinilainilaiyang palingkecil.Untukmengurutkandalamsusunanyangberlawanan(descending),gunakan katakunciDESCpadanamakolomyangakanAndaurutkan,sepertiberikutini:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL37

2.13.1.4MembatasipengambilandatamenggunakanklausaLIMIT KlausaLIMITmemungkinkanAndauntukmembatasioutputdariquery.KlausaLIMIT sangat berguna, khususnya bersama dengan klausa ORDER BY. Ini berguna untuk mengambil barisbaris data berdasarkan posisinya dalam sekumpulan baris data hasil pemilihan. LIMITmungkindiberikandengansatuatauduaargumen,yangmanaberupabilangan bulat:

LIMITjumlah_baris

LIMITjumlah_diabaikan,jumlah_baris

jumlah_baris menunjukkan berapa banyak baris yang akan ditampilkan, sedangkan jumlah_diabaikan menunjukkan berapa banyak baris data yang pertama dari hasil pengambilan data yang harus diabaikan untuk tidak ditampilkan. Berikut ini contoh penggunaanklausaLIMITuntukmenampilkanduabarisdatayangpertama:

JikaLIMITdiikutiolehduabilanganbulat, jumlah_diabaikandanjumlah_baris,LIMIT akanmengabaikansejumlahbarisdatayangpertamayangditetapkanolehbilanganbulat yang pertama ( jumlah_diabaikan), dan hanya akan menampilkan sejumlah baris data berikutnya sebanyak yang ditetapkan oleh bilangan bulat yang kedua ( jumlah_baris). 38PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Untuk mengabaikan dua baris data yang pertama dan menampilkan dua baris data berikutnyadapatAndalihatdalamcontohberikut:

2.13.1.5MengelompokkanpemilihanbarisdatamenggunakanklausaGROUPBY KlausaGROUPBYdigunakanuntukmemperolehsuaturangkumanatauringkasanyang menghasilkannilainilaiuntuksubgrupdarisekumpulanbarisdatayangdipilih.

Sebagaicontohkitamemilikitigabuahtabelyangterdiridaritabelmahasiswa,matakuliah danmatakuliah_diikuti_mahasiswa. Skenarionyaadalahkitaakanmenampilkandaftarmahasiswabesertajumlahmatakuliah yangdiikutinya.Untukitujalankanlahqueryberikutini:

Danhasilnyasebagaiberikut:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL39

2.13.2PerintahINSERT
Perintah INSERT digunakan untuk menambahkan data baru kedalam tabel. Perintah INSERTmemilikiduabuahformatpenulisansebagaiberikut:
INSERTINTOnama_tabel(daftar_kolom)VALUES(daftar_nilai); INSERTINTOnama_tabelSETnama_kolom=nilai_kolom;

Padaformatyangpertamanama_tabelmenunjukkannamatabelyangakanditambahkan data kedalamnya, daftar_kolom menunjukkan namanama kolom dari tabel yang dipisahkan menggunakan tanda koma, selanjutnya daftar_nilai adalah nilainilai (dipisahkandengantandakoma)yangberhubungandenganmasingmasingkolomyang disebutkan dalam daftar_kolom (jumlah kolom harus sama dengan jumlah nilai).Pada formatyangkeduasetelahklausaSETadalahdaftarpasangannamakolomdannilainya masingmasingyangdipisahkanmenggunakantandakoma.Salahsatudarikeduaformat penulisantersebutmemungkinkanuntukmenambahkanbeberapadatasekaligusdengan sebuahperintah Berikut ini contohcontoh penulisan perintah INSERT dalam proses panambahan data kedalamtabelmahasiswa.

40PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Format penulisan perintah INSERT dengan menggunkan klausa SET tampak sebagai berikut:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL41

JikaAndainginmenambahkanbeberapadatasekaliguskedalamtabelmahasiswadengan sebuahperintahsaja,makaAndadapatlakukanhaltersebutsebagaimanadalamcontoh berikutini: 42PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

2.13.3PerintahREPLACE
PerintahREPLACEmemilikiformatpenulisanperintahyangsamadenganINSERT,yaitu sebagaiberikut:
REPLACEINTOnama_tabel(daftar_kolom)VALUES(daftar_nilai); REPLACEINTOnama_tabelSETnama_kolom=nilai_kolom;

Perintah REPLACE mengembalikan sebuah informasi yang menunjukkan jumlah baris yang dipengaruhi. Jikajumlah baris yang dipengaruhi oleh perintah REPLACE adalah satu,makabarisdatahanyaditambahkankedalamtabeltanpaadaprosesmenggantibaris datayangada.JikajumlahbarisdatayangdipengaruhiolehperintahREPLACEadalah duabaris,makaadasebuahbarisyangdihapussebelumprosespenambahanbarisdata dilakukan,lihatcontohberikutini:

Keuntungan dari menggunakan perintah REPLACE adalah kita dapat menjalankan perintahDELETEdanINSERTsekaligusdalamsebuahoperasitunggal.Disinitidakada kebutuhanuntukmelakukanpengunciantabelsecaraeksplisitsebagaimanayangmungkin adaketikaAndamemutuskanuntukmemisahkanperintahDELETEdanINSERT.

2.13.4PerintahUPDATE
Perintah UPDATEdigunakan untukmerubah isidaribarisbarisdata yangada. Untuk menggunakannya,sebutkannamatabelyangakandirubahisibarisbarisdatanya,sertakan klausaSETyangdiikutidengandaftarpasangannamakolomdannilainya,danbiasanya perintahUPDATEdiikutidenganklausaWHEREyangmenentukanbarisbarisdatamana sajakahyangakandirubah.BerikutiniformatpenulisanperintahUPDATE:
UPDATEnama_tabelSETnama_kolom1=nilai1 , nama_kolom2=nilai2.........WHERE.....;

Sebagaicontohdalamtabelmahasiswa,kitaakanmerubahnilaikolomalamatdarisebuah barisdatayangmemilikimahasiswa_id=1016,sebagaimanayangtampakberikutini:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL43

2.13.5PerintahDELETE
Untukmenghapusbarisbarisdatayangadadalamtabel,gunakanlahperintahDELETE. PerintahDELETEmemungkinkanpenggunaanklausaWHEREuntukmenentukanbaris barisdatamanasajayangakandihapus.JikaAndatidakmenyertakanklausaWHERE maka akan berakibat seluruh baris data yang ada dalam tabel akan dihapus, Untuk menghapusseluruhbarisdatayangadadalamtabelformatpenulisannyasepertiberikut ini:
DELETEFROMnama_tabel;

Sedangkanuntukmenghapusbarisbarisdatatertentusaja,formatpenulisannyaseperti berikutini:
DELETEFROMnama_tabelWHERE......;

Sebagaicontoh,kitaakanmenghapusbarisdatayangadadalamtabelmahasiswayang memilikimahasiswa_id=1016,sepertiberikutini:

44PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

2.14Jointabel
Pada dasarnya join tabel adalah mengkombinasikan dua buah tabel berdasarkan perbandingannilainilaikolomyangdipilih.Jointabelmenghasilkanbarisbarisdatayang hanya ada selama query itu dibuat atau dijalankan. Menggunakan join untuk secara temporermenciptakanbarisbarisdatayanglengkapdarisuatudatabaseyang membagi datadata yang berhubungan melalui atau ke beberapa tabel terpisah (hasil dari normalisasi).

2.14.1Crossjoin
Crossjoin antar dua buah tabel, mengambil data dari baris data dalam tabel 1 dan menggabungkannyadengan/kesetiapbarisbarisdatadaritabel2.Halinidapatdilakukan denganduaformatpenulisan,seperticontohberikut:

mysql>SELECTnama_matakuliah,nama_depanFROMmatakuliah, mahasiswa; mysql>SELECTnama_matakuliah,nama_depanFROMmatakuliahCROSS JOINmahasiswa;

2.14.2InnerJoin
DalamsuatuInnerjoin,perbandingandibuatantaraduakolomyangmemilikinilaiyang sama. Gunakan metode ini untuk memilih kolomkolom tertentu dari kedua tabel, dan hanyabarisbarisdatayangbenarsajayangdigabungkan.Innerjoindapatditulisdengan menggunakanduaformatpenulisanyangbrebeda.Padasalahsatuformatdaftartabeltabel yangdigabungkandipisahkandengantandakoma.Sedangkanpadaformatpenulisanyang lainnyamenggunakanklausaINNERJOIN.Keduaformatakanmenampilkanhasilyang sama:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL45

Danhasilquerysebagaiberikut:

2.14.3OuterJoin
Gunakan outer join untuk menuliskan join tabel yang menyediakan informasi tentang barisbarisdatayangtidaksesuaiatauhilang.Sebuahouterjoindapatmenemukanbaris barisdatayangsesuai(sepertiinnerjoin),tetapidapatjugamengidentifikasibarisbaris datayangtidaksesuai.Selanjutnya,denganmenyertakanklausaWHERE,suatuouterjoin dapatmenyeleksibarisdatayangsesuaiuntukhanyamenampilkanbarisbarisdatayang tidaksesuaiatautidakcocok. Dua buah bentuk outer join yang umum yaitu left join dan right join. Disini dalam penulisan perintahnya menggunakan klausa LEFT JOIN atau RIGHT JOIN dari pada menggunakanoperatortandakomaataiklausaINNERJOIN.Leftataurightjoindapat menjawabpertanyaanpertanyaanyangsama,danhanyasedikitberbedadalampenulisan perintahnya. 2.14.3.1LeftJoin LEFTJOINmenampilkannilainilaiyanghilangdan/atauyangtidaksesuaidalamtabel kedua:

46PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Leftjoinsangatbergunaketikakitainginmendapatkanhanyabarisbarisdatayangada dalam tabel sebelah kiri yang tidak muncul dalam tabel sebelah kanan. Dengan menambahkanklausaWHEREyanghanyaakanmencaribarisbarisdatayangadadalam tabel sebelah kanan yangmemilikinilai NULL, maka penulisan perintah danhasilnya akantampaksepertiberikut:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL47

2.14.3.2RightJoin RIGHTJOINmenampilkannilainilaiyanghilangdan/atauyangtidaksesuaidalamtabel pertama:

2.15Referensi
MySQLManual(http://mysql.com)

48PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

III.AdministrasiMySQL

3.1CaraDownloaddanInstallMySQL
Step1:Sebelummenginstall,AndaharusmendownloadversiterakhirdariMySQL.Pada contohiniversiyangkitagunakanversi4.0.10yangdidapatdarisituswebMySQL.
Catatan:MenginstalljugadimungkinkandaripaketRPM,tapicaraterbaikadalahdenganmeng compilesourcenyasecaralangsung,karenametodeinidapatmemberikanfleksibilitasyanglebih baik,opsiopsiyangkitatentukansendiridankecepatan.

Step 2 : Anda harus menentukan terlebih dahulu dimana Anda akan menyimpan file downloadan.Padacontohinstallasiini,diasumsikanfiledownloadtersebutterletak di /software/.Jikadirektoritersebutbelumada,buatlahdenganperintah:

SekarangkitaakanmembuatfolderuntukmenaruhfileMySQLdarihasildownloadan. Ketikperintahberikut:

Catatan:PanduaninstalasiberikutinimendukungPerldanOpenSSL

Step3:JikaAndasudahmemilikifileinstallasiRPM,sebaiknyaAndamenguninstall RPM tersebut sebelum memulai proses. Hal pertama yang harus dilakukan untuk memeriksa apakah file RPM MySQL tersebut sudah terinstall atau belum, dengan mengetikkanperintah: rpm -qa | grep -i mysql Jika tidakadasesuatupunyangditampilkan,berartiRPMMySQLbelumterinstall, dan Andabisalangsungmelanjutkankestep4.Jikatidak,perhatikanbaikbaikdaftaryang ditampilkanolehperintahtadi,yangbiasanyaterlihatsepertiberikut:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL49

Untukmenghapus,gunakanperintahrpme[namapaketnya].Ulangiperintahuntuktiap tiappaket.Contoh:

Jikaragu,Andabisamenyertakanseluruhentrytermasuknomorversi.Sebaiknya,Anda perlumengetahuikeseluruhanentrysecarajelasterlebihdahulu,yangsudahditampilkan sebelumnyaseperticontohtadi.


CatatanPenting: UrutanyangharusAndaikutiyaituuntukmenghapusMySQLpalingterakhir, dengan MySQLclient sebelumnya. Paket lainnya tidak masalah jika di hapus terlebih dahulu. Dibawahinicontohurutanurutanpenghapusanpaket:

Jika Anda mendapatkan error, hampir pasti terjadi dikarenakan masalah dependensi (ketergantungansatupaketterhadappaketlain).Erroryangmungkinterjadisepertiberikut ini:

Untuk mengatasi hal tersebut, coba hapus terlebih dahulu paket yang bergantung pada paket yang akan Anda hapus. Jika masih gagal dan Anda mendapatkan dependencies errors,hapuspakettersebutdenganmenggunakanperintah:
shell>r pmenodepsnamapaketnya

Kitajugaharusmenghentikanservicemysqljikasedangberjalandenganperintah:
shell>servicemysqldstop

atau shell>pkillmysql Step4:Stepselanjutnyayaituunpack,compiledaninstallMySQLdarifilesourceyang 50PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

didapatkandariprosesdownloadsebelumnya.Ketikperintahberikut:

shell>tarzxvf*.tar gz . shell>cdmysql4.0. 1 0gamma shell>./configureprefix=/usrsysconfdir=/etc localstatedir=/var/lib/mysqlmandir=/usr/share/man inf odir=/usr/share/inf owithmysqlduser=mysqlwithopenssl withtcpport=3306withunixsocket path=/var/lib/mysql/mysql.sock shell>make shell>makeinstall shell>cpsupportfiles/mysql.server/etc/rc.d/init.d/mysqld shell>chmod7 55/etc/rc.d/init.d/mysqld shell>chkconfigaddmysqld shell>cd.. shell>r mrfmysql4.0. 1 0gamma shell>cd..

Step 5 : Setelah instalasi selesai, kita perlu men setup MySQL dengan mengetikkan perintah:

shell>groupaddmysql shell>useraddmysqlcMySQLServerd/var/lib/mysqlg mysql shell>scripts/mysql_install_db shell>chownRmysql:mysql/var/lib/mysql shell>ser vicemysqldstart shell>/usr/bin/mysqladminurootpasswordnewpassword

Step 6 : Jika mysql server gagal merespon saat mencoba start, copy file .cnf ke /etc/my.cnf.Konfigurasidarimysqlterdapatpadafiletersebut. mysqlsebaiknyamulaiaktifsaatsistemboot.

3.2DirektoriDataMySQL
Direktoridatatempatdimanamysqlservermenyimpandatabasedatabasedanfilestatus, serta menyediakan informasi tentang operasi server. Mengetahui dan mengerti tentang strukturdanisidaridirektoridatamerupakanhalyangpentingagarAndadapatmemahami bagaimana server menggunakan file system untuk merepresentasikan databasedatabase dan tabletable,sertadimanaloglog(catatancatatan)diletakkan.Secaradefault,semua datadiaturolehmysqlserver.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL51

3.2.1LokasiDirektoriData
Defaultnya,direktoridatadicompileke: /var/lib/mysql atau /usr/local/mysql Letakdaridirektoridatasecaraeksplisitdapatdiarahkandenganmerubahdatadirdifile my.cnf

3.2.2StrukturDirektoriData
MySQL direktori data mengandung semua database dan tabletable yang diatur oleh server.Merekadisusunsepertistrukturdiagrampohon,yangdiimplementasikandengan mengambilkeuntunganstrukturhirarkidariUNIXatauMs.Windowsfilesistem.

Tiaptiapdatabasedisesuaikandengandirektoridibawahdirektoridata Tabletable bawaan database disesuaikan dengan filefile dibawah direktori database

3.2.3BagaimanaMySQLServermemberikanakseskeData

52PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

DimanaTab1atautablelaindalamgambarsebelumnyadijelaskansbb:

3.2.4RepresentasidariTabelDatabase
Tiap tabel dalam database yang ada, memiliki tiga file yang terletak pada direktori data.Tigafilepadadirektoritersebutyaitu:fileform(deskripsi),filedatadanfileindex. Nama pada file tersebut menunjuk ke table dan masingmasing nama ekstension mengindikasikantipefile.

3.3StartUpdanShutdownMySQL
TujuandariadministrasiMySQLyaituuntukmemastikanbahwaserverberjalandanclient dapatmengaksesnya. Adakalanyaserversebaiknyadimatikan(JikaAnda menempatkandatabase,suatu saat Andatidakinginservermengupdatetabeldidatabasetersebut).Untukmengatasikasus tersebut, Anda perlu melakukan startup (mengaktifkan) atau shutdown (mematikan) server,jadiAndaharusmemilikikemampuanuntukmelakukansalahsatudaritugastugas tadidanmemutuskanmanayangperludilakukanuntukkasustersebut.

3.3.1MySQLserverdanSkripskrip
MySQL server (mysqld) adalah program utama yang banyak bekerja dalam instalasi MySQL. Server adalah kumpulan dari beberapa skrip yang saling berhubungan yang melakukanoperasisetupketikaAndamenginstall MySQL,atauprogramprogramyang membantuAndadalammenghidupkandanmematikanserver.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL53

3.3.1.1SekilaspandangterhadapSkripServerside Programprogram MySQL memiliki opsi berbeda. Tetapi, semua program tersebut menyediakanopsihelpyangbisaAndagunakanuntukmelihatpenjelasandariprogram opsitersebut.
shell>mysqldhelp

Dalamcommandlineataudalamfileopsi,opsidefaultdarisemuastandardprogramdapat diabaikandenganmelakukanopsitertentu.Tabeldibawahinimemberipenjelasansingkat dariserverMySQLdanprogramserverrelated: Serversidescript mysqld Penjelasan Sebuah daemon SQL, atau mysql server, program ini harus running agar client dapat mengakses database dengan melakukan koneksikeserver. Versi dari server yang menyediakan feature tambahan Script untukmengaktifkanserver,mysql_safe akan mencoba menghidupkan mysqldmax jikaada,danmysqld Script untuk mengaktifkan server, script ini digunakanpadasistemoperasiyangmemiliki direktori run berisi banyak script berfungsi untukmengaktifkan systemservices padarun leveltertentu. Script inijugaberfungsiuntuk memanggilmysqld_safeuntuk mengaktifkan mysqlserver Script untukmengaktifkanserver,yangdapat mengaktifkandanmenonaktifkanmultiserver yangdiinstalldisistem. Script inimembuat grant tablemysqldengan privileges yang masih standard. Biasanya dieksekusisekalisajaketikamenginstallmysql

mysqldmax mysqld_safe

mysql.server

mysqld_multi

mysql_install_db

54PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

mysql_fix_privilege_tables

Skrip ini digunakan untuk mengupdate tiap perubahan yang terjadi di table grant mysql versibaru.Skripinidijalankansetelahselesai melakukaninstalasiupgrade

3.3.1.2.MengaktifkanServer INVOKE(memanggil)mysqldsecaralangsung.Iniadalahsalahsatucaramutakhiryang umum. INVOKEmysqld_safeatausafe_mysqld.mysqld_safemencobauntukmenentukanlokasi dari program server dan direktori data kemudian invoke server sesuai opsi yang mengggambarkannilaiyangditentukansebelumnya(diskripmysqld_safe).

3.3.1.3Jikatidakbisaterhubungkeserver Adakalanyakitamenghadapisituasidimanakitatidakdapatterhubungkeserver,karena kasussepertiberikut:


Lupapasswordroot KoneksikelocalhostmelaluifiledomainsocketUNIX,di/tmp/mysql.sock

LupaPasswordroot Passwordroot,bisasajaterlupakarenakesalahanyangtidakdisengaja. Dalamkasusini,Andaperlumengambilalihkendaliserverkemudianmeresetpassword. Langkahlangkahnyasbb:

Matikanserver

Andabisamematikanserverdenganmenggunakanperintahkilldiikutinomor prosesIDnya.Contoh:

shell>kill5662

Catatan : Untuk melihat proses ID (PID) dari proses yang aktif, dalam kasus ini
apakahmysqlaktifatautidakdenganperintah:

shell>pswaux|grepmysql

RESTARTserverdengantambahanopsiskipgranttables PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL55

Opsitadidigunakanuntukmemberitahuserveragartidakmengaktifkangrant tabel saat melakukan verifikasi koneksi. Hal ini mengizinkan Anda untuk terhubungkeservertanpapasswordroot.SetelahAndaterhubung,barulahAnda bisamerubahpasswordroot.

Setelahmerubahpasswordgunakanperintahflushprivileges. RestartServer.

Ketikafilesockethilang JikaAndatidakbisamelakukankoneksikeserverdikarenakanfilesocketyanghilang, Andabisamendapatkankembalidenganmerestartserver,karenaservermembuatulang kembalisetiapmelakukanstartup,TrikdisinibahwaAndatidakbisamenggunakansocket untukmelakukankoneksikarenafilesockethilang,makaAndaharusmelakukankoneksi melaluiTCP/IP:


mysqladminurootppasshipaddr/hostnameshutdown

Restartkembaliserversetelahperintahtadi.

3.4ManajemenUserAccountMySQL
BagianinimenjelaskanbagaimanacarauntukmelakukansetupaccountpadaMySQL server.Bagianinijugamenjelaskanbagaimanacarayangamandalammembuataccount barusertacarauntukmenentukanhakizintiaptiapuser.

3.4.1UsernamedanPassword
AccountMySQLdigunakanuntukmendefinisikanusername,hostklienataubanyakhost yangmenentukanusermanasajayangbisaterhubungkeserver.Accountjugamemiliki password. Ada beberapa perbedaan antara mysql dan sistem operasi dalam membuat usernamedanpassword.

Username,olehmysqldigunakanuntukotentikasi,tidakadahubunganantaralogin name diSistemOperasisepertiMs.WindowsatauUNIX.PadaUNIX,umumnya, secaradefault,MySQLklienbisamenggunakanusernameUNIXsebagaiusername MySQL,demikemudahanpenggunaannya.Defaulttersebutbisadiubahdengan mudah, dengan opsi u atau user. Artinya setiap orang bisa dengan mudah terhubung atau menggunakan database yang ada di mysql, sehingga database menjadikurangaman,kecualisetiapuserdimysqlsudahmemilikipassword. Panjangkarakterdariusernamemysqlmaximum16digit.Usernamepadasistem operasimungkinbisaberbedapanjangnya.

56PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

PasswordMySQL tidakada hubungannya dengan password saat Anda login ke sistemoperasi. EnkripsipasswordpadaMySQLmenggunakanalgoritmanyasendiri.Enkripsinya berbedadenganenkripsidisistemUNIX.EnkripsidiMySQLmenggunakanfungsi PASSWORD() . Password pada sistem UNIX di enkripsi menggunakan fungsi ENCRYPT(). Mulai versi 4.1, MySQL menggunakan metode yang lebih bagus dalam metode autentikasi, dengan melakukan proteksi passwordselama proses koneksi.Halinimenjadikannyalebihaman,bahkanjikapaketTCP/IPdibajak atau database mysql di capture. Pada versi sebelumnya, password yang sudah disimpanbahkandalamformyangterenkripsi,pengetahuantentangenkripsidata tersebutdapatdigunakanuntukkoneksikeMySQLserver.

Ketika Anda sudah mengaktifkan mysql server daningin masuk ke lingkungan mysql, Andabisamenggunakancommandlineuntukmenentukanaccount: [root@smsmysql]#mysqluirfanpdatabase_saya
Enterpassword:

Andadimintauntukmemasukkanpassword,jikausertersebutbelummemilikipassword, cukupdenganmengetikkanperintah: [root@smsmysql]#mysqluirfandatabase_saya Pada perintah diatas, setelah u adalah nama user yang terdaftar di mysql server, dan database_sayaadalahnamadatabaseyangbisadiaksesolehusertersebut. Pada beberapasystem, library nya memanggil MySQL yangsecara otomatismengeset batasuntukpengisianpassworddi promptnyasebatasdelapandigit.Masalahsepertiitu ada pada library system, bukan MySQL. Untuk mengatasinya, ubahlah password di MySQLmaksimaldelapandigit.

3.4.2Menambahuseraccountbaru
Untukmembuataccountbaru,adaduacara:

MenggunakanstatementGRANT MemanipulasilangsungMySQLtableAgrant

Metode yang lebih disarankan adalah dengan menggunakan statement GRANT, karena PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL57

lebih ringkas, dan kemungkinan lebih sedikit mendapatkan kesalahan. GRANT mulai tersedia pada MySQL versi 3.22.11. Sintaksnya secara jelas digambarkan di MySQL LanguageReferenceyangbisaAndalihatdihttp://dev.mysql.com/doc/refman. Opsiyanglainadalahdenganmenggunakanbeberapatoolsyangtersediadaripihakketiga. ToolstersebutbiasanyamenyediakankemampuanuntukadministrasiMySQL.Contohnya sepertiPHPMyAdmin. Contoh berikutini,adalahbagaimanacaramenambahuser baru.Untukmelakukannya AndaharusterhubungkeMySQLsebagaiuserroot.Rootadalahuserdenganstatus/hak palingtinggidalamsistemmysql.

Jikaroottelahmemilikipassword,Andaharusmenambahopsip.Denganperintahtadi kitaakanmasukkelingkunganmysqlserversebagairoot.Setelahterhubung,Andabisa menambahaccountbaru.StatementberikutinimenggunakanGRANTuntukmensetup nya: Maksuddariperintahperintahdiatasyaitu:

Duaaccountmemilikiusernamesarahdanpasswordmumtaza.Keduausertersebut memilikiprivilege(hak)penuhuntukmelakukanapasajasepertisuperuser(root). Satu account (sarah@localhost) hanya bisa digunakan saat Anda login di komputer local (localhost), sedang satu account lagi (sarah@%) bisa dari host(komputer)manasaja.Kadangdiperlukanuntukmemilikiaccountyangbisa terhubung ke mysql dari mana saja. Jika user sarah tidak memiliki account localhost,makaketikausertersebutlogindilocalhostdiaakandiperlakukanseperti anonymoususer,yaituuseryangsecaradefaultdisediakansaatkitamenjalankan mysql_install_db waktu menginstall mysql. Alasannya karena anonymous user lebihsesuainilaikolomhostnya,danjugasaatpenyusunanbarisditableterletak lebihawal. Accountyangberikutnya,usernamenyaadalahadmin,tanpapassword.Accountini

58PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

hanyabisadigunakandarilocalhost.Denganpemberian privileges RELOADdan PROCESS.Privilegeinimemberikanuseradminkemampuanuntukmengeksekusi mysqladminreload,mysqladminrefresh,mysqladminflushxxx,sepertiperintah yangadapadamysqladminprocesslist.Userinitidakdiberikanhakuntukmeng aksesdatabase.AndabisamenambahkanhaktersebutdenganstatementGRANT nantinya.

Userberikutnyaadalahdummytanpapassword.Userinijugahanyabisaterkoneksi melaluilocalhost.Tidakdiberikanhakapapun.Perintah USAGEbergunauntuk membuat account baru tanpa memberi hak apapun terhadap user yang dibuat tersebut, jadi hanya membuat account saja. Privileges /hak global dari user ini adalahN.Andatetapbisamerubahdanmemberikan priveleges secaraspesifik nantinya.

AlternatifdariperintahGRANTyaituperintahINSERT,sepertiperintahquerybiasa,yang digunakanuntukmenambahdataketabelGRANT.

KegunaandariFlushPrivilegesyaituuntukmemberitahuserveragarmembacakembali tableGRANT,jikatidakmakaperubahantidakberlakusampaiAndamerestartkembali server.Tapi,denganperintahGRANT,FlushPrivilegestidakdiperlukan. Fungsi PASSWORD() diatas, digunakan untuk mengenkripsi password saat melakukan prosesINSERT,tapipadaperintahGRANT,fungsiPASSWORD()tidakdiperlukan. Nilai Y yang dimasukkan saat proses INSERT tadi, untuk mengaktifkan account privileges. BanyaknyanilaiYyangdimasukkanbergantungpadaversidatabasemysql PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL59

Anda.Versisebelumnya(3.22.11)lebihsedikitkolomprivilegesdaripadaversi4.0.x. PadaprosesINSERTuntukuserdummy,hanyahost,userdanpasswordyangdiberinilai, sedangyanglainnyatidak.KolomyangtidakdiberinilaipadasaatprosesINSERTakan diberinilaidefaultN.HalinisamadenganstatementGRANTUSAGEsebelumnya. 3.4.2.1AkseskeDatabase Pada contohselanjutnya, kita akan membuattiga account, danmemberikan izin untuk mengakseskedatabaseyangspesifik.

Tiga account tadi adalah user yang sama, yaitu ismail dengan password 4bd4nsy4kr. Penjelasandaritigastatementtadisebagaiberikut:

Userinidapatmengaksesdatabasemahasiswa,hanyadarilocalhost. Account yang kedua, dapat mengakses database finance, tapi hanya dari host nf.com Account yang ketiga, dapat mengakses database pustaka tapi hanya dari host server.domain

3.4.2.2AksesTabel Izinaksestabledigunakanuntukmengaturizinaksestableyangterdapatpadadatabase yangditentukan,konfigurasiaksesiniterletakpadatabletables_privpadadatabasemysql. TabletersebutmenyediakanperintahizinaksesSELECT,INSERT,UPDATE,DELETE, CREATE,DROP,GRANT,REFERENCES,INDEXdanALTER. 60PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Untukmelakukanizinaksestable,gunakanperintahberikut:

stmikadalahnamadatabase,danmahasiswaadalahtablenya. Perintah diatas, maksudnyayaitu,user irfanhanyadapat melakukanperintahSELECT padatablemahasiswa.

3.4.2.3AksesKolom Sepertinamanya,izininihanyaakanmembolehkanmelakukanakseskekolom/fieldyang disebutkansaja.Konfigurasiaksesiniterletakpadatablecolumns_priv. IzinaksesnyaantaralainSELECT,INSERT,UPDATEdanREFERENCES. Contohpenggunaannya:

Artinya,userdiatashanyadapatmelakukanperintahUPDATEsajapadafieldnama,di tablemahasiswa. Andajugadapatmelakukankombinasiantaraperintahuntukmengaksestabledanfield, misalAndainginbisamelakukanSELECTataumelihatsemuafieldyangadapadasuatu table,tapihanyafieldtertentusajayangbisadiUPDATE.Contoh:

3.4.3MenampilkanIzinAkses
Untukmengetahuiizinaksespadauser,ketikkanperintahberikut:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL61

Hasil yang Anda dapatkan mungkin berbeda, tergantung pada izin akses yang Anda lakukan sebelumnya. Untuk contoh diatas, keluaran yang dihasilkan sesuai dengan pengesetanGRANTUSAGEuntukuserdummysebelumnya.

3.4.4MenghapusAccountUser

PenggunaanRevoke REVOKEmerupakankebalikandariGRANT,yaituuntukmenghapusizinaksespadauser tertentuyangsebelumnyasudahdiberikan. Untukmenghapusizinaksessecarapenuh,gunakanperintahberikut:

Perintahdiatasakanmencabutlagiizinaksespenuhusersarah. AndajugabisamenghapususerdenganmenggunakanperintahDELETE:

Perintahtadiakanmenghapususerumam.Walaupunusertersebutsebelumnyadiberihak untukmengaksessuatutable,tapidengandihapuskeberadannyadaritableGRANTmysql, diatetaptidakakanbisamasuklagi(login)keserver. Untukmenghapusakseskedatabasegunakanperintahberikut:

62PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Perintahtersebutakanmenghapusizinakseskedatabasemysql. Untukmenghapusizinaksestablegunakanperintahberikut:

Perintahtersebutakanmenghapusizinaksesuserirfanpadatablemahasiswadidatabase stmik. Untukmenghapusizinaksesfieldgunakanperintahberikut:

Perintah tersebut akan menghapus izin UPDATE field nama pada table mahasiswa di databasestmik. Selainbisamenambah,mendeletedanmemberiizinaksespadauseruserdiMySQL,Anda jugabisamelakukanpantauanterhadapuserusertersebutdenganmengetikkanperintah berikut:
mysql>SHOWPROCESSLIST ;

Padatampilandiatas,nampakuseruseryangsedangmengaksesMySQLSever.Perintah tersebut akan menampilkan hasil yang berbeda jika dilakukan oleh user yang tidak memilikiakses superprivileges. Dengankatalain,userbiasahanyaakanmenampilkan dirinyasendirisaatmenampilkanhasildariperintahtersebut.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL63

SelanjutnyasetelahAndamengetahuiuserapasajayangsedangaktifmengaksesserver, Andadapatmelakukanpengontrolanterhadapusertersebutdenganmengetikkanperintah KILLdilanjutkandenganiddariusertersebutyangnampakpadatablediatas. KILLdigunakanuntukmemutuskanhubungansementarasampaiusertersebutmelakukan koneksilagi. Sebagaicontoh,usertamumelakukankoneksikedatabasemysqlyangseharusnyatidak dilakukannya.Andadapatmemutuskankoneksitersebutdenganmengetikkanperintah:

BegituusertamuinginmelakukanperintahSELECT,hasilnyaakantampaksepertiini:

3.4.5Membatasijumlahpenggunaanresource
Andabisamembatasipenggunaanresourcedariserveruntukmasingmasingaccount,sbb

Jumlahqueryyangbisadihasilkanolehaccountperjam Jumlahpengupdateanyangbisadihasilkanolehaccountperjam Jumlahkoneksi(berapakali)yangdapatdilakukanolehaccountkeserverselama sejam.

HalyangperluAndaperhatikansebelummelakukanpembatasanresourceini,tabelyang bernamauseryangberadapadadatabasemysqlharusmemilikikolom(field)dariresource resource tersebut. Kolom nya antara lain, max_questions,max_updates dan max_connections.Jikabelumada,berartiAndaharusmengupgrademysqlAnda. Untukmerubahbatasbatasdariresourcetadi,AndabisamenggunakanstatementGRANT, ditambahkandenganklausaWITH.Contohdibawahini,uservinahanyabisamelakukan koneksisebanyakduakaliselamasatujamdidatabasestmik.

64PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Jikausertersebutmelakukankoneksilebihdariduakaliselamasatujam,makakoneksi ketigaakandiabaikanolehmysqlserver.

Padadefaultnya,nilaidaribatasbatasresourcetadiadalah0,yaitutakterbatas.Untuk merubahnyadenganmemberikan nilaiintegeruntuk membuatperhitungannya/batasnya. Jadiuntukmengembalikanbatasagarmenjaditakterbataslagi,denganmemberikannilai0 padaresourceyangakanAndaubah.

3.5MengatasiKerusakanDatadanRecovery
Bagianiniakanmenjelaskanbagaimanamembackupdatabasedanmelakukanmaintenance terhadaptable.

3.5.1BackupDatabase

Jika suatu saat kerusakan sistem terjadi, Anda menginginkan agar bisa mengembalikan kembali status tabletable yang ada tersebut ke keadaan saat sebelumrusak,dengankemungkinansebagiankecildatasajayanghilang. Pengguna, mungkin saja tanpa sengaja menghapus table atau database, dan menginginkanagardatamerekabisakembali. Seorang adiministratormungkinmencoba untukmengedittable melalui normal editor,sayangnyahalitukemungkinanbisamenyebabkankerusakantable. Kerusakan HardDisk secara tibatiba biasa terjadi, dan memiliki satu backup databasepalingterakhirmembuatprosesrecoverymenjadilebihmudah.

3.5.2PrinsipprinsipBackup

Lakukanbackupsecararutin,denganmembuatjadwalbackup. Instruksikan server untuk mengupdate log (catatan). Update log melakukan PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL65

penambahan pada dump. Catatan ini yang nantinya dibutuhkan untuk mengembalikandatabasekestatusakhirnyasaatsebelumdatabasetersebutrusak.

Gunakan FLUSH LOGS untuk memastikan bahwa update log terbaru sesuai denganfilebackup. Gunakan nama file yang konsisten dan mudah dimengerti dengan menyertakan tanggalmembackupnya.Contoh: COBA_DB.200060606 SimpanfilebackupAndapadafilesystemyangberbeda. BackupfilebackupAndamenggunakanfilesystembackup.

3.5.3MetodeBackup
Adatigacaramelakukanbackup:

Copysecaralangsung mysqldump mysqldhotcopy

3.5.3.1Copysecaralangsung

Mysqlmenyimpaninformasidatabasedisubdirectoripadadirektoridata. Melibatkanpenyalinandirektoridariserver. Sangatcepat(sepertimenyalinfile) Harusmenguncitabledariaccespenulisan,ataumenonaktifkanserversebelum menyalinfile Tidakterlaluportable(mudahdipindahpindah)

3.5.3.2mysqlhotcopy

mysqlhotcopydibuatolehTimBuncedalamscriptPERL.ToolsinimenggunakanLOCK TABLES,FLUSHTABLESdanCPatauSCPuntukmembackupfiledengancepat. Inimerupakancaratercepatuntukmembackupdatabaseatausingletable,tapihanyabisa berjalandalammesinyangsamadimanadatabasedirektoriterletak. HanyabekerjaditabletipeMyISAM.

66PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Perhatikansyntaxberikut:
shell>mysqlhotcopydb_name[/path/to/new_directory] shell>mysqlhotcopydb_name1db_name_n[/path/to/new_directory]

Andajugabisamengcopysemuafiletable(filefile*.frm,*.MYD,*.MYI)selamaserver tidak mengupdate apapun. mysqlhotcopy menggunakan metode tersebut. ProsesinitidakdapatbekerjajikadalamdatabasetersebutmemilikitipetableInnoDB, dikarenakantableInnoDBtidakmenyimpandatanyadidirektoridata. 3.5.3.3mysqldump

Memperolehdatadaritabledan/atauskemamenggunakanperintahSQL. BisadipindahantaraversiMySQLyangberbeda Mengizinkanjugauntukdipindahkedatabaseyanglain. Lebihlambatjikadibandingkandenganmysqlhotcopy Hasildarifilebackupcukupbesar(textSQL),tapibisadikompresskebzipatau gzip.

Syntax:
mysqldump[options]db_name[tables]>backupfilename mysqldump[options]databases>backupfilename mysqldump[options]alldatabases>backupfilename mysqldump[options]db_name[tables]>backupfilename

Diasumsikan,datayangakandibackupadalahtablebukudidatabasepustaka,perintahnya :

Catatan : user yang bisa melakukan backup dengan metode mysqldump adalah user yang memilikiizinkedatabaseatautabletersebut.

Opsiopsimysqldump Opsi mysqldump pustaka | gzip > /tmp/backup.gz Penjelasan UntukmengkompressfileoutputSQL

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL67

nocreatedb

PerintahCREATEDATABASE/*!32312 IF NOT EXIST*/ db_name; tidak akan disertakan dalam output SQL, tapi tetap akan disertakan jika opsi alldatabases atau databases diberikan pada perintah mysqldumpsebelumnya. Syntax: mysqldump nocreatedb db_name > backupfilename

nocreateinfo

Tidak menuliskan perintah CREATE TABLEuntuktiaptiaptableyangdisalin. (digantikandenganperintahALTER) Syntax: mysqldump nocreateinfo backup >backupfilename

nodata

tidak menuliskan data apapun ke baris pada table. Ini berguna jika Anda hanya ingin mendapatkan struktur dari table tanpaisinya Syntax: mysqldumpnodatadb_name>backup filename

Dumpinglebihdarisatudatabase Syntax: mysqldumpdatabasesdb1db2>backupfilename RestoreDatabase

Buatdatabasekosongyangbaru,bisadaricommandlineataudariprompt.

Arahkan path ke direktori tempat Anda menyimpan file backup sebelumnya, kemudianketikperintahberikut:

68PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

3.6Replikasi
Replikasi memungkinkan tersedianya database lain yang keadaannya mendekati sama dengandatabasetempatpertamakaliterjadinyaupdatedata.Databaselainitudisebutslave dandatabasetempatpertamakaliterjadinyaupdatedisebutmaster.

3.6.1MemanfaatkanReplikasipadaMySQLversi5.0
Contoh berikut, kita akan menggunakan mysql versi 5.0, diharapkan pengetahuan kita terhadapmysqlmenjadimakinbertambah. Tujuandaripembuatanreplikasiyaitu: Melakukanrecoveryjikasuatusaatmastercrashatauterjadikesalahaneksekusi Mengetahuipotensipotensidarireplikasisekaligusmenghindarikondisikondisiyang dapat menyebabkan masalah ketika menggunakan replikasi akibat keterbatasan keterbatasandalamsistemreplikasitersebut.

3.6.2MenginstallMySQLversi5.0danmensetupnyasebagaiservermaster
3.6.2.1InstallMySQLserverdimesinmaster: Mesinmasteradalahserverlinux. IPAddressadalah192.168.1.197 Direktoriinstalasidi/usr/local/myslq5 Direktoridatadi/data/mysqldev Berikutcarainstalasinya: 1. Downloadmysql5dariwww.mysql.com,simpandi/home/irfan

2. Ekstrakfiledistribusi.tar.gzdi/usr/local 3. Buatsimboliklink:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL69

4. Buatusermysql:

5. SetupPATH,agardapatdiaksessemuauser,edit/etc/profile,tambahkan:

6. Inisialisasidirektoridata(datadir)ke/data/mysqldev:

7. Selesai

3.6.2.3FileKonfigurasi Filekonfigurasidisimpansebagai/etc/my5.cnf,berikutiniparameterkonfigurasiumum (bukanspesifikmaster):

Selanjutnya,parameterberikutinidiperlukanuntukserverbertindaksebagaimaster: 1. logbin=mysqlbinlog Digunakanuntukmengaktifkanbinarylog 2. serverid=1 3. syncbinlog=1 synchronizesetiapdatabaseupdatedenganbinarylogseseringmungkin.

70PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Berikutinifilekonfigurasiselengkapnya:

3.6.2.4Menjalankanservermaster Selanjutnyaandaperlumenjalankanserverdanmemeriksanya: 1.Agarserverberoperasidibackground,jalankan:

2.Loginkemysqlsebagairootdimysql(bukanrootdisystem):

3.Periksaapakahserversudahberjalansebagaimaster,jalankan:

Akanmuncultampilansepertiini:

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL71

KemungkinanhasilnyaakanberbedadikomputerAnda.Cobasimpaninformasidiatas, karenaakandipergunakansebagaiparameterdiserverslave.

3.6.2.5Menyetinghakaksesuntukreplikasi Berikutiniakandidefinisikansetupagaruser'replikator'dapatmengaksesmasteruntuk melakukanreplikasi.DalamhalinislaveakandioperasikandarimesindenganIPaddress 192.168.1.55. Jalankanperintahberikut:(masihdiservermaster) 1.Loginkemysqlsebagaimysqlroot 2. Jalankanperintahberikutdipromptmysql

3.6.2.6Membuatarsipbasebackup Basebackupataubackupdasaradalahseluruhisifilesystemdaridatayangakandibackup, filesystembisamencakupseluruhdirektoridata(datadir)ataubisajugahanyasatuatau lebihdirektoridatabasetertentu,yangadadibawahdatadir. Targetreplikasipadasetupiniadalahseluruhdatabasedimaster,jadiperludibuat base backupdariisidirektoridata(datadir)di/data/mysqldev.Berikutinicaranya: 1.Pastikandatabasedalamkeadaanreadonly.Loginsebagaimysqlrootlalujalankan:

Perhatikanbahwasetelahandamenjalankanperintahini,penggunatidakdapatmelakukan 72PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

INSERT,UPDATEdanDELETEkedatabase. 3. Lihatposisibinarylog,catatparameterFiledanPosition:

Misalkantampilsebagaiberikut:

4. Gunakan tar untuk membuat file arsip base backup, nama file arsip sebaiknya menggunakan parameter File dan Position, supaya selfdocumented, misal backup_mysqlbinlog.000003_98.tgz. Jika datadir adalah /data/mysqldev, maka jalankan:

5. Setelahfilearsipselesaidibuat,bukakunciandatabasedariaksesreadonly:

3.6.3SetupserverSlave
3.6.3.1Instalmysqlserverdimesinslave Mesinmasteradalahlinuxserver IPaddress192.168.1.55 Direktoriinstalasi/usr/local/mysql5 Direktoridatadi/data/slave

Tahapinstalasihampirsamadenganinstalasimasterdibagiansebelumnya,perbedaannya adalahlangkahke6(enam),yaituinisialisasidatadirtidakdiperlukankarenakitaakan PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL73

menggunakanbasebackupsebagaidatadir.

3.6.3.2Setupdatadirdariarsipbasebackup. Sekarangkitaakanmembuatdatadirberdasarkanbasebackupdariservermaster: 1. Copyfilearsipbasebackupkeslave,dapatmenggunakanscpatauftp. 2. Dekompresfilearsip 3. Renamedirektori,langkahinisebenarnyatidakmutlakdiperlukan,kitahanyaingin namadirektoriyangmemberikanpetunjukbahwayangtersimpanadalahdatadari slavedalamprosesreplikasi. 4. Ubahkepemilikandatadiruntukusermysql,tentunyausermysqlinisudahharus adadiserverslave. 3.6.3.3Filekonfigurasi File konfigurasi disimpan sebagai /etc/slave_my.cnf, berikut ini parameter konfigurasi umum(bukanspesifikslave):

Selanjutnya,parameterberikutinidisarankanuntukserverbertindaksebagaislave: 1. skipslavestart Mencegahslavestartotomatisjikamesinserverrestart. 2. readonly Mencegahslavediupdatedariluarprosesreplikasi, karenadapatmenyebabkan ketidaksinkronandatabase. 3. logwarnings Mencatatwarningdalamprosesreplikasi 4. serverid=2

74PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

identitasserverharusberbedadenganmaster 3.6.3.4Menjalankanserverslave Selanjutnyaandaperlumenjalankanserverdanmemeriksanya: 1.Agarserverberoperasidibackground,jalankan:

2.Loginkemysqlsebagairootdimysql(bukanrootdisystem):

3.Periksaapakahserversudahberjalansebagaimaster,jalankan: PadakolomSlave_IO_Stateandaakanmendapatinilaikosong,karenathreadslavebelum berjalan. 3.6.3.5Setupparameterreplikasi Slaveperludiberiinformasitentangalamat(ipaddress),filebinarylog,posisifilemaster daninformasiotentikasiuntukmengaksesmaster,caranya: 1. Loginkeserverslavesebagaimysqlroot. 2. Jalankanperintah:

Parameterreplikasiakantersimpanpersistentdiserver,sampaiandamengubahnyalagi denganperintahyangsama.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL75

3.6.3.6Menjalankandanmemeriksathreadslave ProsesreplikasidislavebaruakanberjalanjikaadaperintahSTARTSLAVE: 1. Loginkeserverslavesebagaimysqlroot 2. JalankanperintahSTARTSLAVE 3. Periksastatusslave PadakolomSlave_IO_Stateandaakanmendapatiteks'Waitingformastertosendevent', artinyathreadserversudahaktifdanmenungguupdateeventdarimaster.

3.6.4Mengujireplikasidantroubleshooting
Adakalanyaandatidakinginmereplikasisemuadatabase,tapihanyadatabasetertentusaja. Misalkanandainginmereplikasidatabasesaja,tambahkanoptionberikutdikonfigurasi master:

Catatan:perhatikanbahwajikaandatidakmereplikasidatabasemysql,adakemungkinan andamenghadapimasalahketikaaplikasimenggunakandatadarislave(setelahmelakukan restore),jikasebelumnyaterjadiperubahangrantdimaster.

3.6.4.1Menyimpanbinarylogdidirektoritertentu
Binarylogakanterusbertambah,makasebaiknyabinarylogadadipartisiyangberbeda dengandatadir. Gunakanparameterlogbinberikutinidikonfigurasimaster,untukmemindahkanlokasi binarylogkepartisi/blog:

Perhatikan:jikaandamemindahkanbinarylogkelokasibaru,andatidakcukuphanya mengeditkonfigurasimaster,lalumerestartdatabase,carapalingamanadalah: 1. Stopmaster 2. Editkonfigurasi 76PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

3. Copy(bukanpindahkan)binaryloglamakelokasibaru,termasukbinlog.index 4. Startupmaster 5. Buatbasebackupterkini. 6. Setupulangslavedaribasebackupyangpalingbaru. 7. Startupslave 8. Selesai

3.6.4.2Menyediakandiskspaceyangcukupbesaruntukfiletemporarydislave JikaslavemereplikasiperintahLOADDATAINFILE,danfileyangdiloaddimaster berukuranbesar,makaslavemembutuhkanruangcukupbesaruntukmenyimpan fileini,untuksementara,sebelumstatemeniniselesaidieksekusi. Parameteryangperludisetadalah


slaveloadtmpdir=/partisi/yang/cukup/besar

3.6.5.Catatanbagidatabaseadministrator

3.6.5.1Memeriksastatusmasterdanslave Administratorperlumemeriksastatusmasterdanslavesecarateratur,karenatidakada jaminankeduaserverakanberjalantanpamasalahsepanjangmasa.Jikaadastatementdari masteryangtidakdapatdieksekusikarenasuatusebab(misal:tidakadatemporarytable, grantpermissiontidakmemadai) Perhatikan bahwa replikasi pada MySQL 5.0 memiliki keterbatasanketerbatasan yang mungkin saja dilampaui oleh aplikasi anda. Baca manual mysql Bab 6. bagian 6.7 "ReplicationFeaturesandKnownProblems".Padabagianakhirtulisanini(Bagian9)kami merangkumbeberapaketerbatasanyangkamianggaprelevan.

3.6.5.2Ketikamesinserverslaverestart Jikamesinslaverebootataurestart,administratorharusmenjalankanthreadslavesecara manual,sehinggadapatmemastikanapakahthreadslavesuksesdijalankan.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL77

3.6.5.3Memperhatikandiskspaceuntukbinarylog Semakintinggilajutransaksidatabase,ukuranbinarylogbertambahdengancepat,sangat disarankanbinarylogyangsudahterkirimkeslavedipindahkankemediabackupoffline, misalcdromatautapebackup.Sehinggaselalutersediaruangyangcukupuntukbinarylog yangbaru.

3.6.5.4Berhatihatidalammenshutdownserverslave Padasaatmenshutdownserverslave,pastikanbahwathreadeksekusiqueryslavesudah mengeksekusisemuarelaylog.Jikaandaterpaksamenshutdownketikaadarelaylogyang belumdieksekusi,usahakanjangansampaiadatabeltemporeryangterbuka.

3.6.6Ketikamastercrash
Ketikaservermastercrash,dantidakdapatsegeradipulihkan,inilahsaatnyamemanfaatkan serverslaveuntukmenggantikannya.

3.6.6.1Mempromosikanslavemenjadimaster Berikutiniproseduruntukmempromosikanslavemenjadimaster: 1. Shutdownserverslave,jalankan:

2. Copyfilekonfigurasislave/etc/slave.cnfmenjadi/etc/master.cnf 3. Editfile/etc/master.cnf,hapussemuaparameteryangberhubungandengansetting slave,yaitu:


readonl y skipslavestart server id=1

4. Jalankanmasterbaru 5. Ubahkonfigurasiaplikasi(misalkanaplikasidikembangkandaribahasaPHPdan filekonfigurasiberadadiconfig.php),arahkankemasterbaruini 6. Selesai

78PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

3.6.6.2Membuatslavebaru Buatslavebaru,agarmasterbarudapatdireplikasi.Prosedurnyasepertiyangdijelaskan dibagiansebelumnya.

3.6.6.3Alternatiflain:mebuatmasterbaru Alternatifinilebihdisukaijikayangcrashhanyainstalasidatabasemastersajadantidak dapatsegeradipulihkan,sedangkansistemoperasimasihberjalanbaik.Prosedurnya: 1. Stopthreadslave 2. Backupdatadirslave 3. Copyarsipdatadirslavekemaster 4. Gunakanarsiptersebutsebagaidatadirmaster 5. Setupkonfigurasimasterbaru 6. Jalankanmaster 7. Jalankanthreadslave 8. selesai

3.7Membuatdatabasebackupsecaraperiodik
3.7.1Mengapaperlubackuplagi?
Replikasi dapat digunakan sebagai backup, walau demikian ada sedikitnya 2 alasan perlunyamelakukanbasebackupsecaraperiodik:

3.7.1.1Sebagaibackupsekunder Replikasi memiliki keterbatasanketerbatasannya sendiri (lihat bagian 6 di manual MySQL)makatidaklahbijaksanajikakitahanyamengandalkanreplikasisaja.Kitatidak pernah tahu jika keterbatasan tersebut akan kita temui dan apakah kita memiliki pemecahanyangcepatjikaituterjadi.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL79

3.7.1.2MemulihkankesalahaneksekusiupdateSQLpadamaster Prosesreplikasimengeksekusisetiappernyataanyangmemodifikasidatadarimasterke slave,termasukperintahyangdiinputolehusersecaratidaksengaja. Jika user melakukan kesalahan update atau delete yang tidak bisa dipulihkan dengan perintahSQL,makadiperlukanprosedurkhususuntukmengembalikandatakekeadaan sebelum dieksekusinyaperintahyangsalahtersebut.Proseduriniakanefektifjikakita memilikibasebackupyangmutakhir.

3.7.2Apasajadanbagaimana
Prosedurbasebackupsamadenganyangsudahdijelaskandibagian3.6.2.6.Hanyasaja prosedurtersebutdijalankansecaraperiodik.

3.7.3Skripuntukotomatisasi
Berikut ini script yang dapat digunakan untuk mengotomatisasi base backup secara periodik. Perhatikanbahwaandaperlumengeditpattern'mysqlbinlog'jikanamabinlogyanganda gunakanberbeda.
#!/bin/sh #otomatisasibasebackup #$Id:3_0_basebackup.sh,v1 .32006/0 7/2608:1 7yanfExp$ 4:4 #WARNmasihmenggunakannamabinlogyghardcoded:mysqlbinlog #harusdieditjikaberbedadgnamabinloganda #direditbilaperlu datadir=/mnt/data/mydata destdir=/mnt/download/files prefix=basebkp #auth*sensitive*inf o #harususerygdapatlocktableseditbilaperlu user=root pass=1 #listdbnameygakandibackupeditbilaperlu dbnames='testdbmysqlgsmdev5_proven'

80PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

#lokasimysqlbineditbilaperlu mysqlbin=/usr/local/mysql5/bin dir=`dirname$datadir` name=`basename$datadir` exportP ATH=$mysqlbin:$P ATH lockcmd='FLUSHTABLESWITHREADLOCK' unlockcmd='UNLOCKTABLES' statuscmd='SHOWMASTERSTATUS' logincmd="mysqlu${user}p${pass}" #flushandlock echo$lockcmd|$logincmd #masterstatus x=`echo$statuscmd|$logincmd` #definenamaarchiveb'dasarnama&posisibinlog #namabinlog binlog=`echo$x|awk'{if($0~/mysqlbinlog/){ printf"%s",$5 }}'` #posisibinlog pos=`echo$x|awk'{if($0~/mysqlbinlog/){ printf"%d",$6 }}'` archive=${prefix}_${binlog}_${pos}.tar compressed="$destdir/$archive.gz" if[e$compressed] then #janganlupaunlock echo$unlockcmd|$logincmd echo"sudahada$compressed..exit" exit0 fi #archivedb cd$datadir tarcvf$destdir/$archive$dbnames #unlock echo$unlockcmd|$logincmd #compress cd$destdir gzip$archive

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL81

Perhatikanbahwascriptiniberisinamauserdanpassworduntukdatabase,sebaiknyaset ownershipfileinidengan700.

3.8MemulihkandarikesalahaneksekusiupdateSQLdimaster
SuatusoreseorangprogrammerPHPyangsudahlebihdari24jamtidaktidur,secaratidak sengajamengeksekusiperintahUPDATEpadatabeltransaksiberisiratusanriburecord tanpa menuliskan klausa WHERE, di server master. Bagian ini menjelaskan cara menyelamatkandiriandasebagaiDBAdandirinyasebagaiprogrammer,darikemurkaan usersdanatasantanpaharusmencaripekerjaanbaru.

3.8.1Menguncimasterdariuser
Database master pada saat ini berada dalam kondisi error, jadi perlu mencegah user melakukanmodifikasidata.Perintahberikutdimysql,akanmencegahusermelakukan update,sekaligusmemflushsemuaperubahanyangsudahterjadiditabelkedisk:

mysql>FLUSHTABLESWITHREADLOCK

3.8.2Mencariposisibinlogterakhir
Misalkanusertersebutmenjalankanperintah:
UPDATEtransaksi_jualSETstatus=2

Makakitaperlumencariperintahtersebutdimulaidaribinlogyangsedangaktif,misal mysqlbinlog.000006,gunakanutilitasmysqlbinlogsbb:
#mysqlbinlogmysqlbinlog.000006

Makaakanmunculbarisbarissebagaiberikut:
#at232 #060 251 5:4 7 8:1 4serverid1end_log_pos260Intvar SETINSERT_ID=202; #at260

82PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

#060 251 5:4 7 8:1 4serverid1end_log_pos366Querythread_id=7 exec_time=0error_code=0 SETTIMESTAMP=1 538264 1 14; INSERTINTOt1values(default,'zzzz...'); #at394 #060 251 5:4 7 8:1 4serverid1end_log_pos500Querythread_id=8 exec_time=0error_code=0 SETTIMESTAMP=1 538264 1 14; UPDATEtransaksi_jualSETstatus=2;

Dari file tersebut dapat kita ketahui posisi log (end_log_pos), tepat sebelum perintah UPDATEtersebutadalah366.

3.8.3Menggunakanbasebackupterakhir
Jikathreadslavesedangberjalan,kemungkinanbesarslaveyangadasekarangberadapada kondisiyangsamadenganmaster,yaitumengalamikesalahanupdate.Jadiperlumensetup slavebaru,dengankondisidatasepertimasalampau,sebelumterjadinyakesalahanupdate. Sekarangsaatnyamemanfaatkanbasebackupyangdibuatsebelumdijalankannyaperintah UPDATE tersebut. Setup slave baru dengan datadir dari base backup tersebut, seperti dijelaskandibagiansebelumnya.

3.8.4Menjalankanthreadslavesampaiposisitertentu
Sekarang kita perlu menjalankan thread slave, dengan menambahkan posisi terakhir sebelumthreadslavetersebutberhenti,jalankan:
mysql>STARTSLA VEUNTIL master_log_file='mysqlbinlog.000006',master_log_pos=366

3.8.5Menggantidatamaster
Selanjutnyaandabisamemperlakukansituasiinisepertibagian3.6.6KetikaMastercrash.Data darislaveyangsudahdisinkronkansampaiposisitertentu(366padacontohini)digunakan sebagaidatamaster.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL83

3.8.6Menjalankanthreadslavesepertibiasa
Setelahmasterberoperasinormal,jalankanthreadslavesepertibiasa: 1. Stopthreadslave:
mysql>STOPSLA VE;

2. Startthreadslave:
mysql>STARTSLA VE;

3.9KeterbatasanketerbatasanReplikasi
Replikasi sekalipun bermanfaat dan berdaya guna, tetapi juga memiliki keterbatasan. Sebagian besar keterbatasan ini adalah inherent, dikarenakan replikasi mysql menggunakanquerylevellogging,yaitumastermenuliskanqueryyangberhasildieksekusi kebinarylog,untukselanjutnyadieksekusiolehslave. Berikutiniketerbatasanketerbatasanyangkamianggapperludiketahui,yangdiambildari ManualMySQL5.0,bab6,bagian6.7."ReplicationFeaturesandKnownProblems". 1. MenambahkankolomyangAUTO_INCREMENTkesebuah tabeldenganperintah ALTERTABLEmungkinsajamenghasilkanurutanbarisyangtidaksamaantaramaster danslave,karenaurutanbergantungpadastorageengineyangdigunakandanurutanbaris yangdiinsert. 2.FungsiUSER(),UUID(),andLOAD_FILE()direplikasikantanpaperubahan,sehingga tidakdapatdiandalkandislave. 3. Userprivilegehanyadireplikasikanjikadatabasemysqljugadireplikasikan.Artinya, pernyataanGRANT,REVOKE,SETPASSWORD,CREATEUSER,andDROPUSER, hanyaberpengaruhdislave,jikareplikasimenyertakandatabasemysql. 4. Perbedaandata master danslavesangat mungkinterjadi,jikapernyataan (sql) yang digunakan menghasilkan modifikasi data yang nondeterministic, sehingga hasilnya bergantungpadaqueryoptimizer. 84PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

Contoh: (a)PernyataanCREATE...SELECTatauINSERT...SELECTyangmenginsertnilainol atauNULLkesebuahkolomAUTO_INCREMENT. (b)PernyataanDELETEjikadigunakanmenghapusbarispadasebuahtableyangmemiliki foreignkeydenganpropertiONDELETECASCADE. (c)PernyataanREPLACE...SELECT,INSERTIGNORE...SELECTjikaadaduplikasi nilainilaipadadatayangdiinsert. 5.Walaupuntabletemporerdireplikasikan,jikaterjadishutdownpadaserverslave(bukan hanyathreadslave),dantabeltemporersudahtereplikasi,tapipernyataanupdateyang menggunakanreplikasitersebutbelumsempatdieksekusidislave.Maka,ketikaslave direstart,tabeltemporersudahtidakadalagi(karena'temporer')sehinggaperintahupdate yang menggunakan tabel temporer tersebut dipastikan akan gagal dan menghentikan threadeksekusiSQLdislave.Untukmencegahhalini,hindarimenshutdownslaveketika tabeltemporermasihopen.Berikutiniprosedurnya: a) JalankanperintahSTOPSLAVE b) Gunakan SHOW STATUS untuk memeriksa nilai variabel Slave_open_temp_tables. c) Jikanilainya0,berartitidakadatabeltemporeryangterbuka,jalankanperintah mysqladminshutdownuntukmenshutdownserverslave. d) Jikanilainyatidak0,berartiadatabeltemporeryangterbuka,jalankanperintah STARTSLAVE. e) UlangiprosedurinisampaivariabelSlave_open_temp_tablessamadengan0,baru andabolehmenshutdownslaveserver. 6.Jikaterjadicrashpadamaster,mungkinsekaliterjadiposisiakhirbinarylogdimaster beradadibawahposisiterbacaolehslave,karenabinarylogdimasterbelumsempatdi flush.Halinidapat menyebabkanslavetidakdapatmereplikasi,ketikamasterkembali beroperasi. Untuk mencegahnya gunakan setting syncbinlog=1, sehingga master seseringmungkinmemflushkebinarylog. 7.JikasebuahpernyataandislavemenghasilkanerrormakathreadSQLslaveberhenti,dan PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL85

slaveakanmenuliskanpesanerrorkeerrorlog.Andaharusloginkeslavesecaramanual danmemeriksastatusslave(SHOWSLAVESTATUS).Lalumembereskanmasalahnya, barumenjalankanthreadslavedenganSTARTSLAVE. 8. Nilainilai floating point adalah pendekatan (aproksimasi), sehingga perbandingan perbandingan yang menggunakan nilainilai ini tidak pasti juga, hal ini berlaku pada operasi yang secara eksplisit menggunakan floating point atau secara implisit menggunakan nilainilai yang dikonversi ke floating point. Perbandingan nilainilai floating point mungkin saja menghasilkan perbedaan antara master dan slave, yang disebabkanperbedaanarsitekturmesinkomputer,compileryangdigunakanuntukmem buildMySQLdansebagainya.

3.10Penutup
Jika data anda hilang, apapun database anda, anda tidak dapat menuntut manufaktur softwaredatabaseuntukmengembalikandatatersebutbahkansoftwarekomersialbernilai ribuandollarsekalipun.SilakanperiksadiLicenseAgreement. Apapun database anda, pastikan tersedia prosedur backup dan recovery yang dapat diandalkan.Replikasiadalahsalahsatucaramembackupdatayangdapatdiandalkan. MySQLmemilikisistemreplikasiyangcukupandaldanmudahdigunakan,jikakitadapat mengenali keterbatasanketerbatasannya. Tidaklah bijaksana jika hanya mengandalkan replikasi semata untuk menyediakan backup, kita perlu menyediakan backup sekunder sebagaiantisipasijikadatareplikasitidakdapatdigunakan padaprosespemulihan. Sebaiknya anda tidak mempelajari replikasi hanya dari tulisan ini saja, penting sekali mendalami dari sumber aslinya yaitu Reference Manual MySQL 5.0, bab 6, sebelum akhirnyamemutuskanuntukmenggunakanreplikasidiserverproduksianda.

86PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

IV.PerbandinganDBMSOracle,MySQL,dan PostgreSQL

4.1Fiturfiturdasar
4.1.1KesesuaiandenganstandardSQL:
DBMS MySQL Oracle Deskripsi EntrylevelSQL'92 KesesuaiandenganSQL'89,subsetdari jenisSQL'92plustipetipeyangkhusus Beberapa jenis SQL '92 dipetakan ke tipeOracle.tidakadajenisbooleanatau persamaan Subset lanjutan dari SQL '92/99' dan bahasa SQL 3. Jenis data dan syntax SQL 92 dipetakan langsung ke PostgreSQLmenjadibahasaaslinya

PostgreSQL

4.1.2Binerdankarakterobjekbesar
DBMS MySQL Biner TINYBLOB, BLOB,MEDIUMBLOB dan LONGBLOB,berbedahanyapada panjang maximum, tipetipe tsb bisamencapai2^32(4GB)byte Karakter TINYTEXT,TEXT,MEDI UMTEXT dan LONGTEXT dapat disamakan dengan empat tipe data BLOB dan memiliki ukuran panjang maximum dan kebutuhan penyimpananyangsama

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL87

DBMS Oracle

Biner LONGRAW(2GB),BLOB(4GB) danBFILE(penyimpananexternal, mencapai4GB) Harus didefinisikan oleh user di CREATE TYPE, ukuran terbatas oleh maximum ukuran baris. BLOBs disimpan diluar table, hanya OID dari BLOB yang disimpanditable

Karakter LONG(2GB)danCLOB (4GB)

PostgreSQL

Ukuran Tipe TEXT terbatas oleh maximum ukuranbaris

4.1.3TipedataUserdefined

DBMS MySQL Oracle PostgreSQL

Deskripsi TidakAda Userbisamembuattipedatabaruyang kompleks User bisa menambah tipe data baru menggunakanperintahCREATETYPE

4.1.4Perluasanobjectrelational
DBMS MySQL Oracle PostgreSQL Deskripsi TidakAda Ya Strukturtablebisadiwariskan

88PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

4.1.5Tipedatakhusus(multimedia,dll)
DBMS MySQL Oracle PostgreSQL Deskripsi TidakAda Ya Tipe geometris yang mewakili objek 2 dimensi.

4.1.6Perintahsubquery
DBMS MySQL Oracle PostgreSQL Deskripsi Ya,dimulaidariversi4.1 Subquery yang terhubung dan tak terhubungmencapai255level SQLkuranglebihsamadenganOracle.

4.1.7PrimarydanUniquekey
DBMS MySQL Oracle PostgreSQL Deskripsi Ya Ya Ya.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL89

4.1.8ForeignKey
DBMS MySQL Deskripsi Ya, pada tipe InnoDB, penghapusan relasiataumultitabledapatdilakukan. Pada tipe MyISAM, FOREIGN KEY hanya sebagai kecocokan, dan tidak berpengaruh terhadap pengoperasian database Oracle PostgreSQL Ya, mendukung CASCADE ON DELETE

Ya, mendukung ON DELETE CASCADE dan ON UPDATE CASCADE

4.1.9Check
DBMS MySQL Oracle PostgreSQL Deskripsi Ya,padaversi5ataudiatasanya Ya Ya

4.1.10Views
DBMS MySQL Oracle PostgreSQL Deskripsi Ya,padaversi5ataudiatasanya Ya Ya

90PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

4.1.11UpdatableViews
DBMS MySQL Oracle PostgreSQL Deskripsi Ya,padaversi5.0.1 Ya Ya

4.1.12Synonims(Aliaspadatable,viewatauobjeklaindidatabase)
DBMS MySQL Oracle PostgreSQL Deskripsi Tidak Ya Tidak

4.1.13AutoIncrement(penambahanotomatis)kolom
DBMS MySQL Deskripsi Ya,hanyabolehsatukolomsebagaiauto increment pada satu table dan harus diindex Tidak Ya,tipedataSERIAL

Oracle PostgreSQL

4.1.14Konversiotomatiscodepages(antarakliendanserver)
Konversi otomatis code pages artinya bahwa jika page codes di server dan di klien berbeda,konversiharusdituntaskan.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL91

DBMS MySQL Oracle PostgreSQL

Deskripsi Tidak Ya Tidak

4.2Transaksi
4.2.1Mendukungprosestransaksi
DBMS MySQL Oracle PostgreSQL Deskripsi Ya,padatipeInnoDB Ya Ya

4.2.2TransaksiRollbackSebagian
DBMS MySQL Deskripsi Mulaiversi4.0.14,InnoDBmendukung SAVEPOINT dan ROLLBACK TO SAVEPOINT Rollback ke savepoint, juga dimungkinkanmulaibarulagi,transaksi tersendiri dari transaksi yang sedang berjalan Mulai dari 6.0.1 mendukung ROLLBACK, ROLLBACK TO SAVEPOINT

Oracle

PostgreSQL

92PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

4.2.3LevelPenguncian(table,pagedanbaris)
DBMS MySQL Deskripsi Penguncian table pada tipe ISAM/MyISAMdanHEAP,penguncian page pada tipe BDB. Tipe InnoDB mendukungpenguncianpadabaris Padalevelbarisdantable Padalevelbarisdantable

Oracle PostgreSQL

4.2.4DeteksiDeadlockdanpemecahannya
DBMS MySQL Oracle PostgreSQL Deskripsi Ya Ya Ya

4.3DBprogramming
4.3.1Bahasauntukmenulisstoredprocedure DBMS MySQL Deskripsi Ya, pada versi 5, sebelumnya UDF (ditulis dalam bahasa C atau C++) digunakan untuk mengembangkan MySQLdenganfungsifungsibaruyang bekerjasepertifungsiasliMySQL PL/SQLdanJava PL/PGSQL, PL/TCL,PL/Perl,SQL,C. dimungkinkan untuk membuat bahasa baruCREATELANGUAGE

Oracle PostgreSQL

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL93

4.3.2Triggers
DBMS MySQL Oracle Deskripsi Dukungan belum begitu sempurna, tersediapadaversi5.0.2 Pada PL/SQL. Trigger bereaksi pada kejadian: BEFORE/AFTER DELETE/UPDATE/INSERT INSTEAD OF Triggerdapatjugadigunakansaatmeng updateview

PostgreSQL

Aturan deklarasi suatu ekstensi ke SQL. User bisa membuat SELECT,INSERT,DELETE atau UPDATE sebagai event(kejadian) nya. AturanINSTEADOFdapatdigunakan untukmengupdatedatamelaluiviews. Trigger prosedur di PL/PGSQL,PL/TCL,PL/Perl dan C. CREATE CONSTRAIN TRIGGER membuat trigger untuk mendukung constrain. User bisa menentukan BEFORE atau AFTER pada INSERT,DELETE atau UPDATE sebagaieventtriggernya.

94PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

4.4Administrasi
4.4.1OtorisasiUser
DBMS MySQL Deskripsi User didefinisikan saat pertama kali login, beserta password dan hostname nya. Otorisasi dibuat pada sisi server, dan dimungkinkanjugauntukkoneksiyang aman antara klient dan user menggunakanSSL Oracle User didefinisikan pada saat login beserta password, juga dimungkinkan menggunakan otorisasi level system operasi Berikutopsipengesahanyangtersediadi PostgreSQLperdatabase:

PostgreSQL

Trustauthentication Passwordauthentication Kerberosauthentication Identbasedauthentication PAM Pluggable Authentication Modules berdasarkan metode authentication

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL95

4.4.2Enkripsikoneksiklientserver
DBMS MySQL Oracle PostgreSQL Deskripsi SSL4.0 Tidakdiketahui SSLatauSSH.Kerberosauthentication

4.4.3Izinpengaksesanobjek(level)
DBMS MySQL Oracle PostgreSQL Deskripsi Leveltable.HakINSERTdanUPDATE bisadibatasisampaikolom Leveltable.HakUPDATE,INSERT,dan REFERENCESpadakolomyangdipilih Leveltable

4.4.4Izingrouping
DBMS MySQL Oracle PostgreSQL Deskripsi Tidak Hakbisadigroupke roles. Roles bisa memberiizinkeuserrolelainnya Bisamembuatgrupgrupuserdanizin bisadiberikankegruptersebut

96PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

4.4.5Incrementaldanbackuponline
DBMS MySQL Oracle PostgreSQL Deskripsi InnoDB backup online, juga mendukungbackupincremental Ya Mungkin akan segera ditambahkan, diharapkansetelahversi7.5

4.4.6Toolsuntukeksportdata
DBMS MySQL Oracle PostgreSQL Deskripsi Ya, seperti mysqldump, mysqlhotcopy, mysqlsnapshot,innodb2myisam HanyasekumpulandarihasilquerySQL Ya,pgdump,pg_dumpall

4.4.7Toolsuntukmengimportdata
DBMS MySQL Oracle PostgreSQL Deskripsi Mengimportdarifiletext,HTML,DBF Kecepatan tinggi dan load data sangat flexible COPY memindahkan data antara PostgreSQLdanstandardfilesystem COPY menginstruksikan backend PostgreSQL backend membaca langsung,ataumenuliskefile

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL97

4.5PortabilitydanScalability
4.5.1Hardwaredansystemplatformyangmendukung
DBMS MySQL Deskripsi Banyak platform UNIX, windows dan OS/2. Di paket dan tersedia bersama hampirsemuadistroLinux Lebih dari 200 platform, termasuk UNIX,Windows, platform midrange danmainframe BanyakplatformUNIX,windows.QNX realtimesystemuntukx86

Oracle

PostgreSQL

4.5.2Portabilitydatadankode(procedurepenyimpanan)
DBMS MySQL Deskripsi Penyalinan dari file MySQL (.FRM,.MYI,.MYD) antar platform denganperbedaanarsitektur,tapimemiliki persamaanformatfloatingpoint.Datadan index pada tipe ISAM tidak terpengaruh denganarsitekturdariH/Wdanbeberapa system lainnya, seperti pada program mysqldump Data dan kode bisa di pindah antar platformtanpamengubahapapundengan menggunakanutilityexport/import Ya

Oracle

PostgreSQL

98PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

4.5.3MendukungsystemSMP(eksekusiqueryparallel)
Proses parallel dalam sistem single memory, dikenal juga dengan Symmetric Multi Processing(SMP)hardware,yangdalammultiprosesormenggunakansatusumberdaya memory DBMS MySQL Deskripsi Sebuah server multithread yang bisa menggunakan banyak prosesor. Thread terpisahdibuatuntuktiaptiapkoneksi Oracle bisa menggunakan system multiprocessor (SMP) misalkan untuk parallelquery Tidak memiliki thread, tapi tiap koneksi memilikiprosesnyasendirisendiri

Oracle

PostgreSQL

4.6PerformadanVLDB
4.6.1ImplementasiVLDByangdiketahui
VeryLargeDatabase(VLDB)artinyamultiplegigabytesatausingleterabyte

DBMS MySQL Oracle PostgreSQL

Deskripsi Menanganidatabaseyangbesar Terabytedatabaseexist 60GBdatabasesexist

4.6.2Maximumjumlahbarisdankolom
DBMS MySQL Deskripsi Maksimumjumlahkolomdalamsatutable 3398; jumlah baris 65534 (BLOB dan TEXTtidaktermasuk)

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL99

DBMS Oracle

Deskripsi Maksimumjumlahkolomdalamsatutable 1000; bisa mencapai 32 kolom di index key Takterbatas,kolom1600;jumlahbaris 1.6TB

PostgreSQL

4.6.3Maximumjumlahtabledanindex
DBMS MySQL Oracle PostgreSQL Deskripsi Tabletakterbatas,bisamencapai32indexper tabledenganmaximum256bytespanjangkey Takterbatas Takterbatas

4.6.4Tuningmanualalokasi
DBMS MySQL Deskripsi Beberapaparameteryangeksistpadatipe InnoDB sebagai table space, lokasi file data,penambahan/perluasanotomatis,dsb Ya, banyak parameter dari alokasi yang bisa di tuned pada system, ruang tgable ataulevelobject Lokasi file data dan ruang table diimplementasikandiversi8

Oracle

PostgreSQL

100PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

4.6.5 Partisi otomatis pada table/index besar dan menggunakan partisi dalampengoptimalanquery
Table/indexyangsangatbesardanmengizinkanuseruntukmenguraikannyakebagian bagiankecilagarlebihmudahdiaturdisebutpartisi. DBMS MySQL Oracle PostgreSQL Deskripsi Ya,padaInnoDB Ya Tabledanindexsecaraotomatisdipartisi, tapi tidak ada peningkatan spesifik pada pengoptimalanquery

4.6.6Akseskemultipledatabasedalamsatusessi
DBMS MySQL Deskripsi Hanya berpindah antar database yang mungkin. pada SELECT, data dari databaseyangberbedabisadiambil Tiap sessi bisamengambil data dari tiap kejadian Hanya berpindah antar database yang mungkin.

Oracle PostgreSQL

4.6.7Replikasi
Replikasi adalah proses mengcopy dan memelihara objek database dalam multiple databaseyangmembuatsystemdistribusidatabase.Replikasibisameningkatkanperforma, danmelindungiketersediaanaplikasikarenaadanyadataalternative.

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL101

DBMS MySQL Oracle PostgreSQL

Deskripsi Ya,stabilmulaiversi3.23.32 Umumnya, 3 Oracle menyediakan area replikasi Beberapa system replikasi tersedia, baik versikomersialataunonkomersial.

4.6.8Gerbang(Gateway)keDBMSlain
DBMS MySQL Oracle PostgreSQL Deskripsi Tidak Ya,gerbangkeDBMslaintersedia Tidak

4.7InterfacesdanPengembanganAplikasi
4.7.1InterfacestandarODBCdanJDBC
DBMS MySQL Deskripsi DriverODBC(myODBC)dan2tipedari JDBCtersedia

102PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

DBMS Oracle

Deskripsi JDBCThinDriveruntukaplikasiklient (applet)ditigalapisarsitektur:

Driver JDBC OCI Clientside untukaplikasiclientserver JDBC server driver untuk membuat aplikasi yang bekerja padasisiserver(servlet)

PostgreSQL

Tersedia4driverJDBC.Mengindikasikan driver ditulis dalam bahasa Java, sekali dikompile,driverbisaberjalandiplatform mana saja, karena komunikasi database memilikiprotocolnetworknyasendiri

4.7.2Supportaplikasi
DBMS MySQL Oracle PostgreSQL Deskripsi C/C++,Java,Perl,Python,PHP,Ruby OracleOCIlowlevelaccesstoDBMS; Perl,Python C/C++, Java,Perl,Python,PHP, Ruby,TCK/TK,Object Pascal dan Pl/pgSQLsebandingdenganPL/SQLnya Oracle

4.7.3DedicatedServerWeb
DBMS MySQL Deskripsi Tidak

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL103

DBMS Oracle

Deskripsi Beberapaprodukweb: Oracle WebDB untuk aplikasi web sederhana Oracle Application Server (OAS) untukprofessional Oracle Internet Server versi khusus serverhttpApache

PostgreSQL

Tidak

4.7.4SupportXMLterintegrasidenganDBMS
DBMS MySQL Oracle PostgreSQL Deskripsi Tidak Banyak tools XML terintegrasi dengan DBMS(parser,processor,XSLT,dll) Menyediakan opsi XML yang menangani distribusipaketdenganserverinti

4.7.5MendukungpaketCASE
DBMS MySQL Oracle PostgreSQL Deskripsi PLONE,RubyonRails OracleDesigner,JDeveloper Takdiketahui

104PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

4.8Kehandalan
4.8.1Otomatisrecoverydarikegagalan
DBMS MySQL Deskripsi HanyatipeInnoDB,toolHotbackupjuga tersediadiInnoDBuntukmembuatbackup pada database yang running di background, tanpa perlu men set penguncian atau mengganggu operasi database Recovery dari kegagalan lunak otomatis dan transparan. Recovery dari kegagalan mediamemerlukancopybackup.Dengan logRedo,dimungkinkanuntukmerecover semua transaksi yang di commit atau recoverwaktuyanglebihspesifik WAL(WriteAheadLogging)

Oracle

PostgreSQL

4.9Isuisukomersial
4.9.1Tipelisensi
DBMS MySQL Oracle PostgreSQL Deskripsi GPL(GNUGeneralPublicLicense)atau komersial NegosiasidenganOracleatau basissite bysite BSD (Barkeley Software Distribution) opensource

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL105

4.9.2TehnicalSupport
DBMS MySQL Deskripsi Millist dan website, Membayar jasa tehnical support juga bisa melalui telephone Jasa tehnikal support berkualitas tinggi tersediadalambeberapatingkatan Millist dan website, dukungan secara komesial kini mulai tersedia yang terdiri dari beberapa perusahaan khusus PostgreSQL, juga tersedia di beberapa daerahlaindariperusahaanbesarseperti Fujitsu,SRAdanPervasive

Oracle PostgreSQL

4.9.3Pembagianpasar
Berdasarkan majalah SD Times juli 2004, poling top deployed database menunjukkan databaseyangpopularpenggunaannya:

SQLServer:78% Oracle:55% MySQL:33% PostgreSQL:8%

106PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL

4.9.4Segmenpasarsecaraspesifik
DBMS MySQL Oracle PostgreSQL Deskripsi Web server, yang umum menggunakan systemberbasislinux Tidakspesifik Pendidikan,Perusahaan Telephon,PelayananDNSdanweb

PanduanPendayagunaanOpenSourceSoftware:RDBMSMySQL107