Kementerian Negara Riset dan Teknologi Republik Indonesia
Panduan Pendayagunaan Open Source Software
RDBMS: MySQL
(Relational Database Management System: MySQL)
Jakarta, 2007
Panduan Pendayagunaan Open Source Software : RDBMS-MySQL
Hak Cipta © 2007
Kementerian Negara Riset dan Teknologi dan Yayasan Penggerak Linux Indonesia
Distribusi :
Kementerian Negara Riset dan Teknologi Republik Indonesia Deputi Bidang Pendayagunaan dan Pemasyarakatan Iptek
Asisten Deputi Pengembangan dan Pemanfaatan Teknologi Informasi Gedung II BPP Teknologi Lantai 6
Jl. MH. Thamrin No.8 – Jakarta 10340 Telepon : (021) 316 9181 / 316 9166 Faksimili : (021) 310 1952
Web : www.ristek.go.id
Yayasan Penggerak Linux Indonesia (YPLI)
Jln. Mampang Prapatan X No. 4 Jakarta Selatan 12790 Indonesia Telp. 021 93740960, Fax. 021 7874225, Email: [email protected] Pengurus YPLI:
Rusmanto Maryanto (Ketua); Resza Ciptadi (Sekretaris); Effendy Kho (Bendahara) Penyusun:
Firdaus Tjahyadi; Henry Saptono; Irfan Gustiarahman; Mgs. Hendri Thoyyib;
Prihantoosa; Resza Ciptadi; Rusmanto Maryanto; Sirojul Munir; Yan Farmawan
ISBN 978-979-630-037-2
SAMBUTAN MENEGRISTEK
Pembangunan teknologi informasi merupakan sumber terbentuknya iklim yang menjadi landasan bagi tumbuhnya kreativitas sumberdaya manusia yang dapat menjadi sumberdaya pertumbuhan dan daya saing ekonomi. Dengan menyadari akan hal tersebut, peran teknologi informasi sangatlah penting dalam kehidupan masyarakat, sehingga mendorong peningkatan kemandirian, daya saing, kreativitas serta inovasi bangsa yang merupakan kunci utama keberhasilan pembangunan bangsa.
Melalui semangat untuk membangkitkan inovasi ini, “Program Indonesia, Go Open Source (IGOS)” dideklarasikan. Tumbuhnya kesadaran untuk meraih kemandirian dalam pemanfaatan teknologi informasi dan komunikasi (information and communication technology-ICT), ditopang dengan tersedianya berbagai pilihan terhadap perangkat lunak (software) yang dapat digunakan oleh masyarakat. Pilihan untuk mengembangkan dan memanfaatkan open source software (OSS) merupakan pilihan yang rasional, baik dari segi legalitas, ekonomi, maupun tingkat keamanannya (security).
Untuk kepentingan pendayagunaan open source serta memudahkan pengenalan perangkat lunak berbasis Open Source kepada masyarakat, Kementerian Negara Riset dan Teknologi menginisiasi penyusunan Panduan Pendayagunaan Open Source Software yang bekerjasama dengan komunitas Iptek, Yayasan Penggerak Linux Indonesia (YPLI).
Dalam konteks ini, saya menyambut gembira penyusunan Panduan Pendayagunaan Open Source Software yang tentunya diharapkan dapat lebih memudahkan masyarakat dalam mengenal perangkat lunak berbasis open source. Dokumen tersebut terdiri atas delapan dokumen yaitu Perangkat Lunak Bebas dan Open Source, Petunjuk Instalasi IGOS Nusantara, Konfigurasi Server Linux, Aplikasi untuk Server, RDBMS (Relational Database Management System): MySQL, Bahasa Pemrograman Open Source, Aplikasi Perkantoran OpenOffice.org, dan CMS, CRM, dan ERP.
Akhir kata, semoga kedelapan Dokumen ini dapat bermanfaat bagi peningkatan kemampuan masyarakat dalam penguasaan teknologi piranti lunak bebas dan open source.
Dengan semangat “Kreativitas Tanpa Batas” dan maju bersama Indonesia, Go Open Source! Kita besarkan produk aplikasi perangkat lunak Indonesia.
Jakarta, Juli 2007 Menteri Negara Riset dan Teknologi
Kusmayanto Kadiman
PENGANTAR
Dokumen ini disusun sebagai salah satu bahan acuan untuk pelatihan tentang perangkat lunak bebas dan open source dengan semangat IGOS (Indonesia, Go Open Source!) yang dimotori oleh Kementerian Negara Riset dan Teknologi Republik Indonesia. Dokumen ini merupakan bagian dari delapan dokumen IGOS Training Tool Kit yang disusun oleh Yayasan Penggerak Linux Indonesia dan diterbitkan oleh Kementerian Negara Riset dan Teknologi Republik Indonesia.
Kedelapan dokumen itu adalah Perangkat Lunak Bebas dan Open Source, Petunjuk Instalasi IGOS Nusantara, Konfigurasi Server Linux, Aplikasi untuk Server, RDBMS (Relational Database Management System): MySQL, Bahasa Pemrograman Open Source, Aplikasi Perkantoran OpenOffice.org, dan CMS, CRM, dan ERP. Sebagian bahan penyusunan dokumen ini diambil dari Open Source Training Tool Kit yang diterbitkan oleh Open Source Resource Center (OSRC) - Pakistan Software Export Board (PSEB). Lisensi dokumen ini OPL (Open Publication License) versi 1.0 atau yang lebih baru dan dapat diakses di http://opencontent.org/openpub/.
Jakarta, Juli 2007
Rusmanto Maryanto
Ketua Yayasan Penggerak Linux Indonesia
DAFTAR ISI
SAMBUTAN
MENEGRISTEK...ii
PENGANTAR...iii
DAFTAR ISI...iv
I Pengantar RDBMS...1
1.1 Pendahuluan...1
1.2 SQL-92...2
1.3 Relational Databases...2
1.3.1 Relational vs. flat file databases...2
1.3.2 Normalisasi database...4
1.3.3 Relasi Antar Tabel ...5
1.3.3.1 Relasi satu-ke-banyak (One-to-Many)...5
1.3.3.2 Relasi satu-ke-satu (One-to-One)...6
1.3.3.3 Relasi banyak-ke-banyak (Many-to-Many)...7
II Pengantar MySQL...9
2.1 Pendahuluan...9
2.2 Penyesuaian dengan standar-standar SQL...9
2.3 Program-program klien MySQL...9
2.3.1 Program klien mysql...10
2.3.2 Program klien mysqlimport...12
2.3.3 Program klien mysqldump...12
2.3.3.1 Operasi mysqldump...13
2.3.3.2 Memuat ulang hasil mysqldump...13
2.3.4 Program klien mysqlcheck dan myisamchk...13
2.4 Database secara umum dan manipulasi tabel...14
2.5 Storage Engine dan Tipe-tipe tabel...15
2.6 Tipe-tipe kolom...16
2.6.1 NUMERIK...17
2.6.2 String...19
2.6.3 Date...21
2.6.4 Tipe data Komplek...23
2.7 Opsi-opsi Kolom...24
2.8 Operator...24
2.8.1 Peraturan ketentuan hak yang lebih tinggi ...25
2.8.2 Operator Arithmatic...25
2.8.3 Operator Comparison...26
2.8.4 Operator Logical...27
2.9 Memulai dan mengakhiri koneksi ke database server...27
2.10 Membuat dan menggunakan database...29
2.11 Manipulasi tabel...30
2.11.1 Membuat tabel...30
2.11.2 Menghapus tabel...31
2.11.3 Merubah tabel...31
2.11.4 Merubah nama tabel...32
2.12 Index...33
2.12.1 Non-unique index...34
2.12.2 Unique index...34
2.12.3 Primary Key index...34
2.12.4 Menghapus index...35
2.13 MySQL query ...35
2.13.1 Perintah SELECT...35
2.13.1.1 Pengambilan data sederhana...36
2.13.1.2 Membatasi suatu perintah SELECT dengan WHERE...37
2.13.1.3 Mengurutkan pemilihan data menggunakan ORDER BY...37
2.13.1.4 Membatasi pengambilan data menggunakan klausa LIMIT...38
2.13.1.5 Mengelompokkan pemilihan baris data menggunakan klausa GROUP BY.39 2.13.2 Perintah INSERT...40
2.13.3 Perintah REPLACE...43
2.13.4 Perintah UPDATE...43
2.13.5 Perintah DELETE...44
2.14 Join tabel...45
2.14.1 Cross-join...45
2.14.2 Inner Join...45
2.14.3 Outer Join...46
2.14.3.1 Left Join...46
2.14.3.2 Right Join...48
2.15 Referensi...48
III Administrasi MySQL...49
3.1 Cara Download dan Install MySQL...49
3.2 Direktori Data MySQL...51
3.2.1 Lokasi Direktori Data...52
3.2.2 Struktur Direktori Data...52
3.2.3 Bagaimana MySQL Server memberikan akses ke Data...52
3.2.4 Representasi dari Tabel Database...53
3.3 Start-Up dan Shutdown MySQL...53
3.3.1 MySQL server dan Skrip-skrip...53
3.3.1.1 Sekilas pandang terhadap Skrip Server-side ...54
3.3.1.2. Mengaktifkan Server...55
3.3.1.3 Jika tidak bisa terhubung ke server...55
3.4 Manajemen User Account MySQL...56
3.4.1 Username dan Password...56
3.4.2 Menambah user account baru...57
3.4.2.1 Akses ke Database...60
3.4.2.2 Akses Tabel...61
3.4.2.3 Akses Kolom...61
3.4.3 Menampilkan Izin Akses...61
3.4.4 Menghapus Account User...62
Penggunaan Revoke...62
3.4.5 Membatasi jumlah penggunaan resource...64
3.5 Mengatasi Kerusakan Data dan Recovery...65
3.5.1 Back-up Database...65
3.5.2 Prinsip-prinsip Back-up...65
3.5.3 Metode Back-up...66
3.5.3.1 Copy secara langsung...66
3.5.3.2 mysqlhotcopy...66
3.5.3.3 mysqldump...67
3.6 Replikasi...69
3.6.1 Memanfaatkan Replikasi pada MySQL versi 5.0...69
3.6.2 Menginstall MySQL versi 5.0 dan mensetupnya sebagai server master...69
3.6.2.1 Install MySQL server di mesin master :...69
3.6.2.3 File Konfigurasi...70
3.6.2.4 Menjalankan server master...71
3.6.2.5 Menyeting hak akses untuk replikasi...72
3.6.2.6 Membuat arsip base backup...72
3.6.3 Setup server Slave...73
3.6.3.1 Instal mysql server di mesin slave...73
3.6.3.2 Setup datadir dari arsip base backup...74
3.6.3.3 File konfigurasi...74
3.6.3.4 Menjalankan server slave...75
3.6.3.5 Setup parameter replikasi...75
3.6.3.6 Menjalankan dan memeriksa thread slave...76
3.6.4 Menguji replikasi dan troubleshooting...76
3.6.4.1 Menyimpan binary log di direktori tertentu...76
3.6.4.2 Menyediakan disk space yang cukup besar untuk file temporary di slave. .77 3.6.5. Catatan bagi database administrator...77
3.6.5.1 Memeriksa status master dan slave...77
3.6.5.2 Ketika mesin server slave restart...77
3.6.5.3 Memperhatikan disk space untuk binary log...78
3.6.5.4 Berhati-hati dalam menshutdown server slave...78
3.6.6 Ketika master crash...78
3.6.6.1 Mempromosikan slave menjadi master...78
3.6.6.2 Membuat slave baru...79
3.6.6.3 Alternatif lain: mebuat master baru...79
3.7 Membuat database backup secara periodik...79
3.7.1 Mengapa perlu backup lagi?...79
3.7.1.1 Sebagai backup sekunder...79
3.7.1.2 Memulihkan kesalahan eksekusi update SQL pada master...80
3.7.2 Apa saja dan bagaimana...80
3.7.3 Skrip untuk otomatisasi...80
3.8 Memulihkan dari kesalahan eksekusi update SQL di master...82
3.8.1 Mengunci master dari user...82
3.8.2 Mencari posisi binlog terakhir...82
3.8.3 Menggunakan base backup terakhir...83
3.8.4 Menjalankan thread slave sampai posisi tertentu...83
3.8.5 Mengganti data master ...83
3.8.6 Menjalankan thread slave seperti biasa...84
3.9 Keterbatasan-keterbatasan Replikasi...84
3.10 Penutup...86
IV Perbandingan DBMS Oracle, MySQL, dan PostgreSQL...87
4.1 Fitur-fitur dasar...87
4.1.1 Kesesuaian dengan standard SQL :...87
4.1.2 Biner dan karakter objek besar...87
4.1.3 Tipe data User-defined...88
4.1.4 Perluasan object-relational...88
4.1.5 Tipe data khusus (multimedia,dll)...89
4.1.6 Perintah sub-query ...89
4.1.7 Primary dan Unique key...89
4.1.8 Foreign Key...90
4.1.9 Check...90
4.1.10 Views...90
4.1.11 Updatable Views...91
4.1.12 Synonims(Alias pada table, view atau objek lain di database)...91
4.1.13 Auto Increment (penambahan otomatis) kolom...91
4.1.14 Konversi otomatis code pages (antara klien dan server)...91
4.2 Transaksi...92
4.2.1 Mendukung proses transaksi...92
4.2.2 Transaksi Rollback Sebagian...92
4.2.3 Level Penguncian (table, page dan baris)...93
4.2.4 Deteksi Deadlock dan pemecahannya...93
4.3 DB programming...93
4.3.1 Bahasa untuk menulis stored procedure...93
4.3.2 Triggers...94
4.4 Administrasi...95
4.4.1 Otorisasi User...95
4.4.2 Enkripsi koneksi klient-server ...96
4.4.3 Izin pengaksesan objek (level)...96
4.4.4 Izin grouping...96
4.4.5 Incremental dan back-up online...97
4.4.6 Tools untuk eksport data...97
4.4.7 Tools untuk meng-import data...97
4.5 Portability dan Scalability...98
4.5.1 Hardware dan system platform yang mendukung...98
4.5.2 Portability data dan kode (procedure penyimpanan)...98
4.5.3 Mendukung system SMP (eksekusi query parallel)...99
4.6 Performa dan VLDB...99
4.6.1 Implementasi VLDB yang diketahui...99
4.6.2 Maximum jumlah baris dan kolom...99
4.6.3 Maximum jumlah table dan index...100
4.6.4 Tuning ‘manual’ alokasi...100
4.6.5 Partisi otomatis pada table/index besar dan menggunakan partisi dan engoptimalan query...101
4.6.6 Akses ke multiple database dalam satu sessi...101
4.6.7 Replikasi...101
4.6.8 Gerbang(Gateway) ke DBMS lain ...102
4.7 Interfaces dan Pengembangan Aplikasi...102
4.7.1 Interface standar ODBC dan JDBC...102
4.7.2 Support aplikasi...103
4.7.3 Dedicated Server Web...103
4.7.4 Support XML terintegrasi dengan DBMS...104
4.7.5 Mendukung paket CASE...104
4.8 Kehandalan...105
4.8.1 Otomatis recovery dari kegagalan...105
4.9 Isu-isu komersial...105
4.9.1 Tipe lisensi ...105
4.9.2 Tehnical Support...106
4.9.3 Pembagian pasar...106
4.9.4 Segmen pasar secara spesifik...107
IGOS Training Tool Kit
“RDBMS (Relational DataBase Management
System): MySQL”
I. Pengantar RDBMS
1.1 Pendahuluan
SQL(Structured Query Language) adalah bahasa query yang standard yang digunakan sebagai suatu bahasa sederhana dan dasar, yang memungkinkan Anda untuk berkomunikasi dengan database, membaca, menulis, dan memperoleh informasi yang berguna dari database. Meskipun sifatnya non-procedural, lebih mudah bekerja dengan SQL daripada dengan kebanyakan bahasa pemrograman seperti PHP, PERL, Java dan lain- lain, namun kadangkala menyulitkan untuk beberapa kasus yang rumit bagi mereka yang baru mengenal SQL. Perintah atau statement SQL yang paling sederhana yang memungkinkan seorang user dapat menampilkan atau memperoleh data dari suatu tabel adalah perintah atau statement SELECT. Sesuai dengan namanya, dengan perintah SELECT seorang user dapat memilih data yang spesifik dari tabel untuk menampilkannya.
Dengan mengasumsikan bahwa tabel dalam database Anda memiliki nama tabel 'mahasiswa', dengan struktur tabel sebagai berikut:
Kemudian Anda jalankan query seperti ini:
mysql> select * from mahasiswa;
1.2 SQL-92
SQL telah distandarisasi, dan versi saat ini mengacu pada SQL-92. Beberapa database yang mendukung SQL seharusnya menyesuaikan dengan standard SQL saat ini.
Standarisasi SQL telah mejadikan SQL sebagai perangkat atau tool istimewa yang digunakan dalam pengembangan dan desain web. Sebagian besar program atau software untuk pengembangan aplikasi web, terutama Allaire's Cold Fusion dan Macromedia Dreamweaver Ultradev, mengandalkan pada SQL atau perintah-perintah SQL untuk menghubungkan dan memperoleh informasi dari database. Untuk informasi lebih detil tentang SQL-92, kunjungi :
http://developer.mimer.se/documentation/html_82/Mimer_SQL_Reference_Manual/Intro_S QL_Stds3.html
1.3 Relational Databases
1.3.1 Relational vs. flat file databases
Flat flie database adalah suatu database yang didesain menyertakan suatu tabel tunggal.
Flat file database meletakkan seluruh data kedalam tabel tunggal, atau daftar, dengan kolom-kolom yang merepresentasikan seluruh parameter. Sebuah flat file bisa terdiri dari banyak kolom, seringkali dengan duplikasi data yang cenderung menyebabkan kerusakan data (data corruption). Jika Anda memutuskan untuk menggabungkan data diantara dua flat file, maka Anda harus melakukan copy dan paste informasi yang relevan dari satu file ke file yang lainnya. Disini tidak ada otomatisasi diantara dua flat file. Jika Anda memiliki dua atau lebih flat file yang berisi data alamat klien, sebagai contoh, klien telah berpindah alamat, maka Anda harus merubah secara manual alamat klien tersebut yang ada dalam setiap flat file. Perubahan informasi dalam satu file tidak memiliki sangkut paut dengan file lainnya. Flat file menawarkan fungsionalitas untuk menyimpan informasi, memanipulasi kolom-kolom, mencetak dan menampilkan informasi yang terformat, pertukaran informasi dengan orang lain melalui email dan melalui internet. Beberapa flat file bisa dikerjakan pada file-file eksternal, seperti text editor, agar memperluas fungsionalitas dan mengatur informasi yang berhubungan.
Dilain pihak, suatu Relational database, menggabungkan tabel-tabel dengan berbagai metode untuk dapat berkerjasama. Hubungan-hubungan antar tabel data dapat dibandingkan, disatukan, dan ditampilkan dalam form-form database. Sebagian besar relational database menawarkan fungsionalitas untuk berbagi (share) data:
1 melalui jaringan
1 melalui internet
1 dengan laptop dan perangkat elektronik lainnya seperti palm pilots
1 Dengan software-software system yang lain
Mendesain flat file database adalah sederhana, dan memerlukan sedikit pengetahuan desain database. Flat file dapat dikembangkan dengan hanya menggunakan satu database engine.
Flat file dapat dibuat dalam relational database engine dengan tidak mengambil manfaat atau keuntungan dari konsep-konsep desain relasional. Mendesain suatu relational database memerlukan perencanaan yang lebih dari pada flat file database. Dengan flat file, menambah informasi sepertinya perlu dipertimbangkan. Dengan relational database, dapat menyimpan data kedalam tabel-tabel sedemikian rupa sehingga hubungan antar tabel dapat dimengerti. Membangun suatu relational database sangat tergantung pada kemampuan Anda untuk menetapkan suatu model relasional. Model harus benar-benar menggambarkan penuh bagaimana data diorganisir dalam ketentuan struktur data, intergriti, query, manipulasi, dan penyimpanan.
Relational database memungkinkan user-user untuk mendefinisikan kolom-kolom record tertentu sebagai key atau index, melakukan pencarian, menghubungkan record-record antar tabel dan menetapkan batasan-batasan integritas. Query-query pencarian lebih cepat dan lebih akurat jika berdasarkan nilai-nilai yang telah diindex. Record-record tabel dapat dengan mudah dihubungkan dengan nilai-nilai yang telah diindex. Batasan-batasan integritas dapat ditetapkan untuk menjamin bahwa hubungan antar tabel tersebut syah. Jika Anda dapat membuat sebuah hubungan satu-ke-banyak (one-to-many) dalam tabel-tabel data Anda , sebaiknya Anda menggunakan relational database karena flat file tidak cukup untuk menangani seluruh pemrosesan data yang Anda butuhkan.
Relational database menawarkan proses reporting yang lebih baik, dengan berbagai report generator yang memfilter dan menampilkan kolom-kolom pilihan. Relational database menawarkan kemampuan membuat module-module reporting Anda sendiri. Sebagian besar relational database juga menawarkan kemampuan mengimpor dan mengekspor data dari software lainnya.
Terdapat tiga sistem relational database yang utama: proprietary, open source, dan embedded. Relational database yang proprietary biasanya memerlukan penggunaan bahasa-bahasa pengembangan yang juga bersifat proprietary guna menyempurnakan SQL.
Sebagai contoh MS Access yang menggabungkan visual basic dengan SQL. Database- database open source, seperti MySQL, didistribusikan dengan gratis agar mendorong pengembangan user. Embedded dan relational database dikemas sebagai bagian dari paket- paket software lainnya, seperti paket-paket software tax-preparation. Vendor mensuplai database, dan seluruh perlengkapan-perlengkapan manipulasi yang berhubungan, untuk mengontrol struktur database. Database-database ini biasanya disertakan oleh perlengkapan-perlengkapan yang mana menyediakan audit bekas-bekas transaksi.
1.3.2 Normalisasi database
Jika Anda bekerja dengan database, maka Anda harus familiar dengan istilah
“normalisasi”. Mungkin orang sering bertanya kepada Anda, “apakah databasenya sudah dinormalisasi ?” atau, “apakah databasenya dalam BCNF ?” . Namun dengan mengetahui prinsip-prinsip dari normalisasi, dan dengan menerapkannya pada tugas-tugas desain database Anda maka semuanya itu bukanlah hal yang sulit, dan dapat meningkatkan performa DBMS Anda.
Normalisasi adalah suatu proses mengefisiensikan pengorganisasian data dalam suatu database. Ada dua tujuan dari proses normalisasi:
1 Untuk mengeliminasi atau menghilangkan duplikasi data (menyimpan data yang sama kedalam lebih dari satu tabel)
1 Untuk menjamin bahwa ketergantungan data dapat dimengerti atau masuk akal (hanya menyimpan data yang berhubungan dalam suatu tabel)
Kedua tujuan normalisasi tersebut mengurangi jumlah konsumsi space database, dan menjamin bahwa data secara logika disimpan.
Komunitas database telah mengembangkan petunjuk-petunjuk untuk menjamin bahwa database dinormalisasi. Itu semua diacu sebagai bentuk-bentuk normal atau Nornal Forms (NF) dan serangkain petunjuk tersebut diberi nomor dari nomor satu (bentuk normalisasi yang paling rendah) sampai nomor lima (bentuk normal kelima atau 5NF). Dalam aplikasi- 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) menentukan aturan-tauran yang paling dasar untuk suatu pengaturan database:
2 Menghilangkan duplikasi kolom-kolom dalam tabel yang sama
2 Membuat tabel terpisah untuk setiap grup data yang berhubungan dan mengidentifikasi setiap baris dengan suatu kolom yang unik atau sekumpulan
kolom yang unik (primary key)
Bentuk normal kedua (2NF) selanjutnya memusatkan perhatian pada konsep menghilangkan duplikasi data:
2 Menemukan semua syarat-syarat bentuk normal kesatu
2 Hilangkan sub-set data yang diterapkan pada beberapa baris dari sebuah tabel dan letakkan kedalam tabel terpisah
2 Buatlah relasi antara tabel-tabel baru dan tabel-tabel pendahulunya melalui penggunaan Foreign Keys
Bentuk normal ketiga (3NF) melakukan satu langkah besar selanjutnya:
2 Menemukan semua syarat-syarat bentuk normal kedua
2 Menghilangkan kolom-kolom yang tidak secara langsung tergantung pada primary key
Terakhir, bentuk normal keempat (4NF) memiliki satu syarat tambahan:
2 Menemukan semua syarat-syarat bentuk normal ketiga
2 Suatu relasi adalah dalam bentuk normal keempat (4NF) jika relasi itu tidak memiliki ketergantungan banyak nilai (value)
Ingat, petunjuk normalisasi ini adalah bersifat komulatif. Untuk suatu database menjadi bentuk normal kedua (2NF), pertama harus terpenuhi dahulu seluruh kriteria bentuk normal kesatu (1NF).
1.3.3 Relasi Antar Tabel
Selain Anda mengetahui bentuk normal hal lain yang perlu Anda pahami adalah tipe-tipe relasi antar tabel. Tipe relasi amat penting untuk menjaga keutuhan Database Anda.
Ringkasnya ada 3 tipe relasi yaitu relasi satu-ke-satu, relasi satu-ke-banyak dan relasi banyak-ke-banyak.
1.3.3.1 Relasi satu-ke-banyak (One-to-Many)
Relasi disebut relasi satu ke banyak apabila satu nilai pada sebuah kolom merujuk ke dua atau lebih kolom pada tabel yang lain, contoh sebagai berikut :
Tabel A : perusahaan_ienisusaha
id_perusahaan nama_perusahaan id_jenis
1 Astra 1
2 Festo 1
3 TNT 3
4 Nurul Fikri Cipta Inovasi 2
5 HAFANA 2
6 Telkom 3
Tabel B : jenisusaha
id_jenis nama_jenis
1 Manufaktur
2 Teknologi Informasi
3 Telekomunikasi
Perhatikan bahwa id_jenis pada tabel perusahaan_jenisusaha merujuk pada id_jenis pada tabel jenisusaha untuk mengetahui atau memperoleh nama jenis usaha (nama_jenis).
1.3.3.2 Relasi satu-ke-satu (One-to-One)
Relasi satu-ke-satu terjadi apabila satu baris pada suatu tabel hanya merujuk ke satu baris di tabel lainnya, contoh sebagai berikut:
Tabel A : eksekutif
id_eksekutif nama
1 Akhtar Naufal Shagufta
2 Hana Fahmida Zahra
3 Umar Fawaz
Tabel B : asisten
id_asisten nama_asisten id_eksekutif
1 Ayu 1
2 Fitria 2
3 Sandra 3
Perhatikan id_eksekutif pada tabel eksekutif tepat berelasi satu ke tabel asisten pada kolom id_eksekutif.
1.3.3.3 Relasi banyak-ke-banyak (Many-to-Many)
Relasi banyak-ke-banyak terjadi bila beberapa baris pada sebuah tabel berelasi ke beberapa baris pada tabel yang lain. Jika terjadi kasus seperti ini Anda tidak dapat merepresentasikan relasi ini hanya dengan dua tabel Anda memerlukan satu tabel lain yang mewakili relasi banyak-ke-banyak itu. Sebagai contoh Anda ingin merelasikan tabel surat_berita dan tabel klien, pada kasus ini beberapa klien dapat memilih beberapa surat_berita sehingga satu surat_berita pun dapat merujuk ke beberapa klien maka untuk menggambarkan relasi seperti itu gunakan satu tabel tambahan. Sehingga hasilnya adalah seperti berikut :
Tabel A : klien
id_klien nama_klien
1 Akhtar Naufal Shagufta
2 Hana Fahmida Zahra
3 Umar Fawaz
Tabel B : surat_berita
id_sb nama_sb
1 Komputer
2 Politik
3 Populer
Tabel C : klien_surat_berita
id_ksb id_klien id_sb
1 1 1
2 1 3
3 2 1
4 2 3
5 3 2
6 3 3
II. Pengantar MySQL
2.1 Pendahuluan
MySQL merupakan Database Management System SQL open source yang paling populer, yang dikembangkan, didistribusikan, dan didukung oleh MySQL AB. MySQL AB adalah sebuah perusahaan komersial, yang didirikan oleh para pengembang MySQL. MySQL AB adalah perusahaan open source generasi kedua yang menyatukan nilai-nilai dan metodologi open source dengan suatu model bisnis yang sukses.
Berikut ini fitur-fitur utama MySQL:
1 MySQL adalah relational database management system
1 Software MySQL adalah open source
1 Database server MySQL sangat cepat, reliable, dan mudah digunakan
1 Database server cMySQL bekerja dalam client/server atau embedded system
2.2 Penyesuaian dengan standar-standar SQL
MySQL mendukung entry-level SQL-92. Entry-level berisi serangkaian keistimewaan- keistimewaan yang mendefinisikan dasar-dasar pemenuhan SQL-92. Oracle menyesuaikan dengan SQL-89, yang mana adalah suatu sub-set dari tipe SQL-92 dengan tambahan tipe-tipe spesifik. Beberapa tipe SQL-92 dipetakan kedalam tipe-tipe oracle.
PostgreSQL menggunakan suatu sub-set dari bahasa SQL92-99 yang diperluas dan bahasa SQL 3. Sintak tipe-tipe data SQL-92 dipetakan langsung kedalam tipe asli postgreSQL.
2.3 Program-program klien MySQL
Program-program klien MySQL dapat dipanggil atau dijalankan dari command-line, seperti dari sebuah console prompt Windows, atau dari sebuah UNIX prompt shell. Ketika Anda menjalankan suatu program klien, Anda dapat menentukan opsi-opsi untuk mengontrol tindak tanduk dari program klien. Beberapa opsi menjelaskan kepada program klien tentang bagaimana menghubungi server MySQL. Beberapa opsi lainnya menjelaskan kepada program klien aksi yang manakah yang harus dilakukan.
2.3.1 Program klien mysql
Program klien mysql memungkinkan Anda mengirimkan permintaan-permintaan (query) ke server MySQL, dan menerima hasilnya. Untuk menentukan opsi-opsi yang didukung oleh program mysql, jalankan perintah dengan opsi –help. Sebagai contoh, untuk mencari tahu bagaimana menggunakan mysql , ketiklah perintah berikut ini:
shell> mysql --help
Untuk mengetahui versi dari program mysql, gunakan opsi –version:
shell> mysql --version
Untuk menghubungi server menggunakan program klien, klien harus mengetahui pada komputer yang manakah server MySQL aktif atau berjalan. Sebuah koneksi atau hubungan bisa dilakukan secara lokal pada suatu server MySQL yang berjalan pada komputer yang sama dengan komputer yang sedang menjalankan program klien mysql, atau dapat dilakukan secara jarak jauh (remote) ke suatu server MySQL yang berjalan pada komputer yang berbeda dengan komputer yang sedang menjalankan program klien mysql, Anda tentunya harus memiliki user account (username dan password) yang terdaftar pada server MySQL tersebut untuk dapat melakukan koneksi ke server.
Dua buah opsi yang menunjukkan kepada klien dimanakah server MySQL berjalan, begitu juga tipe koneksi yang dilakukan.
--host=nama_komputer atau
-h nama_komputer
Opsi ini menentukan pada komputer yang manakah server MySQL aktif atau berjalan.
Nilai dari opsi ini dapat berupa nama komputer atau nomor IP. Nilai default adalah localhost.
--port=nomor_port atau
-P nomor_port
Opsi ini menunjukkan nomor port yang manakah yang dapat dihubungi pada komputer server, ini hanya diterapkan untuk koneksi TCP/IP. Default nomor port MySQL adalah 3306.
Dua buah opsi yang menyediakan informasi indentifikasi, yaitu username dan password atau user account yang Anda akan gunakan untuk dapat mengakses server.
--user=username atau
-u username
Opsi ini menentukan username untuk account MySQL Anda.
--password=password atau
-ppassword
Opsi ini menentukan password untuk account MySQL Anda. Berikut ini contoh-contoh bagaimana menggunakan opsi-opsi program klien mysql untuk melakukan koneksi:
1 Koneksi ke server menggunakan default nama komputer dan default username tanpa password:
shell> mysql
1 Koneksi ke server pada komputer lokal dengan nama user 'naufal', dan meminta mysql untuk menanyakan password Anda:
shell> mysql --host=localhost --password --user=naufal
1 Koneksi ke server dengan opsi yang sama dengan contoh sebelumnya, tetapi menggunakan bentuk opsi singkat:
shell> mysql -h localhost -p -u naufal
1 Koneksi ke server dengan IP address yang spesifik, dengan nama user 'naufal' dan password 'rahasia':
shell> mysql --host=192.168.1.33 --password=rahasia --user=naufal
1 Koneksi ke server pada localhost dengan default username dan password dan dengan mengkompress paket data yang lewat atau melintas antara klien dan server:
shell> mysql --host=localhost --compress
2.3.2 Program klien mysqlimport
mysqlimport adalah program klien yang memuat file-file data kedalam tabel-tabel.
Program ini menyediakan antar muka command-line dengan pernyataan LOAD DATA INFILE. Hal ini berarti mysqlimport memeriksa opsi-opsi yang diberikan pada command- line dan membuat suatu pernyataan LOAD DATA INFILE yang berhubungan dengan aksi yang disebutkan oleh opsi-opsi tersebut. Kemudian melakukan koneksi ke server dan untuk setiap file input, menghasilkan pernyataan LOAD DATA INFILE yang memuat file tersebut dengan benar kedalam tabel yang sesuai. Cara menjalankan perintah mysqlimport pada command-line seperti berikut ini:
shell> mysqlimport options nama_database file_input
nama_database adalah nama dari database yang berisi tabel tabel yang akan diisi data, dan file_input adalah nama file yang berisi data yang akan dimuat ke tabel.
Setiap tabel yang akan diisi oleh mysqlimport harus sudah ada dalam database, dan setiap file input seharusnya hanya mengandung nilai-nilai data. mysqlimport tidak dimasudkan untuk memproses file-file input yang mengandung perintah-perintah SQL (yaitu seperti yang dibuat dengan program mysqldump).
2.3.3 Program klien mysqldump
Program klien mysqldump mengekspor isi dari tabel-tabel yang ada dalam suatu database ke suatu file. Program ini sangat berguna untuk membackup database, atau untuk mentransfer isi dari database ke server lain. mysqldump dapat menghasilkan file-file hasil dump berfornat SQL yang mengandung perintah-perintah CREATE TABLE dan INSERT untuk membuat ulang file-file dump, atau dapat menghasilkan file-file data dengan delimiter tabulasi.
2.3.3.1 Operasi mysqldump
Secara default mysqldump menginterpretasi argumen pertama yang bukan option sebagai nama database dan akan mengekspor seluruh tabel-tabel yang ada dalam database tersebut.
1 Perintah berikut ini akan mengekspor seluruh isi tabel-tabel dalam database sekolah kedalam suatu file dengan nama file 'sekolah.sql':
shell> mysqldump sekolah > sekolah.sql
1 Perintah mysqldump berikut ini disertai dengan 3 argumen yang bukan option, argumen pertama adalah nama database dan argumen ke duan dan ketiga adalah nama-nama tabel dalam database, hasil dump disimpan kedalam file dengan nama pelajar_guru.sql:
shell> mysqldump sekolah pelajar guru > pelajar_guru.sql
2.3.3.2 Memuat ulang hasil mysqldump
Untuk memuat ulang sebuah file dump berformat SQL yang dihasilkan oleh mysqldump, gunakan program klien mysql. Guna membuat salinan tabel pelajar dari database sekolah kedalam database kampus, sebagai contoh, Anda dapat menjalankan perintah berikut ini:
shell> mysqldump --opt sekolah pelajar > perlajar.sql shell> mysql kampus < pelajar.sql
mysql dapat membaca dari sebuah pipe, sehingga Anda dapat mengkombinasikan dengan penggunaan perintah mysqldump dan mysql menjadi sebuah perintah tunggal. Contoh sebelumnya dapat ditulis menjadi berikut ini:
shell> mysqldump --opt sekolah pelajar | mysql kampus
2.3.4 Program klien mysqlcheck dan myisamchk
Program klien mysqlcheck dan myisamchk digunakan untuk memeriksa dan memperbaiki tabel-tabel (khususnya tabel tabel MyISAM). Program-program klien tersebut dapat membantu menjaga tabel-tabel Anda terbebas dari masalah-masalah, atau memeperbaiki tabel-tabel Anda jika terjadi masalah sebagai contoh tabel-tabel MyISAM menderita kerusakan akibat server crash.
mysqlcheck dan myisamchk memiliki fungsi yang sama, tetapi mereka memiliki beberapa perbedaan. Berikut ini perbandingan antara kedua program tersebut:
Kedua program dapat memeriksa, memperbaiki dan menganalisa tabel-tabel MyISAM.
Mysqlcheck dapat juga mengoptimasi tabel-tabel MyISAM, begitu juga tabel-tabel InnoDB
dan menganalisa tabel-tabel BDB. Ada operasi-operasi tertentu yang hanya dapat dilakukan oleh myisamchk sedangkan mysqlcheck tidak, yaitu men-disable atau mengenable pengindekan(indexes).
2.4 Database secara umum dan manipulasi tabel
Setiap server MySQL memiliki suatu direktori data yang mana didalam direktori ini tabel- tabel dan database berada dan dikelola. Server merepresentasikan hal berikut ini:
1 MySQL menghubungkan masing-masing database dengan suatu direktori yang ada didalam direktori data (ini berarti direktori data adalah direktori parent dari semua direktori-direktori database). Sebuah direktori database memiliki nama yang sama 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 komponen-komponen database yakni tabel-tabel dan indek-indek. Sebuah database bisa jadi kosong atau hanya berisi satu atau beberapa tabel. Database tidak beranak atau tidak dapat memiliki sub-sub database, dengan kata lain suatu database tidak lagi mengandung atau berisi database lainnya didalamnya.
1 Setiap tabel dalam suatu database terdiri dari baris-baris dan kolom-kolom. Suatu tabel bisa jadi kosong (tidak memiliki baris-baris data atau record), tetapi minimal harus memiliki sebuah kolom. Suatu tabel bisa juga diindek agar meningkatkan performa query. Setiap tabel dihubungkan dengan sebuah file formaAUTO_INCREMENT, diterapkan pada kolom-kolom integer. Digunakan untuk menghasilkan integer dengan urutan nilai yang unik. Kolom demikian dalam suatu tabel hanya ada satu.
1 BINARY, diterapkan pada CHAR dan VARCHAR
1 NULL dan NOT NULL, dapat diterapkan pada semua kolom
1 DEFAULT, menyediakan suatu nilai baku dalam kasus tidak ada nilai yang diberikan.
1 PRIMARY KEY dan UNIQUEt dalam direktori database yang berisi definisi- definisi dan struktur-struktur tabel tersebut. Nama dari file format sama dengan nama tabel ditambah akhiran .frm. Sebagai contoh, file format untuk tabel pelajar dalam database sekolah diberi nama pelajar.frm dan diletakkan dalam direktori sekolah yang berada dibawah direktori data server MySQL. Bergantung pada tipe tabel, storage engine untuk suatu tabel biasanya akan membuat file-file tambahan untuk tabel tersebut. Jika tabel pelajar memiliki tipe MyISAM, maka storage engine MyISAM akan membuat file-file data dan indek yang diberi nama pelajar.MYD dan pelajar.MYI yang masing-masing digunakan untuk menyimpan
baris-baris data dan indek-indek. Jika tabel pelajar memiliki tipe InnoDB, MySQL masih membuat suatu file format pelajar.frm dalam direktori database, tetapi storage engine InnoDB menyimpan tabel data dan informasi indeks kedalam InnoDB tablespace.
2.5 Storage Engine dan Tipe-tipe tabel
MySQL mendukung beberapa storage engine yang bertindak sebagai pengatur untuk berbagai tipe tabel yang berbeda. Storage engine MySQL mencakup keduanya yang mengatur tabel-tabel yang transaksinya
aman (transaction-safe), dan yang mengatur tabel-tabel yang transaksinya tidak aman (non-transaction-safe):
1 Storage engine asli adalah ISAM, yang menangani tabel-tabel non-transaksi (non- transactional). Storage engine ISAM telah digantikan dengan MyISAM dan sudah lama tidak digunakan lagi. Pada MySQL 4.1 storage engine ini sudah kuno, bahkan pada MySQL 5.0 dihilangkan.
1 Storage engine MyISAM diperkenalkan pada MySQL 3.23.0. MyISAM merupakan peningkatan untuk menggantikan ISAM. MyISAM menangani tabel-tabel non- transaksi (non-transactional). MyISAM memberikan kecepatan dalam proses penyimpanan dan pengambilan, begitu juga kemampuan-kemampuan pencarian keseluruhan teks (full-text). MyISAM didukung dalam seluruh konfigurasi MySQL, dan secara default MyISAM menjadi storage engine yang digunakan dalam MySQL, kecuali jika Anda mengkonfigurasi MySQL menggunakan storage engien yang lainnya.
1 Storage engine MEMORY menyediakan tabel-tabel in-memory. Storage engine MERGE ditambahkan kedalam MySQL 3.23.25. Storage engine ini memungkinkan sekumpulan tabel-tabel MyISAM yang identik untuk dikelola sebagai suatu tabel tunggal. Seperti MyISAM, Storage engine MEMORY dan MERGE menangani tabel-tabel non-transasksi ( non-transactional), dan keduanya juga disertakan secara default dalam MySQL.
Catatan: Storage engine MEMORY pertama kali dikenal sebagai HEAP engine.
1 Storage engine InnoDB dan BDB yang menangani tabel-tabel transasction-safe diperkenalkan dalam versi MySQL 3.23 selanjutnya.BDB disertakan dalam distribusi binari MySQL-Max pada sistem operasi – sistem operasi yang mendukungnya. InnoDB juga disertakan dalam distribusi binari MySQL-Max untuk MySQL 3.23. Mulai dengan MySQL 4.0, InnoDB telah disertakan secara default dalam seluruh distribusi binari MySQL. Dalam distribusi-distribusi source, Anda dapat meng-enable atau men-disable storage engine - storage engine tersebut
dengan mengkonfigurasi MySQL sesuai dengan kebutuhan Anda.
1 NDB cluster adalah storage engine yang digunakan oleh MySQL cluster untuk implementasi tabel-tabel yang terpisah di beberapa komputer. Engine ini tersedia dalam distribusi source MySQL 4.1.2 dan distribusi binari MySQL-Max 4.1.3.
Storage engine ini saat ini didukung hana di Linux, Solaris, dan Mac OS X . MySQL berniat untuk mendukung engine ini pada platform sistem operasi lainnya seperti MS Windows, dan dalam rilis MySQL mendatang.
1 Storage engine EXAMPLE adalah suatu sub engine yang tidak menangani apapun.
Anda dapat membuat tabel-tabel dengan engine ini, tetapi tidak ada data yang dapat disimpan atau diambil dalam tabel tersebut. Engine EXAMPLE ini disediakan sebagai contoh dalam kode sumber MySQL yang menggambarkan bagaimana memulai membuat storage engine baru. Ini umumnya untuk yang tertarik atau untuk para pengembang.
1 Storage engine ARCHIVE digunakan untuk penyimpanan sejumlah besar data tanpa pengindekan dengan sebuah footprint yang sangat kecil.
1 Storage engine CSV menyimpan data dalam file teks dengan menggunakan tanda koma sebagai format pemisah antar nilai-nilai dalam file teks tersebut.
1 Storage engine BLACKHOLE menerima tetapi tidak menyimpan data, selalu mengembalikan atau menampilkan sesuatu yang kosong.
1 Storage engine FEDERATED menyimpan data dalam remote database. Dalam MySQL 5.1, storage engine ini hanya bekerja dengan MySQL, dengan menggunakan MySQL C client API. Dalam rilis masa depan, dimaksudkan untuk memungkinkannya untuk terkoneksi dengan sumber data lainnya dengan menggunakan driver-driver atau metode-metode koneksi klien yang lainnya.
2.6 Tipe-tipe kolom
Untuk setiap tipe data, sintak yang ditampilkan menggunakan tanda kurung siku (square brackets) ([ ]) adalah untuk menunjukkan bagian dari sintak yang bersifat opsional. Contoh berikut ini menunjukkan bagaimana BIGINT dijelaskan dalam bab ini:
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 harus berupa sebuah bilangan integer atau bilangan bulat antara 1 dan 255.
2.6.1 NUMERIK
MySQL mendukung semua tipe data standar numerik(bilangan) SQL .Jenis ini meliputi tipe data bilangan bulat (INTEGER, SMALLINT, DESIMAL, dan NUMERIC), seperti halnya tipe data bilangan desimal (FLOAT, REAL, dan DOUBLE PRECISION). Keyword INT adalah suatu sinonim untuk BILANGAN BULAT (INTEGER), dan keyword DEC adalah satu sinonim untuk bilangan DESIMAL.
Terhitung sejak MySQL 5.0.3, tipe data BIT tersedia untuk menyimpan nilai-nilai kolom bit.
(Sebelum 5.0.3, MySQL menginterpretasikan BIT seperti TINYINT (1 ).) Di MySQL 5.0.3, BIT didukung hanya untuk MyISAM. MySQL 5.0.5 memperluas dukungan BIT pada MEMORY, InnoDB, dan BDB.
Sebagai satu ekstensi ke SQL standar, MySQL juga mendukung jenis bilangan bulat TINYINT, MEDIUMINT, dan BIGINT.
Untuk tipe-tipe bilangan bulat selalu disediakan atribut auto_increment, signed dan unsigned. Signed berarti nilai negatif ikut dalam deklarasi tersebut sedang unsigned hanya nilai positif. Jika unsigned tidak dideklarasikan maka nilai default adalah signed.
INT/INTEGER
Deklarasi : INT [(display_size)] [auto_increment] [unsigned] [zerofill]
Penyimpanan: 4 byte
Nilai yang dapat disimpan adalah integer 0 sampai dengan 4294967295 jika unsigned. – 2147483648 sampai dengan 214797647 jika signed.
TINYINT
Deklarasi : TINYINT [(display_size)] [auto_increment] [unsigned] [zerofill]
Penyimpanan: 1 byteAUTO_INCREMENT, diterapkan pada kolom-kolom integer.
Digunakan untuk menghasilkan integer dengan urutan nilai yang unik. Kolom demikian dalam suatu tabel hanya ada satu.
2 BINARY, diterapkan pada CHAR dan VARCHAR
2 NULL dan NOT NULL, dapat diterapkan pada semua kolom
2 DEFAULT, menyediakan suatu nilai baku dalam kasus tidak ada nilai yang diberikan.
PRIMARY KEY dan UNIQUE
Nilai yang dapat disimpan adalah integer 0 sampai dengan 255 jika unsigned. -128 sampai dengan 127 jika signed.
MEDIUMINT
Deklarasi : MEDIUMINT [(display_size)] [auto_increment] [unsigned] [zerofill]
Penyimpanan: 3 byte
Nilai yang dapat disimpan adalah integer 0 sampai dengan 16777215 jika unsigned.
-83888608 sampai dengan 82888607 jika signed.
BIGINT
Deklarasi : BIGINT [(display_size)] [auto_increment] [unsigned] [zerofill]
Penyimpanan: 8 byte
Nilai yang dapat disimpan adalah integer 0 sampai dengan 18446744073709551615 jika unsigned. –9223372036854775807 sampai dengan 922337203685477580787 jika signed.
SMALLINT
Deklarasi : SMALLINT [(display_size)] [auto_increment] [unsigned] [zerofill]
Penyimpanan: 2 byte
Nilai yang dapat disimpan dengan jangkauan mulai dari 0 sampai dengan 65535 jika unsigned dan -32768 sampai 32767 jika signed.
FLOAT
Deklarasi : FLOAT [(display_size,digits)] [zerofill]
Penyimpanan: 4 byte
Float menyimpan bilangan real dan tidak dapat bersifat unsigned. Nilai presisi tunggal yang dapat disimpan adalah –3,402823466E+38 sampai dengan –1,1175494351E-38,0, dan 1,1175494351E-38 sampai dengan 3,402823466E+38.
DOUBLE
Deklarasi : DOUBLE [(M,D)] [zerofill]
Penyimpanan: 8 byte
Double menyimpan bilangan real dengan presisi ganda. Nilai yang boleh adalah – 1,7976931348623167E+308 sampai dengan –2.2250738585072014E-308,0, dan 2.2250738585072014E-308 sampai dengan 1,7976931348623167E+308. Nilai M merupakan maksimal panjang tampilan. Nilai D merupakan nilai desimal.
DECIMAL
Deklarasi : DECIMAL [(precision [,scale])] [zerofill]
Penyimpanan: precision + 2 byte
Menyimpan bilangan floating point dimana ketepatan adalah kritis, seperti untuk nilai mata uang. Tipe DECIMAL memerlukan Anda untuk menspesifikasikan precision dan scale.
Precision adalah jumlah nilai digit yang berarti. Scale adalah jumlah digit yang mengikuti tanda desimal. Sebagai contoh, sebuah kolom BALANCE dideklarasikan sebagai DECIMAL(9,2) yang akan menyimpan sejumlah 9 digit berarti, dengan dua digit diantaranya berada disebelah kanan tanda desimal. Range nilai dari contoh deklarasi kolom BALANCE tersebut adalah mulai -9,999,999.99 sampai 9,999,999.99.
2.6.2 String
Tipe data string menyimpan bermacam-macam jenis data teks. Terdapat sejumlah tipe-tipe data teks yang diakomodasi dengan beragam ukuran. Untuk masing-masing ukuran, ada suatu tipe yang menyusun dan membandingkan data secara case-sensitive, sesuai dengan susunan karakter baku. Suatu tipe binari melakukan penyusunan dan perbandingan sederhana byte demi byte. Dengan kata lain, nilai binari adalah case-sensitive. Untuk CHAR dan VARCHAR, tipe-tipe binari dideklarasikan dengan menggunakan atribut BINARY . Tipe-tipe TEXT, bagaimanapun juga, memiliki hubungan dengan tipe-tipe BLOB.
BLOB
Deklarasi: BLOB
Bentuk binari dari TEXT.
CHAR
Deklarasi: CHAR(size) [BINARY]
ukuran: ditetapkan oleh nilai ukuran dengan jangkauan sampai dengan 255 Penyimpanan: size byte
Suatu kolom dengan nilai teks yang panjangnya tetap. Nilai string dengan jumlah karakter lebih sedikit dari ukuran kolom maka akan diisi dengan spasi. Spasi yang diisikan tersebut ketika diambil dari database akan dihilangkan.
LONGBLOB
Deklarasi: LONGBLOB
Bentuk binari dari LONGTEXT
LONGTEXT
Deklarasi: LONGTEXT
ukuran: 0 samapai 4294967295 Penyimpanan: panjang nilai + 4 byte
Menyimpan nilai teks yang besar. Secara teori batas ukuran dari teks yang dapat disimpan dalam sebuah kolom LONGTEXT melampaui 4 GB, pada prakteknya kurang. Ini sehubungan dengan batasan dari protokol komunikasi MySQL, dan jumlah memori yang tersedia pada komunikasi antara klien dan server.
MEDIUMBLOB
Deklarasi: MEDIUMBLOB bentuk dari MEDIUMTEXT
MEDIUMTEXT
Deklarasi: MEDIUMTEXT ukuran: 0 sampai 16777215
Penyimpanan: panjang nilai + 3 byte
Menyimpan nilai teks dengan ukuran menengah.
TEXT
Deklarasi: TEXT ukuran: 0 sampai 65535
Penyimpanan: panjang nilai + 2 byte Penyimpanan untuk sebagian besar teks.
TINYBLOB
Deklarasi: TINYBLOB
bentuk binari dari TINYTEXT
TINYTEXT
Deklarasi: TINYTEXT ukuran: 0 sampai 255
Penyimpanan: panjang nilai + 1 byte Menyimpan nilai teks yang pendek
VARCHAR
Deklarasi: VARCHAR(size) [BINARY]
ukuran: ditetapkan oleh nilai ukuran dalam suatu jangkauan sampai 255.
Penyimpanan: panjang nilai + 1 byte
Menyimpan nilai teks yang panjangnya bervariasi.
2.6.3 Date
Tipe-tipe data date MySQL adalah perangkat yang fleksibel untuk menyimpan informasi tanggal dan waktu. Untuk memvalidasi nilai tanggal dan waktu, itu diserahkan pada aplikasi bukan database. MySQL hanya akan memeriksa bulan yang memiliki jangkauan 0 sampai 12, dan tanggal dari 0 smapai 31. February 31, 2006 adalah suatu contoh informasi tanggal MySQL yang sah. February 0, 2006 adalah informasi tanggal yang juga sah bagi MySQL. Dengan kata lain, Anda dapat menggunakan 0 untuk menandakan tanggal yang Anda tidak ketahui pasti.
MySQL secara otomatis akan mengkonversi nilai-nilai tanggal dan waktu menjadi bilangan integer ketika digunakan dalam suatu konteks bilangan integer.
DATE
Deklarasi: DATE
Format: YYYY-MM-DD (2006-01-01) Penyimpanan: 3 byte
Menyimpan tanggal dalam jangkauan dari 1 januari 1000 ('1000-01-01') sampai dengan 31 Desember 9999 ('9999-12-31') dalam almanak Gregorian.
DATETIME
Deklarasi: DATETIME
Format: YYYY-MM-DD hh:mm:ss (2006-01-01 01:00:00) Penyimpanan: 8 byte
Menyimpan informasi waktu yang spesifik dalam jangkauan dari 1 Januari 1000 12:00:00 AM ('1000-01-01 00:00:00') sampai 31 Desember 9999 11:59:59 PM ('9999-12-31 23:59:59') dalam almanak Gregorian.
TIME
Deklarasi: TIME
Format: hh:mm:ss (06:00:00) Penyimpanan: 3 byte
Menyimpan nilai waktu dalam jangkauan mulai dari tengah malam ('00:00:00') sampai 1 detik sebelum waktu tengah malam ('23:59:59').
TIMESTAMP
Deklarasi: TIMESTAMP[(display_size)]
Format: YYYYMMDDhhmmss(20010101060000) Penyimpanan: 4 byte
Sebuah representasi dari sebuah penunjukan waktu ke detik dalam jangkauan dari tengah malam pada 1 januari 1970, sampai pada satu menit sebelum tengah malam pada 31 Desember 2037. Kegunaan utama adalah menjaga jejak dari perubahan-perubahan tabel.
Ketika Anda memasukkan suatu nilai NULL kedalam suatu kolom TIMESTAMP, maka tanggal dan waktu saat ini yang akan di masukkan. Jika Anda merubah beberapa nilai dari sebuah baris dengan suatu kolom TIMESTAMP, maka kolom TIMESTAMP yang pertama akan diupdate secara otomatis dengan tanggal dan waktu saat ini.
YEAR
Deklarasi: YEAR[(size)]
Format: YYYY(2006) Penyimpanan: 1 byte
Menyimpan suatu informasi tahun dari alamanak Gregorian. Parameter size
memungkinkan Anda untuk menyimpan tahun dengan menggunakan 2 digit dari 4 digit tahun. Jangkauan untuk suatu YEAR(4) adalah mulai 1900 sampai 2155, sedangkan YEAR(2) dari 1970 sampai 2069. Nilai size baku adalah YEAR(4).
2.6.4 Tipe data Komplek
Tipe data komplek MySQL yaitu ENUM dan SET adalah tipe string yang khusus. Mereka didaftarkan secara terpisah karena mereka secara konsep lebih komplek, dan merepresentasikan suatu bawaan tipe data SQL 3 yang didukung MySQL di masa datang.
ENUM
Deklarasi: ENUM(nilai1, nilai2, ...)
Penyimpanan: 1-255 anggota nilai: 1 byte / 256-65535 anggota nilai: 2 byte
Menyimpan satu nilai dari suatu daftar nilai-nilai teks yang mungkin yang sebelumnya sudah didefinisikan. Ketika Anda membuat sebuah kolom ENUM, Anda menyediakan suatu daftar dari seluruh nilai-nilai yang mungkin. Nilai-nilai yang dapat ditambahkan dan dirubah pada suatu kolom ENUM hanya yang terdfatar dalam daftar nilai-nilai teks yang mungkin tersebut. Jika Anda mencoba memasukkan suatu nilai yang tidak terdapat dalam daftar atau bukan bagian dari daftar maka akan menyebabkan sebuah string kosong yang akan disimpan.
SET
Deklarasi: SET(nilai1, nilai2, ....) Penyimpanan:
1 sampai 8 anggota nilai: 1 byte 9 sampai 16 anggota nilai: 2 byte 17 sampai 24 anggota nilai: 3 byte 25 sampai 32 anggota nilai: 4 byte 33 sampai 64 anggota nilai: 8 byte
Sebuah daftar nilai-nilai yang diambil dari sekumpulan nilai-nilai yang sudah didefinisikan sebelumnya. Sebuah kolom dapat menyimpan beberapa atau tidak sama sekali nilai-nilai teks yang telah didefinisikan dalam pernyataan SET. SET pada dasarnya adalah sebuah ENUM yang memungkinkan setiap kolom untuk menyimpan lebih dari satu nilai.SET tidak menyimpan sesuai dengan indek, tetapi seperti suatu bitmap yang komplek. Suatu SET dengan anggota-anggota nilai Jeruk, Apel, Pir, dan Pisang, masing-masing elemen
dinyatakan oleh suatu bit 'on' dalam sebuah byte, sebagaimana ditunjukkan dibawah ini:
Representasi Elemen-elemen SET MySQL
Member Nilai Desimal Representasi secara Bit
Jeruk 1 0001
Apel 2 0010
Pir 4 0100
Pisang 8 1000
Dalam contoh ini, nilai-nilai Jeruk dan Pir disimpan dalam database sebagai 5 (0101). Anda dapat menyimpan suatu nilai maksimum 64 dalam suatu kolom SET. Meskipun Anda dapat memberi nilai yang sama beberapa kali dalam suatu pernyatan SQL pengubahan suatu kolom SET, hanya sebuah nilai yang sebenarnya disimpan.
2.7 Opsi-opsi Kolom
Dalam MySQL, pada waktu pertama membuat tabel, atau dikemudian waktu, Anda dapat menambah, merubah opsi-opsi kolom tabel. Opsi-opsi kolom membatasi data agar dimasukkan sesuai dengan opsi yang telah ditetapkan.
2 UNSIGNED, membuat kolom tidak boleh memiliki nilai negatif
2 ZEROFILL, mengisi lebar data yang ditampilkan dengan nol
2 AUTO_INCREMENT, diterapkan pada kolom-kolom integer. Digunakan untuk menghasilkan integer dengan urutan nilai yang unik. Kolom demikian dalam suatu tabel hanya ada satu.
2 BINARY, diterapkan pada CHAR dan VARCHAR
2 NULL dan NOT NULL, dapat diterapkan pada semua kolom
2 DEFAULT, menyediakan suatu nilai baku dalam kasus tidak ada nilai yang diberikan.
2 PRIMARY KEY dan UNIQUE
2.8 Operator
MySQL menawarkan tiga jenis operator: arithmatic, compparison, dan logical.
2.8.1 Peraturan ketentuan hak yang lebih tinggi
Ketika SQL mengandung pernyataan yang komplek, sub pernyataan dievaluasi berdasarkan ketentuan aturan MySQL yang lebih tinggi. Anda dapat megesampingkan ketentuan aturan MySQL yang lebih tinggi dengan mengurung suatu pernyataan dalam tanda kurung:
Prioritas hak yang lebih tinggi Operator-operator
1 BINARY
2 NOT
3 ^
4 - (unary minus)
5 * / %
6 + -
7 << >>
8 &
9 |
10 <= >= = <=> <> IN IS LIKE REGEXP
11 BETWEEN CASE
12 AND
13 OR XOR
2.8.2 Operator Arithmatic
Operator-operator arithmatic melakukan arithmatic dasar antara dua buah nilai:
Operator Deskripsi
+ Menambahkan dua buah nilai bilangan - Mengurangi dua buah nilai bilangan
* Mengalikan dua buah nilai bilangan / Membagi dua buah nilai bilangan
% Memberikan sisa hasil bagi dua buah nilai bilangan
| Melakukan operasi OR secara bit antara dua buah nilai bilangan bulat
^ Melakukan operasi eksklusif OR secara bit antara dua buah nilai bilangan bulat
& Melakukan operasi AND secara bit antara dua buah nilai bilangan bulat
<< Melakukan operasi geser kekiri secara bit pada sebuah nilai bilangan bulat
>> Melakukan operasi geser kekanan secara bit pada sebuah nilai bilangan bulat
2.8.3 Operator Comparison
Operator comparison membandingkan nilai-nilai dan mengembalikan 1 jika perbandingan adalah benar (true), dan 0 (false) jika sebaliknya. Kecuali untuk operator <=>, nilai NULL mengakibatkan suatu operator comparison mengevaluasinya ke NULL.
Operator-operator Deskripsi
<> atau != Mencocokkan baris jika kedua nilai tidak sama atau tidak sebanding
<= Mencocokkan baris jika nilai sebelah kiri lebih kecil atau sama dengan nilai sebelah kanan
< Mencocokkan baris jika nilai sebelah kiri lebih kecil dari nilai sebelah kanan
>= Mencocokkan baris jika nilai sebelah kiri lebih besar atau sama dengan nilai sebelah kanan
> Mencocokkan baris jika nilai sebelah kiri lebih besar dari nilai sebelah kanan
nilai BETWEEN nilai1 AND nilai2
Mencocokkan baris jika nilai adalah antara nailai1 dan nilai2, atau sama dengan nilai1 atau nilai2
nilai IN (nilai1, nilai2,....) Mencocokkan baris jika nilai termasuk dalam daftar nilai nilai NOT IN (nilai1,
nilai2,....)
Mencocokkan baris jika nilai tidak termasuk dalam daftar nilai
nilai1 LIKE nilai2 Membandingkan nilai1 dan nilai2 dan mencocokkan baris jika mereka sesuai. Nilai disebelah kanan dapat berupa karakter wildcard '%', yang cocok dengan semua karakter (termasuk nol karakter), dan '_', yang mencocokkan tepat ke satu karakter. Penggunaan yang sering adalah membandingkan suatu nilai kolom dengan satu string yang mengandung wildcard (contoh: SELECT name FROM pegawai WHERE name LIKE 'B%').
nilai1 NOT LIKE nilai2 Membandingkan nilai1 dan nilai2 dan mencocokkan baris jika mereka berbeda. Ini identik dengan NOT (nilai1 LIKE nilai2)
nilai1 REGEXP/RLIKE Membandingkan nilai1 dan nilai2 dengan menggunakan
nilai2 extended reguler expression dan mencocokkan baris jika kedua nilai sesuai. Nilai sebelah kanan dapat mengandung penuh konsep wildcard reguler expression UNIX (contoh:
SELECT name FROM pegawai WHERE name RLIKE '^B.*' nilai1 NOT REGEXP nilai2 Membandingkan nilai1 dan nilai2 dengan menggunakan
extended reguler expression dan mencocokkan baris jika kedua nilai berbeda. Ini identik dengan NOT (nilai1 REGEXP nilai2).
2.8.4 Operator Logical
Operator logical memeriksa nilai kebenaran dari satu atau lebih pernyataan. Dalam istilah SQL, suatu operator logical memeriksa apakah operand-operand nya adalah 0, nonzero, atau NULL. Suatu nilai 0 berarti salah (false), nonzero berarti benar(true) dan NULL berarti tak bernilai.
Operator-operator Deskripsi
NOT atau ! Melakukan suatu logika not(mengembalikan '1' jika nilai adalah 0, NULL jika nilai adalah NULL, jika tidak mengembalikan '0')
OR atau || Melakukan suatu operasi logika or (mengembalikan '1' jika salah satu argumen atau nilai bukan non-zero atau bukan NULL, NULL jika salah satu argumen atau nilainya NULL, jika tidak mengembalikan '0')
XOR Melakukan suatu operasi logika eksklusif or (mengembalikan '1' jika satu dan hanya satu argumen yang bukan 0 dan bukan NULL, NULL jika salah satu adalah NULL, jika tidak mengembalikan '0')
AND atau && Melakukan operasi logika and (mengembalikan '0' jika salah satu dari argumen adalah 0, NULL jika salah satu argumen adalah NULL, jika tidak mengembalikan '1')
2.9 Memulai dan mengakhiri koneksi ke database server
Untuk koneksi ke database server, Anda biasanya perlu memberikan nama user MySQL dan password nya ketika menjalankan program klien mysql. Jika server berjalan pada komputer yang berbeda , Anda juga perlu memberikan nama komouter atau nomor IP komputer server database tersebut. Pembahasan lebih detil tentang program klien mysql telah dibahas dalam pembahasan sebelumnya.
Begitu Anda mengetahui parameter-parameter yang diperlukan, maka Anda dapat
melakukan koneksi ke database server MySQL, seperti berikut ini:
Tanda prompt mysql> menjelaskan pada Anda bahwa mysql telah siap menerima perintah (command) dari Anda. Beberapa instalasi MySQL memungkinkan Anda untuk koneksi ke database server sebagai anonymous user (user tak bernama) pada komputer lokal (localhost).
Untuk mengakhiri koneksi dari database server , Anda dapat mengetikkan perimtah quit, exit , atau (\q), seperti berikut ini:
mysql> q uit atau
mysql> exit atau
mysql> \q
Berikut ini tabel yang menampilkan kondisi setiap prompt yang akan Anda lihat, dan kesimpulan mengenai apa yang terjadi dengan kondisi prompt seperti itu di dalam mysql:
Prompt kesimpulan
mysql> Siap menerima perintah baru
-> Menunggu baris perintah berikutnya dari suatu perintah terdiri dari banyak baris
'> Menunggu baris perintah berikutnya, dengan mengelompokkan sebuah string yang diawali dengan tanda kutip tunggal (')
“> Menunggu baris perintah berikutnya, dengan mengelompokkan sebuah string yang diawali dengan tanda kutip ganda(“)
`> Menunggu baris perintah berikutnya, dengan mengelompokkan sebuah identifier diawali dengan tanda back-tick (`)
2.10 Membuat dan menggunakan database
Sebelum Anda dapat membuat sebuah tabel Anda harus terlebih dahulu membuat Database. Perintah SQL dapat Anda ketikkan dengan huruf besar maupun kecil. Hanya saja di sini kita menggunakan huruf besar agar Anda lebih mudah membedakan antara perintah SQL dengan objek-objek lainnya. Perlu diingat, setelah selesai mengetikkan perintah SQL pada prompt MySQL, Anda wajib mengetikkan tanda titik koma yang menandakan akhir dari perintah SQL. Sintak penulisan perintah untuk membuat database seperti berikut ini :
mysql> CREATE DATABASE database_name;
Hal yang harus diperhatikan dalam penamaan database adalah nama tidak boleh menggunakan kata-kata yang menjadi kosakata SQL seperti select karena hal itu akan membuat rancu. Perlu juga diperhatikan huruf besar atau huruf kecil sebuah nama database karena pada sistem UNIX huruf 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' menjadi database yang Anda akses saat ini maka Anda dapat mengakses database tersebut dengan perintah sebagai berikut :
mysql>USE per pustakaan;
Atau Anda dapat juga mengakses database perpustakaan melalui command-line sebagai
berikut:
2.11 Manipulasi tabel
Tabel-tabel dapat dibuat dan dimodifikasi jika diperlukan. Jika Anda sudah memilih atau mengakses database maka Anda dapat membuat tabel sebagai berikut.
2.11.1 Membuat tabel
Setelah Anda memilih Database barulah Anda dapat membuat sebuah tabel, Sintak penulisan perintah membuat tabel sebagai berikut:
mysql> CREATE TABLE nama_tabel( kolom1 tipe_data opsi_kolom, kolom2 tipe_data opsi_kolom, ..., kolomN tipe_data opsi_kolom, PRIMARY KEY(nama_kolom), INDEX (nama_kolom)
) type=tipe_tabel
Dalam pemakaian pernyataan create table Anda akan menemukan 2 opsi yang biasanya menyertai deklarasi definisi kolom yaitu
1 null/ not null
1 default
Null/not null mengindikasikan apakah suatu kolom dapat menerima nilai null (nilai tiada).
Jika dinyatakan null berarti null dapat terjadi dikolom tersebut sebaliknya bila diberi atribut not null maka nilai null tidak boleh pada kolom tersebut.
Default menyatakan nilai baku yang akan dipakai jika dalam suatu proses pemasukan nilai ke kolom tersebut tidak diberi nilai.
Contoh berikut akan membuat tabel dengan nama buku:
Setelah Anda membuat tabel, perintah SHOW TABLES seharusnya menampilkan output sebagai berikut:
Untuk memeriksa tabel yang telah Anda buat sesuai dengan spesifikasi yang telah ditetapkan, gunakanlah perintah DESCRIBE atau DESC. Sebagai contoh jika Anda lupa nama kolom atau tipe kolom dari tabel yang telah Anda buat. Gunakanlah perintah seperti contoh dalam gambar berikut :
2.11.2 Menghapus tabel
Untuk menghapus tabel gunakan perintah berikut ini:
mysql> DROP TABLE buku;
atau
mysql> DROP TABLE IF EXISTS buku;
2.11.3 Merubah tabel
ALTER TABLE memungkinkan Anda untuk merubah struktur tabel yang ada. Anda dapat merubah tabel untuk keperluan:
1 Menambah atau menghapus kolom
1 Merubah nama atau definisi kolom
1 Menambah atau menghapus index
1 Menerapkan suatu susunan berbeda pada baris-baris
1 Merubah nama tabel
ALTER TABLE bekerja dengan cara membuat salinan tabel dari tabel yang asli yang bersifat sementara (temporer). Proses perubahan tabel dilakukan pada tabel salinan, kemudian tabel asli dihapus, dan yang baru dirubah namanya. Ketika perintah ALTER TABLE sedang dieksekusi, tabel asli masih dapat dibaca oleh klien-klien. 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.
Contoh berikut adalah perubahan tabel dengan menambah kolom.
Gunakan keyword MODIFY atau CHANGE, jika Anda akan melakukan perubahan tipe data kolom. MODIFY dan CHANGE memiliki fungsi yang sama yaitu merubah tipe data kolom, hanya saja dengan CHANGE memungkinkan nama kolom juga dapat dirubah.
2.11.4 Merubah nama tabel
RENAME merubah nama tabel, dan juga bekerja dalam perintah ALTER TABLE:
Merubah beberapa nama tabel sekaligus dapat dilakukan dengan satu perintah saja dimana tabel-tabel dipisahakan dengan tanda koma, seperti berikut:
Merubah tipe dan opsi kolom tabel dapat dilakukan juga bersamaan dengan merubah nama tabel dalam satu perintah seperti berikut ini:
2.12 Index
Ketika data dalam tabel bertambah besar jumlahnya, proses pembacaan data akan menjadi lambat. Index memungkinkan nilai-nilai kolom dapat ditemukan dengan lebih cepat, pengambilan atau pembacaan data berdasarkan index relatif lebih cepat. Agar performa query Anda terjaga secara, sangatlah penting mengindekskan (indexes) tabel-tabel Anda.
Index dapat melakukan pengunikkan (unique) untuk mencegah duplikasi.
MySQL mendukung empat tipe index:
1 Non-unique simple indexes
1 UNIQUE index, setiap nilai adalah berbeda dari yang lainnya.
1 PRIMARY KEY adalah suatu UNIQUE key yang tidak membolehkan nilai NULL.
1 FULLTEXT dioptimasi untuk pencarian teks.
Index dapat didefinisikan ketika tabel dibuat. Ini meliputi definisi index dalam perintah CREATE TABLE, bersama dengan pendefinisian kolom. Suatu definisi index terdiri dari suatu kata kunci yang menunjukkan tipe index, diikuti oleh suatu daftar nama-nama kolom yang akan dijadikan index didalam tanda kurung. Dengan mengasumsikan bahwa definisi tabel buku tanpa index tampak seperti berikut :
2.12.1 Non-unique index
Untuk membuat tabel dengan dengan kolom-kolom yang sama seperti tabel buku sebelumnya, tetapi dengan suatu Non-unique index pada kolom 'tahun' , klausa INDEX disertakan dalam perintah CREATE TABLE berikut ini:
2.12.2 Unique index
Unique melakukan pengunikkan kolom dan mencegah duplikasi. Ini bermanfaat khususnya ketika menetapkan nilai-nilai untuk proses lookup, seperti id.
2.12.3 Primary Key index
Dalam sebuah tabel hanya ada satu buah primary key. Primary key ada;ah suatu UNIQUE index yang tidak mengijinkan nilai NULL.
Index dapat ditambahkan pada suatu tabel. Sebagai tambahan, proses penambahan index dapat dilakukan dengan menggunakan perintah ALTER TABLE, seperti berikut:
mysql> ALTER TABLE buku ADD PRIMARY KEY (id)