ntuk Linux atau Unix. Karena itu, yang terbaik adalah peka terhadap huruf
besar-kecil jika kita perlu mengubah platform hosting.
Dalam pembicaraan database, objek adalah entitas, dan entitas memiliki atribut. Dalam tabel,
setiap baris mewakili entitas, dan kolom berisi atribut setiap entitas. Misalnya, dalam tabel
pelanggan, setiap baris berisi informasi untuk satu pelanggan. Beberapa atribut yang terdapat
dalam kolom mungkin termasuk nama depan, nama belakang, nomor telepon, dan usia. Ikuti
langkah-langkah ini untuk memutuskan cara mengatur data kita ke dalam tabel:
1. Beri nama database Anda.
Tetapkan nama ke database untuk aplikasi Anda. Misalnya, kita dapat memberi nama
database yang berisi informasi tentang rumah tangga di Direktori Rumah Tangga
lingkungan.
2. Mengidentifikasi objek.
Lihat daftar informasi yang ingin kita simpan dalam database (seperti yang dibahas di
bagian sebelumnya). Analisis daftar kita dan identifikasi objeknya. Misalnya, database
HouseholdDirectory mungkin perlu menyimpan yang berikut ini:
• Nama setiap member keluarga
• Alamat rumah
• Nomor telepon
• Usia setiap member rumah tangga
• Sereal sarapan favorit setiap member rumah tangga
38
Manajemen Database MySQL
saat kita menganalisis daftar ini dengan cermat, kita menyadari bahwa kita
menyimpan informasi tentang dua objek: rumah tangga dan member rumah tangga.
Alamat dan nomor telepon untuk rumah tangga pada umumnya, tetapi nama, umur,
dan sereal favorit untuk setiap member rumah tangga tertentu.
3. Tentukan dan beri nama tabel untuk setiap objek.
Misalnya, database HouseholdDirectory memerlukan tabel bernama Household dan
tabel bernama HouseholdMember.
4. Identifikasi atribut untuk setiap objek.
Analisis daftar informasi kita dan identifikasi atribut yang perlu kita simpan untuk
setiap objek. Pecahkan informasi yang akan disimpan menjadi potongan-potongan
kecil yang masuk akal. Misalnya, saat menyimpan nama seseorang dalam tabel, kita
dapat memecah nama menjadi nama depan dan nama belakang. Melakukan hal ini
memungkinkan kita untuk mengurutkan berdasarkan nama belakang, yang akan lebih
sulit jika kita menyimpan nama depan dan belakang bersama-sama. Kita bahkan dapat
memecah nama menjadi nama depan, nama tengah, dan nama belakang, meskipun
tidak banyak aplikasi yang perlu memakai nama tengah secara terpisah.
5. Tentukan dan beri nama kolom untuk setiap atribut terpisah yang kita identifikasi di
Langkah 4.
Beri setiap kolom nama yang secara jelas mengidentifikasi informasi dalam kolom
tersebut. Nama kolom harus satu kata, tanpa spasi. Misalnya, kita mungkin memiliki
kolom bernama firstName dan lastName atau first_name dan last_name.
MySQL dan SQL mencadangkan beberapa kata untuk digunakan sendiri, dan kita tidak
dapat memakai kata-kata itu sebagai nama kolom. Kata-kata saat ini digunakan
dalam pernyataan SQL atau dicadangkan untuk penggunaan di masa mendatang. Kita
tidak dapat memakai ADD, ALL, AND, CREATE, DROP, GROUP, ORDER, RETURN,
SELECT, SET, TABLE, USE, WHERE, dan banyak lagi sebagai nama kolom. Untuk daftar
lengkap kata-kata yang dicadangkan, lihat manual MySQL online di
http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html.
6. Identifikasi kunci utama.
Setiap baris dalam tabel memerlukan pengidentifikasi unik. Tidak boleh ada dua
baris dalam tabel yang sama persis. Saat kita mendesain tabel, kita memutuskan kolom
mana yang menyimpan pengidentifikasi unik, yang disebut kunci utama. Kunci utama
dapat digabungkan lebih dari satu kolom. Dalam banyak kasus, atribut objek kita tidak
memiliki pengenal unik. Misalnya, tabel pelanggan mungkin tidak memiliki
pengidentifikasi unik karena dua pelanggan dapat memiliki nama yang sama. Saat kita
tidak memiliki kolom pengenal unik, kita perlu menambahkan kolom khusus untuk
menjadi kunci utama. Seringkali, kolom dengan nomor urut digunakan untuk tujuan
ini. Misalnya, pada tabel dibawah ini, kunci utama adalah field cust_id karena setiap
pelanggan memiliki nomor ID yang unik
Tabel 3.1 Contoh Data dari Tabel Pelanggan
Cust_id First_name Last_name Phone
27895 Andi Prakasa 0812345-000
44555 Wiwid Wahyudi 0812345-435
23695 Setiyo Adi 0812345-321
29991 Juni Amanullah 0812345-123
39
Manajemen Database MySQL
12345 Dani Sasmoko 0812345-345
7. Tentukan defaultnya.
Anda dapat menentukan default yang ditetapkan MySQL ke field saat tidak ada data
yang dimasukkan ke dalam field. Kita tidak memerlukan default, tetapi sering kali bisa
berguna. Misalnya, jika aplikasi kita menyimpan alamat yang menyertakan negara, kita
dapat menentukan IDN sebagai default. Jika user tidak mengetik negara, MySQL masuk
ke IDN.
8. Identifikasi kolom yang memerlukan data.
Anda dapat menentukan bahwa kolom tertentu tidak boleh kosong (juga disebut
NULL). Misalnya, kolom yang berisi kunci utama kita tidak boleh kosong. Jika tidak ada
nilai yang disimpan di kolom kunci utama, MySQL tidak membuat baris dan
mengembalikan pesan kesalahan. Nilai dapat berupa spasi kosong atau string kosong
(misalnya, ""), tetapi beberapa nilai harus disimp an di kolom. Kita dapat mengatur
kolom lain, selain kunci utama, untuk memerlukan data.
Database yang dirancang dengan baik menyimpan setiap informasi hanya di satu
tempat. Menyimpannya di lebih dari satu tempat tidak efisien dan menimbulkan masalah jika
kita perlu mengubah informasi. Jika kita mengubah informasi di satu tempat tetapi lupa
mengubahnya di tempat lain, database kita dapat mengalami masalah serius. Jika ternyata
kita menyimpan data yang sama di beberapa baris, kita mungkin perlu mengatur ulang tabel
Anda. Misalnya, kita menyimpan data tentang buku, termasuk alamat penerbit. Saat kita
memasukkan data, kita menyadari bahwa kita memasukkan alamat penerbit yang sama di
banyak baris. Cara yang lebih efisien untuk menyimpan data ini adalah dengan menyimpan
informasi buku di satu tabel dan informasi penerbit buku di tabel lain. Kita dapat menentukan
dua tabel: Buku dan Penerbit Buku. Di tabel Buku, kita akan memiliki kolom judul, penulis,
tanggal_pub, dan harga. Di BookPublishertable, kita akan memiliki kolom seperti nama,
alamat jalan, dan kota.
Membuat hubungan antar tabel dibeberapa tabel dalam database saling
berhubungan. Paling sering, satu baris dalam satu tabel terkait dengan beberapa baris di tabel
lain. Kita memerlukan kolom untuk menghubungkan baris terkait di tabel yang berbeda.
Dalam banyak kasus, kita menyertakan kolom dalam satu tabel untuk menampung data yang
cocok dengan data di kolom kunci utama tabel lain. Aplikasi umum yang memerlukan
database dengan dua tabel terkait adalah aplikasi pesanan pelanggan. Misalnya, satu tabel
berisi informasi pelanggan, seperti nama, alamat, dan nomor telepon. Setiap pelanggan dapat
memiliki dari nol hingga banyak pesanan. Kita dapat menyimpan informasi pesanan dalam
tabel dengan informasi pelanggan, tetapi baris baru akan dibuat setiap kali pelanggan
melakukan pemesanan, dan setiap baris baru akan berisi semua informasi pelanggan. Kita
dapat menyimpan pesanan dengan lebih efisien dalam tabel terpisah, mungkin bernama
CustomerOrder. (Anda tidak dapat menamai tabel hanya Pesan karena itu adalah kata yang
dicadangkan.) Di CustomerOrdertable, kita menyertakan kolom yang berisi kunci utama dari
baris di tabel Pelanggan sehingga pesanan terkait dengan baris yang benar dari Tabel
Pelanggan. Hubungan tersebut ditunjukkan pada Tabel dibawah ini.
40
Manajemen Database MySQL
Tabel 3.2 Contoh Data dari Tabel CustomerOrder
Order_no Cust_id Item_name Cost
87-222 27895 Kaos 200.000
87-223 44555 Sepatu 400.000
87-224 23695 Jeans 350.000
87-225 29991 Jeans 350.500
87-226 12345 Topi 150.000
Tabel Pelanggan dalam contoh ini terlihat seperti tabel pelanggan. Setiap pelanggan
memiliki cust_id yang unik. Tabel CustomerOrder terkait ditunjukkan pada Tabel 3 -2. Ini
memiliki kolom cust_id yang sama yang muncul di tabel Pelanggan. Melalui kolom ini,
informasi pesanan di tabel CustomerOrder terhubung dengan nama dan nomor telepon
pelanggan terkait di tabel Pelanggan. Dalam contoh ini, kolom yang menghubungkan tabel
Customer dan tabel CustomerOrder memiliki nama yang sama. Mereka dapat memiliki nama
yang berbeda, selama kolom berisi data yang sama.
Menyimpan berbagai jenis data
MySQL menyimpan informasi dalam format yang berbeda, berdasarkan pada jenis
informasi yang kita harapkan dari MySQL. MySQL memungkinkan berbagai jenis data untuk
digunakan dengan cara yang berbeda. Jenis utama data adalah karakter, numerik, dan data
tanggal dan waktu. Kita menjelaskan itu dan tipe data lainnya dan kemudian memberi tahu
kita cara menunjukkan tipe data mana yang kita gunakan di setiap kolom.
Data karakter
Jenis data yang paling umum adalah data karakter (data yang disimpan sebagai string
karakter), dan hanya dapat dimanipulasi dalam string. Sebagian besar informasi yang kita
simpan adalah data karakter — misalnya, nama pelanggan, alamat, nomor telepon, dan
deskripsi hewan peliharaan. Kita dapat memindahkan dan mencetak data karakter. Dua
karakter string dapat disatukan (digabung), substring dapat dipilih dari string yang lebih
panjang, dan satu string dapat diganti dengan yang lain. Data karakter dapat disimpan dalam
format panjang tetap atau panjang variabel:
• Format panjang tetap: Dalam format ini, MySQL mencadangkan ruang tetap untuk
data. Jika data lebih panjang dari panjang tetap, hanya karakter yang sesuai yang
disimpan — karakter yang tersisa di bagian akhir tidak disimpan. Jika string lebih
pendek dari panjang tetap, ruang ekstra dibiarkan kosong dan terbuang.
• Format panjang variabel: Dalam format ini, MySQL menyimpan string dalam field
yang panjangnya sama dengan string. Kita menentukan panjang string, tetapi jika
string itu sendiri lebih pendek dari panjang yang ditentukan, MySQL hanya
memakai ruang yang diperlukan, alih-alih membiarkan ruang ekstra kosong. Jika
string lebih panjang dari ruang yang ditentukan, karakter tambahan tidak disimpan.
Jika panjang string karakter hanya sedikit berbeda, gunakan format panjang tetap. Misalnya,
deskripsi hewan peliharaan kita mungkin berupa kelelawar kecil, atau mungkin memiliki
beberapa baris deskripsi. Dengan menyimpan deskripsi ini dalam format panjang variabel, kita
hanya memakai ruang yang diperlukan
Data numerik
Jenis data umum lainnya adalah data numerik — data yang disimpan sebagai angka.
Kita dapat menyimpan angka desimal (misalnya, 10.5, 2.34567, 23456.7) serta bilangan bulat
(misalnya, 1, 2, 248). Saat kita menyimpan data sebagai angka, kita bisa memakai data
41
Manajemen Database MySQL
tersebut dalam operasi numerik, seperti menambah, mengurangi, dan mengkuadratkan.
Namun, jika kita tidak berencana memakai data untuk operasi numerik, kita harus
menyimpannya sebagai string karakter karena programmer akan memakai nya sebagai
string karakter. Tidak diperlukan konversi.
MySQL menyimpan angka positif dan negatif, tetapi kita dapat memberi tahu MySQL
untuk menyimpan hanya angka positif. Jika data kita tidak pernah negatif, simpan data sebagai
unsigned (tanpa tanda + atau – sebelum nomor). Misalnya, populasi kota atau jumlah halaman
dalam dokumen tidak boleh negatif.
MySQL menyediakan jenis kolom numerik tertentu yang disebut kolom kenaikan
otomatis. Jenis kolom ini secara otomatis diisi dengan nomor urut jika tidak ada nomor
tertentu yang disediakan. Misalnya, saat baris tabel ditambahkan dengan 5 di kolom
kenaikan otomatis, baris berikutnya secara otomatis ditetapkan 6 di kolom itu kecuali jika
nomor yang berbeda ditentukan. Kita mungkin menemukan kolom kenaikan otomatis
berguna saat kita memerlukan nomor unik, seperti nomor produk atau nomor pesanan.
Data tanggal dan waktu
Jenis data umum ketiga adalah data tanggal dan waktu. Data yang disimpan sebagai
tanggal dapat ditampilkan dalam berbagai format tanggal. Kita dapat memakai data
tersebut untuk menentukan jangka waktu antara dua tanggal atau dua kali — atau antara
tanggal atau waktu tertentu dan beberapa tanggal atau waktu arbitrer.
Data Enumerasi
Terkadang, data hanya dapat memiliki sejumlah nilai yang terbatas. Misalnya, satu-
satunya nilai yang mungkin untuk kolom mungkin ya atau tidak. MySQL menyediakan tipe data
yang disebut enumerasi untuk digunakan dengan tipe data ini. Kita memberi tahu MySQL nilai
apa yang dapat disimpan di kolom (misalnya, ya dan tidak), dan MySQL tidak menyimpan nilai
lain apa pun di kolom itu.
3.2 NAMA TIPE DATA MySQL
Saat kita membuat database, kita memberi tahu MySQL jenis data apa yang
diharapkan dalam kolom tertentu dengan memakai nama MySQL untuk tipe data. Tabel
3-3 menunjukkan tipe data MySQL yang paling sering digunakan dalam aplikasi database web.
Tabel 3.3 Jenis Data MySQL
Jenis Data MySQL Deskripsi
CHAR(length)
String karakter dengan panjang tetap.
VARCHAR(length) String karakter dengan panjang variabel. String terpanjang yang
dapat disimpan adalah length, yang harus antara 1 dan 255.
TEXT String karakter dengan panjang variabel dengan panjang
maksimum 64K teks.
INT(length) Bilangan bulat dengan rentang dari –2147483648 hingga
+2147483647. Jumlah yang dapat ditampilkan dibatasi oleh
length. Misalnya, jika length 4, hanya angka dari –999 hingga
9999 yang dapat ditampilkan, meskipun angka yang lebih tinggi
disimpan.
INT(length)
UNSIGNED
Bilangan bulat dengan rentang dari 0 hingga 4294967295.
panjang adalah ukuran angka yang dapat ditampilkan. Misalnya,
42
Manajemen Database MySQL
jika length 4, hanya angka dari 0 hingga 9999 yang dapat
ditampilkan, meskipun angka yang lebih tinggi disimpan.
BIGINT Sebuah bilangan bulat besar. Rentang yang ditandatangani adalah
–9223372036854775808 hingga 9223372036854775807. Rentang
yang tidak ditandatangani adalah 0 hingga
18446744073709551615.
DECIMAL (length,dec) Angka desimal di mana length adalah jumlah karakter yang dapat
digunakan untuk menampilkan angka, termasuk titik desimal,
tanda, dan eksponen, dan dec adalah jumlah maksimum tempat
desimal yang diperbolehkan. Misalnya, 12,34 memiliki length 5
dan dec 2.
DATE Nilai tanggal dengan tahun, bulan, dan tanggal. Menampilkan
nilai sebagai YYYY-MM-DD (misalnya, 2013 -04-03 untuk 3 April
2013).
TIME Nilai waktu dengan jam, menit, dan detik. Ditampilkan sebagai
HH:MM:SS
DATETIME Tanggal dan waktu disimpan bersama. Ditampilkan sebagai YYYY-
MM-DD HH:MM:SS.
ENUM
(“val1”,“val2”...)
Hanya nilai yang tercantum yang dapat disimpan. Maksimal
65.535 nilai dapat dicantumkan.
SERIAL Nama pintasan untuk BIGINT UNSIGNED NOT NULL
AUTO_INCREMENT.
MySQL mengizinkan banyak tipe data selain yang tercantum dalam Tabel 3-3, tetapi
kita mungkin lebih jarang memerlukan tipe data lainnya. Untuk deskripsi semua tipe data
yang tersedia, lihat manual online MySQL di http://dev.mysql.com/doc/refman/5.6/en/data-
types.html.
3.3 TIPE DATA
Istilah VARCHAR adalah singkatan dari VARiable length CHARacter string, dan perintah
mengambil nilai numerik yang memberi tahu MySQL panjang maksimum yang diizinkan untuk
string yang disimpan dalam field. Tipe data ini sangat berguna, karena membuat MySQL dapat
merencanakan ukuran database dan melakukan pencarian dengan lebih mudah. Hanya saja,
kelemahannya nilai string hanya bisa sepanjang maksimum dari ketentuan dalam definisi
tabel, sheingga jika kita membuat nilai string melebihi panjang yang ditentukan maka string
tersebut akan di potong sesuai panjang maksimumnya. Untuk field tahun memiliki nilai yang
dapat diprediksi, jadi daripada memakai VARCHAR akan lebih baik jika menggantinya
dnegan tipe CHAR(4) yang lebih efisien. Parameter 4 memungkinkan data empat byte yang
mendukung tahun 999 hingga 9999, yang mana satu byte terdiri dari 8 bit dan dapat memiliki
nilai 00000000 hingga 11111111, yang berarti 0 hingga 255 dalam desimal. Alasan saya tidak
memakai tipe data YEAR dalam tabel klasik karena ini hanya mendukung tahun 0000, dan
tahun 1901 hingga 2155, ini karena MySQL menyimpan tahun dalam satu byte untuk alasan
efisiensi, tetapi juga berarti bahwa hanya 256 tahun yang tersedia, dan tahun-tahun publikasi
judul-judul dalam tabel klasik jauh sebelum ini.
Baik CHAR dan VARCHAR menerima string teks dan memberlakukan batasan pada
ukuran bidang (field). Perbedaannya berada pada ukuran string yang ditentukan dalam field
CHAR. Jika kita memasukkan string yang lebih kecil maka ini akan diisi dengan spasi. Field
VARCHAR bukan pad text; ini memungkinkan ukuran field lebih bervariasi agar sesuai dengan
43
Manajemen Database MySQL
teks yang dimasukkan. Tetapi VARCHAR memerlukan sejumlah kecil overhead untuk
melacak ukuran masing-masing nilai. Jadi jika CHAR memiliki ukuran yang serupa di semua
catatan maka sedikit lebih efisien jika, sedangkan VARCHAR lebih efisien jika ukurannya bisa
sangat bervariasi dan menjadi besar. Selain itu, overhead menyebabkan akses ke data
VARCHAR menjad i sedikit lebih lambat daripada data CHAR.
Tipe data CHAR
Tabel dibawah ini menyajikan berbagai tipe data CHAR. Semua jenis ini menawarkan
parameter yang menetapkan panjang maksimum (atau tepat) string yang diizinkan dalam
field, setiap jenis memiliki jumlah byte maksimum bawaan yang dapat ditempati.
Tabel 3.4 Tipe data CHAR MySQL
Jenis Data Byte yang digunakan Contoh
CHAR(n) Seharusnya n(<256) CHAR(5) “Hello” uses 5 bytes
CHAR(57) “Goodbye” uses 57
bytes
VARCHAR(n) Hingga n(<65,536) V ARCHAR(7) “Morning” uses
7 bytes
VARCHAR(100) “Night” uses
5 bytes
Tipe data BINARY
Tipe data BINARY digunakan untuk menyimpan string byte penuh yang tidak memiliki
kumpulan karakter terkait. Misalnya, kita mungkin memakai tipe data BINARY untuk
menyimpan gambar GIF (lihat Tabel dibawah ini).
Tabel 3.5 Tipe data BINARY MySQL
Jenis Data Byte yang digunakan Contoh
BINARY(n) or BYTE(n) Seharusnya n(<256) CHAR tapi berisi data biner
VARBINARY(n) Hingga n(<65,536) VACHAR tapi untuk data
biner
Tipe data TEXT dan VARCHAR
Perbedaan antara TEXT dan VARCHAR kecil:
• Sebelum versi 5.0.3, MySQL akan menghapus spasi awal dan akhir dari field VARCHAR.
• Field TEXT tidak boleh memiliki nilai default.
• MySQL hanya mengindeks n karakter pertama dari kolom TEXT (Anda menentukan n
saat kita membuat indeks).
Artinya, VARCHAR adalah tipe data yang lebih baik dan lebih cepat untuk digunakan jika kita
mencari seluruh isi suatu field. Jika kita mencari lebih dari sejumlah karakter utama dalam
suatu field, maka kita harus memakai tipe data TEXT (lihat Tabel dibawah ini).
Tabel 3.6 Tipe data TEXT MySQL
Jenis Data Byte yang digunakan Contoh
TINYTEXT(n) Seharusnya n(<256) Diperlakukan sebagai string dengan set
karakter
TEXT(n) Hingga n(<65,536) Diperlakukan sebagai string dengan set
karakter
44
Manajemen Database MySQL
MEDIUMTEXT(n) Hingga n (< 1.67e+7) Diperlakukan sebagai string dengan set
karakter
LONGTEXT(n) Hingga n (< 4.29e+9) Diperlakukan sebagai string dengan set
karakter
Tipe data BLOB
Istilah BLOB adalah singkatan dari Binary Large OBject dan oleh karena itu, seperti yang
kita pikirkan, tipe data BLOB paling berguna untuk data biner yang berukuran lebih dari 65.536
byte. Perbedaan utama lainnya antara tipe data BLOB dan BINARY adalah bahwa BLOB tidak
dapat memiliki nilai default (lihat Tabel 8 -9).
Tabel 3.7 Tipe data BLOB MySQL
Jenis Data Byte yang digunakan Contoh
TINYBLOB(n) Seharusnya n(<256) Diperlakukan sebagai data biner—tanpa
kumpulan karakter
BLOB(n) Hingga n(<65,536) Diperlakukan sebagai data biner—tanpa
kumpulan karakter
MEDIUMBLOB(n) Hingga n (< 1.67e+7) Diperlakukan sebagai data biner—tanpa
kumpulan karakter
LONGBLOB(n) Hingga n (< 4.29e+9) Diperlakukan sebagai data biner—tanpa
kumpulan karakter
Tipe data numerik
MySQL mendukung berbagai tipe data numerik dari satu byte hingga angka floating-
point presisi ganda. Meskipun sebagian besar memori yang dapat digunakan field numerik
adalah 8 byte, kita disarankan untuk memilih tipe data terkecil yang cukup menangani nilai
terbesar yang kita harapkan. Database kita berukuran kecil dan dapat diakses dengan cepat.
Tabel selanjutnya dibawah ini menyajikan beberapa tipe data numerik yang didukung oleh
MySQL dan rentang nilai yang terdapat didalamny. Jika kita tidak mengenal istilah-istilahnya,
angka bertanda adalah angka dengan kemungkinan rentang dari nilai minus, hingga 0, hingga
positif, dan yang tidak bertanda memiliki nilai mulai dari 0 hingga positif. Keduanya dapat
memiliki jumlah nilai yang sama; bayan gkan saja angka bertanda digeser setengah ke kiri
sehingga setengah nilainya negatif dan setengahnya positif.
Tabel 3.8 Tipe data numerik MySQL
Jenis data Byte yang
digunakan
Nilai Minimum
Nilai maksimum
Signed Unsigned Signed Unsigned
TINYINT 1 -128 0 127 255
SMALLINT 2 -32,768 0 32,767 65,535
MEDIUMINT 3 -8.38e+6 0 8.38e+6 1.67e+7
INT
atau
INTEGER
4 -2.15e+9 0 2.15e+9 4.29e+9
BIGINT 8 -9.22e+18 0 9.22e+18 1.84e+19
FLOAT 4 -3.40e+38 n/a 3.40e+38 n/a
DOUBLE
Atau
REAL
8 -1.80e+308 n/a 1.80e+308 n/a
45
Manajemen Database MySQL
Untuk menentukan apakah tipe data ditandatangani atau tidak, gunakan kualifikasi
UNSIGNED. Contoh berikut membuat tabel bernama tablename dengan field di dalamnya
yang disebut fieldname dari tipe data UNSIGNED INTEGER:
CREATE TABLE tablename (fieldname INT UNSIGNED);
Saat membuat field numerik, kita juga dapat memberikan nomor opsional sebagai parameter,
seperti ini:
CREATE TABLE tablename (fieldname INT(4));
Tetapi kita harus ingat bahwa, parameter ini berbeda dengan tipe data BINARY dan CHAR,
parameter ini tidak menunjukkan jumlah byte penyimpanan yang akan digunakan. Angka nya
mewakili lebar tampilan data di field saat diambil. Biasanya digunakan dengan kualifikasi
ZEROFILL seperti ini:
CREATE TABLE tablename (fieldname INT(4) ZEROFILL);
Jadi kita lebar harus diisi dengan satu atau lebih nol, cukup untuk membuat lebar tampilan
field empat karakter. saat field sudah memiliki lebar yang ditentukan atau lebih besar, tidak
ada padding yang terjadi.
DATE dan TIME
Tipe data utama yang tersisa yang didukung oleh MySQL berhubungan dengan tanggal
dan waktu dan dapat dilihat pada tabel dibawah ini.
Tabel 3.9 Tipe data DATE dan TIME MySQL
Jenis Data Format tanggal/waktu
DATETIME '0000 -00-00 00:00:00'
DATE '0000 -00-00'
TIMESTAMP '0000 -00-00 00:00:00'
TIME '00:00:00'
TIMESTAMP 0000 (Hanya tahun 0000 dan1901 –2155)
Tipe data DATETIME dan TIMESTAMP ditampilkan dengan cara yang sama. Perbedaan
utamanya adalah TIMESTAMP memiliki rentang yang sangat sempit (dari tahun 1970 hingga
2037), sedangkan DATETIME mampu menampung hampir semua tanggal yang ditentukan,
kecuali tanggal dan waktu untuk sejarah kuno atau Ilmiah ilmiah memakai TIMESTAMP.
Jika kita tidak menentukan nilai saat menambahkan baris, maka secara otomatis waktu saat
ini akan dimasukkan. Kita juga dapat memperbarui kolom TIMESTAMP pada MySQL setiap kali
kita mengubah baris.
Tipe data AUTO_INCREMENT
Dalam MySQL terkadang kita perlu memastikan bahwa setiap baris dalam database
adalah unik. Kita dapat melakukan ini pada program dengan hati-hati untuk memeriksa dan
memastikan data yang kita masukkan memiliki satu nilai yang berbeda dalam dua baris.
Pendekatan ini rawan kesalahan dan hanya berfungsi dalam keadaan tertentu. Dalam tabel
klasik, misalnya, seorang penulis mungkin muncul beberapa kali. Demikian juga tahun
terbitnya juga akan sering digandakan, dan seterusnya. Akan sulit untuk memastikan bahwa
data yang kita miliki tidak terduplikasi. Contoh dibawah ini menunjukkan cara menambahkan
kolom baru yang disebut id ke tabel klasik dengan penambahan otomatis.
Contoh Menambahkan id kolom penambahan otomatis
46
Manajemen Database MySQL
ALTER TABLE classics ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT KEY;
Ini adalah perintah ALTER yang mirip dengan perintah CREATE. ALTER beroperasi pada
tabel yang sudah ada, dapat menambah, mengubah, atau menghapus kolom. Sebagai contoh,
kita dapat menambahkan kolom bernama id dengan karakteristik berikut:
INT UNSIGNED
Membuat kolom mengambil bilangan bulat yang cukup besar untuk menyimpan lebih
dari 4 miliar catatan dalam tabel.
NOT NULL
Ini memastikan bahwa setiap kolom memiliki nilai. Banyak programmer memakai
NULL di field untuk menunjukkan bahwa field tersebut tidak memiliki nilai apa pun. NULL
dapat menduplikat kolom, jadi saya melarang nilai NULL.
AUTO_INCREMENT
Menyebabkan MySQL menetapkan nilai unik untuk kolom pada setiap baris, seperti
yang dijelaskan sebelumnya.
KEY
Kolom kenaikan otomatis berguna sebagai kunci, karena kita akan cenderung mencari
baris berdasarkan kolom ini, seperti yang dijelaskan di bagian Indeks.
Setiap entri dalam kolom id sekarang akan memiliki nomor unik, dimulai dari 1 dan
selanjutnya. Setiap kali baris baru dimasukkan, kolom id-nya secara otomatis memiliki urutan
nomor berikutnya. Kita dapat memasukkan nomor dengan mengeluarkan perintah CREATE
dalam format yang sedikit berbeda. Dalam hal ini, perintah pada sebelumnya akan diganti
dengan perintah yang ada pada kolom dibawah ini.
Contoh Menambahkan kolom id yang bertambah secara otomatis pada pembuatan tabel.
CREATE TABLE classics (
author VARCHAR(128),
title VARCHAR(128),
type VARCHAR(16),
year CHAR(4),
id INT UNSIGNED NOT NULL AUTO_INCREMENT KEY) ENGINE MyISAM;
Jika kita ingin memeriksa apakah kolom telah ditambahkan, gunakan perintah berikut untuk
melihat kolom dan tipe data tabel:
DESCRIBE classics;
Sekarang sesudah kita membuat perintah seperti pada contoh diatas, kolom id tidak lagi
diperlukan.
Contoh Menghapus kolom id
ALTER TABLE classics DROP id;
Menambahkan data ke tabel
Untuk menambahkan data ke tabel, gunakan perintah INSERT.
Contoh Mengisi tabel klasik memakai perintah INSERT
INSERT INTO classics(author, title, type, year)
VALUES('Agus Widodo','Belajar PHP Dari Dasar','Ilmiah','2020' );
47
Manajemen Database MySQL
INSERT INTO classics(author, title, type, year)
VALUES('Agus Widodo','Membangun PODCAST','Ilmiah','2021');
INSERT INTO classics(author, title, type, year)
VALUES('Mars Caroline W','The Origin of Species','Ilmiah','2022');
INSERT INTO classics(author, ti tle, type, year)
VALUES('Sarwo Nugroho','Potret Diri Sebagai Komunikasi Visual Simbolik','Ilmiah','2022');
INSERT INTO classics(author, title, type, year)
VALUES('Edy Jogatama P','Desain Seni Rupa Klasik','Play','2022');
sesudah setiap baris kedua, kita akan melihat pesan Query OK. sesudah semua baris
dimasukkan, ketik perintah berikut, yang akan menampilkan isi tabel.
SELECT * FROM classics:
Jangan khawatir tentang perintah SELECT untuk saat ini—kita akan membahasnya di
bagian Querying a MySQL Database. Cukuplah untuk mengatakan bahwa, saat diketik, itu akan
menampilkan semua data yang baru saja kita masukkan.
Mari kita kembali melihat bagaimana cara memakai perintah INSERT. Bagian
pertama, INSERT INTO classics, memberi tahu MySQL tempat memasukkan data. Kemudian,
di dalam tanda kurung, empat nama kolom dicantumkan—penulis, judul, jenis, dan tahun—
semua dipisahkan dengan koma. Ini memberitahu MySQL bahwa bgian ini adalah field di mana
data akan dimasukkan. Baris kedua dari setiap perintah INSERT berisi kata kunci VALUES diikuti
oleh empat string dalam tanda kurung, dan dipisahkan dengan koma. Ini memberikan MySQL
dengan empat nilai untuk dimasukkan ke dalam empat kolom yang ditentukan sebelumnya.
Setiap item data akan dimasukkan ke dalam kolom yang sesuai, dalam korespondensi satu-ke-
satu. Jika kita secara tidak sengaja mencantumkan kolom dalam urutan yang berbeda dari
data, maka data tersebut akan masuk ke kolom yang salah. Jumlah kolom harus sesuai dengan
jumlah item data.
Mengganti nama tabel
Mengganti nama tabel, seperti perubahan lain pada struktur atau informasi meta
tentang tabel, dicapai melalui perintah ALTER. Misalnya, untuk mengubah nama tabel klasik
menjadi pra1900, gunakan perintah berikut:
ALTER TABLE classics RENAME pre1900;
saat kita memakai perintah ini, kita harus mengembalikan nama tabel dengan
memasukkan yang berikut ini:
ALTER TABLE pre1900 RENAME classics;
Mengubah tipe data kolom
Mengubah tipe data kolom juga memakai perintah ALTER tapi bersama dengan
kata kunci MODIFY. Jadi untuk mengubah tipe data tahun kolom dari CHAR(4) menjadi
SMALLINT (yang hanya memerlukan dua byte penyimpanan dan akan menghemat ruang
disk), masukkan berikut ini:
ALTER TABLE pre1900 RENAME classics;
48
Manajemen Database MySQL
saat kita memasukkan contoh ini saat konversi tipe data dapat masuk ke MySQL, itu akan
secara otomatis mengubah data sambil tapi tetap menjaga artinya. Dalam hal ini, ia akan
mengubah setiap string menjadi bilangan bulat yang sebanding, dan seterusnya, karena string
dapat dikenali sebagai mengacu pada bilangan bulat.
Menambahkan kolom baru
Berikut cara menambahkan halaman kolom baru, yang akan digunakan untuk
menyimpan jumlah halaman dalam publikasi:
ALTER TABLE classics ADD pages SMALLINT UNSIGNED;
Ini menambahkan kolom baru dengan halaman nama memakai tipe data UNSIGNED
SMALLINT, cukup untuk menampung nilai hingga 65.535—semoga itu lebih dari cukup untuk
buku apa pun yang pernah diterbitkan! Dan, jika kita meminta MySQL untuk mendeskripsikan
tabel yang diperbarui memakai perintah DESCRIBE, sebagai berikut, kita akan melihat
perubahan yang telah dibuat:
DESCRIBE classics;
Gambar 3.1 Menambahkan kolom halaman baru dan melihat tabel
Mengganti nama kolom
Mari kita coba mengubah nama menjadi kategori:
ALTER TABLE classics CHANGE type category VARCHAR(16);
Perhatikan penambahan VARCHAR(16) di akhir perintah ini. Itu karena kata kunci CHANGE
memerlukan tipe data yang akan ditentukan, bahkan jika kita tidak bermaksud untuk
mengubahnya, dan VAR CHAR (16) adalah tipe data yang ditentukan saat kolom itu awalnya
dibuat sebagai tipe.
Menghapus kolom
Ini merupakan cara menghapus kolom memakai kata kunci DROP:
ALTER TABLE classics DROP pages;
49
Manajemen Database MySQL
Ingatlah bahwa DROP tidak dapat diubah dan kita harus memakai nya dengan hati-hati,
karena bisa saja tanpa disengaja, seluruh tabel dapat terhapus karena perintah ini (dan bahkan
database).
Menghapus tabel
Contoh Membuat, melihat, dan menghapus tabel
CREATE TABLE disposable(trash INT);
DESCRIBE disposable;
DROP TABLE disposable;
SHOW tables;
Gambar 3.2 Membuat, melihat, dan menghapus tabel
Merancang Contoh database
Di bagian ini, kita merancang database sampel untuk memuat informasi pesanan
pelanggan. Kita memakai database ini untuk menunjukkan bagaimana membangun dan
memakai database. Buat daftar informasi berikut yang ingin kita simpan untuk masing-
masing pelanggan:
• Nama
• Alamat
• Nomor telepon
• Nomor faks
• Alamat email
Selain itu, kita perlu mengumpulkan informasi tentang produk mana yang dipesan pelanggan.
Untuk setiap pesanan, kita perlu mengumpulkan informasi berikut:
• Tanggal pemesanan dilakukan
• Informasi produk untuk setiap item dalam pesanan
Dalam contoh ini, produknya adalah kaos/T-shirt. Oleh karena itu, kita memerlukan
informasi berikut untuk setiap item:
o Nomor yang mengidentifikasi produk tertentu (seperti nomor katalog)
o Ukuran
o Harga
50
Manajemen Database MySQL
o Warna
Anda mendesain database Pelanggan dengan mengikuti langkah-langkah yang disajikan di
bagian “Mengatur data”, di awal bab ini, dengan mempertimbangkan informasi ini:
1. Beri nama database Anda.
Database untuk informasi pesanan bernama CustomerOrderInformation.
2. Mengidentifikasi objek.
Daftar informasinya adalah
o Nama Pelanggan
o Alamat pelanggan
o Nomor telepon pelanggan
o Nomor faks pelanggan
o Alamat email pelanggan
o Tanggal pemesanan
o Nomor yang mengidentifikasi produk tertentu (seperti nomor katalog)
o Ukuran
o Warna
o Harga
Lima item informasi pertama berkaitan dengan pelanggan, jadi satu objek adalah
Pelanggan. Informasi tanggal pemesanan berkaitan dengan total pesanan, jadi objek
lainnya adalah CustomerOrder. Empat informasi yang tersisa berkaitan dengan setiap
item individual dalam pesanan, jadi objek yang tersisa adalah OrderItem.
3. Tentukan dan beri nama tabel untuk setiap objek.
Database CustomerOrderInformation memerlukan tabel berikut:
o Pelanggan
o Pesanan pelanggan
o Memesan barang
4. Identifikasi atribut untuk setiap objek.
Lihatlah daftar informasi secara rinci:
o ID Pelanggan: Satu atribut (ID unik untuk setiap pelanggan).
o Nama pelanggan: Dua atribut (nama depan dan nama belakang).
o Alamat pelanggan: Empat atribut (alamat jalan, kota, negara bagian, dan kode
pos)
o Nomor telepon pelanggan: Satu atribut.
o Nomor faks pelanggan: Satu atribut.
o Alamat email pelanggan: Satu atribut.
o Nomor pesanan: Satu atribut (ID unik untuk setiap pesanan).
o Tanggal pemesanan: Satu atribut.
o Nomor yang mengidentifikasi produk tertentu (seperti nomor katalog): Satu
atribut.
o Ukuran: Satu atribut.
o Warna: Satu atribut.
o Harga: Satu atribut.
5. Tentukan dan beri nama kolom.
Tabel Pelanggan memiliki satu baris untuk setiap pelanggan. Kolom untuk tabel
Pelanggan adalah
51
Manajemen Database MySQL
o customerID
o firstName
o lastName
o Street
o city
o Prov
o Country
o email
o phone
Tabel CustomerOrder memiliki satu baris untuk setiap pesanan dengan kolom berikut:
o CustomerID: Kolom ini menautkan tabel ini ke tabel Pelanggan. Nilai ini unik di
tabel Pelanggan, tetapi tidak unik dalam tabel ini.
o Id pemesanan
o tanggal pemesanan
Tabel OrderItem memiliki satu baris untuk setiap item dalam urutan yang menyertakan
kolom berikut:
o ID katalog
o orderID: Kolom ini menautkan tabel ini ke tabel CustomerOrder. Nilai ini unik
di tabel CustomerOrder, tetapi tidak unik di tabel ini.
o ukuran
o warna
o harga
6. Identifikasi kunci utama.
Kunci utama untuk tabel Pelanggan adalah ID pelanggan. Oleh karena itu, customerID
harus unik. Kunci utama untuk CustomerOrdertable adalah orderID. Kunci utama
untuk tabel OrderItem adalah orderID dan catalogID bersama-sama.
7. Tentukan defaultnya.
Tidak ada default yang ditentukan untuk tabel apa pun.
8. Identifikasi kolom dengan data yang diperlukan.
Kolom berikut tidak boleh dibiarkan kosong:
o ID Pelanggan
o Id pemesanan
o ID katalog
Kolom ini adalah kolom kunci utama. Jangan pernah mengizinkan baris tanpa nilai -nilai
ini dalam tabel.
9. Tentukan tipe data untuk menyimpan setiap atribut.
o Numerik: ID Pelanggan dan ID pesanan adalah tipe data numerik.
o Tanggal: OrderDate adalah tipe data tanggal.
o Karakter: Semua field yang tersisa adalah tipe data karakter.
Menulis Rancangan
Anda mungkin menghabiskan banyak waktu untuk membuat keputusan desain untuk
database Anda. Pada titik ini, keputusan sudah tertanam kuat di pikiran Anda. Kita mungkin
tidak berpikir bahwa kita bisa melupakan mereka. Tapi anggaplah bahwa krisis
mengintervensi; kita tidak kembali ke proyek ini selama dua bulan. Kita harus menganalisis
52
Manajemen Database MySQL
data kita dan membuat semua keputusan desain lagi jika kita tidak menuliskan keputusan yang
awalnya kita buat.
Tulis sekarang.
Dokumentasikan organisasi tabel, nama kolom, dan semua keputusan desain lainnya.
Dokumen kita harus menjelaskan setiap tabel dalam format tabel, dengan satu baris untuk
setiap kolom dan satu kolom untuk setiap keputusan desain. Misalnya, kolom kita adalah
nama kolom, tipe data, dan deskripsi. Tiga tabel dalam desain sampel untuk database
bernama CustomerOrder Information didokumentasikan dalam tabel dibawah ini.
Tabel 3.10 Contoh Tabel Pelanggan
Kolom Nama Jenis Data Deskripsi
customerID SERIAL ID unik untuk customer (primary key)
lastName VARCHAR(50) Nama akhir customer
firstName VARCHAR(40 Nama depan customer
street VARCHAR(50) Jalan alamat customer
city VARCHAR(50) Kota customer
prov CHAR(2) Provinsi customer
country CHAR(10) Negara customer
email VARCHAR(50) Email customer
fax CHAR(15) Fax customer
phone CHAR(15) Nomor telpon customer
Tabel 3.11 CustomerOrder
Nama Variabel Jenis Deskripsi
orderID SERIAL Nama login ditentukan oleh pengguna ( primary
key)
customerID BIGINT ID Pelanggan dari pelanggan yang melakukan
pemesanan
orderDate DATETIME Tanggal dan waktu pemesanan dilakukan
Tabel 3.12 OrderItem
Nama Variabel Jenis Deskripsi
catalogID BIGINT Nomor katalog barang (primary key 1)
orderID VARCHAR(10) ID pesanan dari pesanan yang menyertakan item
ini (primary key 2)
color DATETIME Warna item
size VARCHAR(10) Ukuran item
price DECIMAL(9,2) Harga item
Membangun Database
sesudah kita merencanakan database dengan hati-hati kita kemudian dapat mulai
membangun database. Database memiliki dua bagian: struktur untuk menyimpan data dan
data itu sendiri. Pada bagian berikut, kita menjelaskan cara membuat struktur database.
Pertama, kita membuat database kosong tanpa struktur sama sekali, lalu menambahkan tabel
ke dalamnya.
53
Manajemen Database MySQL
Saat kita membuat database, kita membuat subdirektori baru di direktori data kita
dengan nama database yang kita tetapkan. File kemudian ditambahkan ke subdirektori ini
nanti, saat kita menambahkan tabel ke database. Direktori data biasanya merupakan
subdirektori di direktori tempat MySQL diinstal. Kita dapat mengatur direktori yang berbeda
sebagai direktori data dengan menambahkan pernyataan dalam file konfigurasi MySQL,
my.cnf, dalam format berikut:
datadir=c:/xampp/mysql/data
Anda dapat menambahkan pernyataan ini ke file konfigurasi atau mengubah pernyataan itu
sudah ada. Kita dapat membuat database dengan memakai pernyataan SQL. Untuk
membuat database, kita harus memakai akun MySQL yang memiliki izin untuk membuat,
mengubah, dan menghapus database dan tabel, dan kita memberi tahu kita cara
melakukannya di sini.
Membuat database baru
Langkah pertama kita dalam membuat database baru adalah membuat database
kosong, memberinya nama. Nama database kita bisa sampai 64 karakter. Kita dapat
memakai sebagian besar huruf, angka, dan tanda baca, dengan beberapa pengecualian.
Secara umum, kita tidak dapat memakai karakter yang ilegal dalam nama direktori untuk
sistem operasi kita (lihat dokumentasi sistem operasi kita untuk mengetahui karakter
tersebut). Jangan gunakan spasi di akhir nama. Jangan gunakan garis miring (/) atau garis
miring ( \ ) dalam nama database (atau nama tabel) . Kita dapat memakai tanda kutip
dalam nama database, tetapi tidak bijaksana untuk melakukannya. Untuk membuat database
baru yang kosong, gunakan pernyataan SQL berikut:
CREATE DATABASE databasename
Dalam pernyataan ini, ganti nama database dengan nama yang kita berikan pada database
Anda. Misalnya, untuk membuat database sampel yang dirancang dalam bab ini, gunakan
pernyataan SQL berikut:
CREATE DATABASE CustomerOrderInformation
Beberapa perusahaan hosting web tidak mengizinkan kita membuat database baru. Host
memberi kita sejumlah database tertentu untuk digunakan dengan MySQL, dan kita dapat
membuat tabel hanya dalam database tertentu. Kita dapat mencoba meminta database
tambahan, tetapi kita memerlukan alasan yang bagus. MySQL dan PHP tidak peduli bahwa
semua tabel kita berada dalam satu database, daripada diatur ke dalam database dengan
nama yang bermakna. Manusia hanya dapat melacak proyek dengan lebih mudah saat
proyek tersebut diatur. Jika database dengan nama yang kita tentukan sudah ada, pesan
kesalahan akan ditampilkan. Kita dapat menghindari pesan kesalahan ini dengan
memakai frasa IF dalam pernyataan Anda, sebagai berikut:
CREATE DATABASE IF NOT EXISTS CustomerOrderInformation
54
Manajemen Database MySQL
Dengan pernyataan ini, database dibuat jika tidak ada, tetapi pernyataan tidak gagal jika
database sudah ada. Itu tidak membuat database baru. Untuk melihat sendiri bahwa database
sebenarnya dibuat, gunakan kueri SQL SHOW DATABASES. sesudah kita membuat database
kosong, kita bisa menambahkan tabel ke dalamnya. (Lihat bagian “Menambahkan tabel dan
menentukan kunci utama,” nanti di bab ini.)
Membuat dan menghapus database
Anda dapat menghapus database apa pun, selama kita memakai akun MySQL
dengan privileges DROP. Saat kita meletakkan database, semua tabel dan data dalam
database juga akan dihapus. Kita dapat menghapus database dengan pernyataan SQL berikut:
DROP DATABASE databasename
Gunakan DROP dengan hati -hati karena ini tidak dapat diubah. sesudah kita meletakkan
database, database itu hilang selamanya. Dan data apa pun yang ada di dalamnya juga hilang.
Jika database tidak ada, pesan kesalahan akan ditampilkan. Kita dapat mencegah pesan
kesalahan dengan pernyataan berikut:
DROP DATABASE IF EXISTS databasename
Pernyataan ini meletakkan database jika database itu ada. Jika tidak ada, tidak ada kesalahan
yang terjadi. Pernyataan itu berakhir dengan tenang.
Menambahkan tabel dan menentukan kunci utama
Anda dapat menambahkan tabel ke database apa pun, baik itu database baru yang
kosong yang baru saja kita buat atau database yang sudah ada yang sudah memiliki tabel dan
data di dalamnya. Aturan untuk nama tabel yang diizinkan dijelaskan di bagian "Mengatur
data", di awal bab ini. Saat kita membuat tabel dalam database, file bernama tablename.frm
ditambahkan ke direktori database. Saat kita membuat tabel, kita menyertakan definisi tabel.
Kita menentukan setiap kolom — memberinya nama, menetapkan tipe data, dan menentukan
definisi lain yang diperlukan. Berikut adalah beberapa definisi yang sering ditentukan untuk
kolom:
• NOT NULL: Kolom ini harus memiliki nilai; tidak boleh kosong.
• Nilai DEFAULT: Nilai ini disimpan dalam kolom saat baris dibuat jika tidak ada nilai lain
yang diberikan untuk kolom tersebut.
• AUTO_INCREMENT: Definisi ini membuat nomor urut. Saat setiap baris ditambahkan,
nilai kolom ini bertambah satu bilangan bulat dari baris terakhir yang dimasukkan. Kita
dapat mengganti nomor otomatis dengan menetapkan nilai tertentu ke kolom.
• UNSIGNED: Definisi ini menunjukkan bahwa nilai untuk field numerik ini tidak akan
pernah berupa angka negatif.
Anda juga menentukan pengidentifikasi unik untuk setiap baris — kunci utama. Tabel harus
memiliki field atau kombinasi field yang berbeda untuk setiap baris. Tidak ada dua baris yang
dapat memiliki kunci utama yang sama. Jika kita mencoba menambahkan baris dengan kunci
utama yang sama dengan baris yang sudah ada di tabel, kita mendapatkan pesan kesalahan,
dan baris tidak ditambahkan. Terkadang, kita mungkin ingin membuat tabel yang memiliki
struktur yang sama dengan tabel yang sudah ada. Kita dapat membuat tabel yang merupakan
55
Manajemen Database MySQL
salinan kosong. Kita dapat memakai pernyataan CREATE untuk menambahkan tabel ke
database. Pernyataan dimulai dengan pernyataan CREATE TABLE, sebagai berikut:
CREATE TABLE tablename
Kemudian, kita menambahkan daftar nama kolom dengan definisi. Pisahkan informasi untuk
setiap kolom dari informasi untuk kolom berikut dengan koma. Lampirkan seluruh daftar
dalam tanda kurung. Ikuti setiap nama kolom menurut tipe datanya dan definisi lain yang
diperlukan. Item terakhir dalam pernyataan CREATE TABLE menunjukkan kolom atau
kombinasi kolom mana yang merupakan kunci utama. Kita menentukan kunci utama dengan
memakai format berikut:
PRIMARY KEY(columnname)
Lampirkan nama kolom dalam tanda kurung. Jika kita memakai kombinasi kolom sebagai
kunci utama, sertakan semua nama kolom dalam tanda kurung, dipisahkan dengan koma.
Misalnya, kita dapat menetapkan kunci utama sebagai PRIMARY KEY (columnname1,
columnname2). Pernyataan CREATE TABLE lengkap memiliki format berikut:
CREATE TABLE tablename (
columnname datatype definition 1 definition2 ...,
columnname datatype definition 1 definition 2 ...,
...,
PRIMARY KEY(columnname) )
Pernyataan SQL dibawah unutk membuat tabel dibawah ini menunjukkan pernyataan CREATE
TABLE yang digunakan untuk membuat tabel Customer dari database
CustomerOrderInformation. Kita dapat memasukkan pernyataan ini dalam satu baris jika kita
mau. MySQL tidak peduli berapa banyak baris yang kita gunakan. Format yang ditunjukkan
pada daftar kode dibawah ini adalah untuk membuat pernyataan lebih mudah dibaca. Format
yang ramah manusia ini juga membantu kita menemukan kesalahan ketik.
Pernyataan SQL untuk Membuat Tabel
CREATE TABLE Customer (
CustomerID SERIAL,
lastName VARCHAR(50),
firstName VARCHAR(40),
street VARCHAR(50),
city VARCHAR(50),
state CHAR(2),
zip CHAR(10),
email VARCHAR(50),
phone CHAR(15),
fax CHAR(15),
PRIMARY KEY(customerID) );
56
Manajemen Database MySQL
Perhatikan bahwa daftar nama kolom diapit dalam tanda kurung (satu di baris pertama
dan satu di baris terakhir), dan koma mengikuti setiap definisi kolom. Ingatlah untuk tidak
memakai kata cadangan MySQL untuk nama kolom, seperti yang kita diskusikan di bagian
“Mengatur data”, di awal bab ini. Jika kita memakai kata yang dicadangkan untuk nama
kolom, MySQL memberi kita pesan kesalahan yang terlihat seperti ini:
You have an error in your SQL syntax near ‘order var(20))’ at line 1
Pesan kesalahan ini menunjukkan definisi kolom yang tidak disukai dan baris tempat
ditemukannya definisi yang menyinggung. Namun, pesan tersebut tidak memberi tahu kita
banyak tentang apa masalah sebenarnya. Kesalahan dalam sintaks SQL kita yang dirujuk
adalah penggunaan urutan kata yang dicadangkan MySQL sebagai nama kolom. Jika kita
mencoba membuat tabel yang sudah ada, kita menerima pesan kesalahan. Kita dapat
mencegah pesan galat ini muncul dengan memakai pernyataan CREATE berikut:
CREATE TABLE IF NOT EXISTS tablename
Jika tabel tidak ada, pernyataan akan membuatnya. Jika tabel sudah ada, pernyataan tidak
membuatnya tetapi juga tidak mengembalikan pesan kesalahan. Kita dapat membuat tabel
baru yang merupakan salinan persis, dengan struktur yang sama, dari tabel yang sudah ada,
sebagai berikut:
CREATE TABLE tablename LIKE oldtablename
Tabel baru, nama tabel, dibuat dengan field dan definisi yang sama dengan nama tabel lama.
Meskipun tabel lama berisi data, tabel baru tidak menyertakan data tersebut, hanya
strukturnya. sesudah membuat tabel, kita dapat membuat kueri untuk melihatnya, meninjau
strukturnya, atau menghapusnya.
• Untuk melihat tabel yang telah ditambahkan ke database, gunakan query ini:
SHOW TABLES
• Untuk melihat struktur tabel, gunakan query ini:
EXPLAIN tablename
Menghapus tabel
Anda dapat menghapus tabel, apakah itu kosong atau berisi data. Pastikan kita ingin
menghapus tabel sebelum melakukannya. Menghapus tabel tidak dapat diubah. sesudah kita
meletakkan meja, meja itu hilang selamanya, dan semua data yang ada di dalamnya juga
hilang. Untuk menghapus tabel, gunakan pernyataan ini:
DROP TABLE tablename
Mengubah Struktur Database
Mengubah database bukan hal yang unik. Kita mungkin ingin mengubah database
karena berbagai alasan. Misalnya, kita mendefinisikan kolom lastName dengan VARCHAR(20)
dalam database yang berisi nama semua karyawan di perusahaan Anda. Pada saat itu, 20
karakter tampaknya cukup untuk nama belakang. Tapi kita baru saja menerima memo yang
57
Manajemen Database MySQL
mengumumkan CEO yang memiliki lebih dari 3 kata maka MySQL akan memotong namanya
menjadi 20 huruf pertama.
Anda dapat mengubah struktur database dengan pernyataan ALTER. Format dasar
untuk pernyataan ini bernama ALTER TABLE, diikuti dengan perubahan yang ditentukan. Tabel
dibawah ini menunjukkan perubahan yang dapat kita lakukan.
Tabel 3.13 Perubahan yang buat memakai pernyataan ALTER
Perubahan Deskripsi
ADD columnname definition Menambahkan kolom; definisi termasuk tipe
data dan definisi opsional.
ALTER columnname SET DEFAULT value Mengubah nilai default untuk kolom
ALTER columnname DROP DEFAULT Menghapus nilai default untuk kolom.
CHANGE columnname newcolumnname
definition
Mengubah definisi kolom dan mengganti
nama kolom; definisi mencakup tipe data
dan definisi opsional.
DROP columnname Menghapus kolom, termasuk semua data di
kolom tersebut. Data tidak dapat dipulihkan.
MODIFY columnname definition Mengubah definisi kolom; definisi termasuk
tipe data dan definisi opsional
RENAME newtablename Mengganti nama tabel
Misalnya, pernyataan berikut mengubah nama tabel Pelanggan menjadi NewCustomer::
ALTER TABLE Customer RENAME NewCustomer
Untuk contoh lain, pernyataan berikut mengubah kolom tertentu (lastName) ke tipe data yang
ditentukan (VARCHAR) dan lebar (50):
ALTER TABLE Customer MODIFY lastName VARCHAR(50)
3.4 INDEKS
Tabel klasik berfungsi dan dapat dicari oleh MySQL—hingga tumbuh menjadi lebih dari
beberapa ratus baris, dan jika ini terjadi maka akses database akan semakin lambat saat ada
baris baru ditambahkan, hal ini karena MySQL harus mencari setiap kueri yang dikeluarkan
pada setiap baris. Ini seperti menelusuri setiap buku di perpustakaan yang memiliki sistem
indeks kartu atau, database mereka sendiri. Dan hal yang sama berlaku untuk MySQL, dengan
mengorbankan sedikit overhead dalam memori dan ruang disk, kita dapat membuat "indeks
kartu" untuk tabel yang akan digunakan MySQ L dalam melakukan pencarian secepat kilat.
Membuat Indeks
Cara untuk mencapai pencarian cepat adalah dengan menambahkan indeks, baik saat
membuat atau sesudah selesai membuat tabel. Tapi keputusannya tidak sesederhana itu.
Misalnya, ada berbagai jenis indeks seperti Regular INDEX, PRIMARY KEY, dan FULLTEXT. Kita
harus memutuskan kolom mana harus diberi indeks. Indeks bisa menjadi rumit saat kita
menggabungkan terllau banyak kolom dalam satu indeks. Walaupun begitu, masih ada opsi
lainnya dalam mengurangi ukuran indeks, dengan cara membatasi jumlah setiap kolom yang
beri indeks.
Contoh Menambahkan indeks ke tabel klasik
58
Manajemen Database MySQL
ALTER TABLE classics ADD INDEX(author(20));
ALTER TABLE classics ADD INDEX(title(20));
ALTER TABLE classics ADD INDEX(category(4));
ALTER TABLE classics ADD INDEX(year);
DESCRIBE classics;
Dua perintah pertama membuat indeks pada kolom penulis dan judul, membatasi
setiap indeks hanya untuk 20 karakter pertama. Misalnya, saat MySQL mengindeks judul
berikut:
Belajar PHP Dari Dasar
Ini benar-benar akan menyimpan dalam indeks hanya 20 karakter pertama:
Belajar PHP
Hal ini dilakukan untuk meminimalkan ukuran indeks, dan untuk mengoptimalkan kecepatan
akses database. Saya memilih 20 karena kemungkinan cukup untuk memastikan keunikan
untuk sebagian besar string yang ada pada kolom. Dengan kolom kategori, saat ini hanya
karakter pertama yang diperlukan untuk mengidentifikasi string sebagai unik (F untuk Ilmiah,
N untuk non-Ilmiah, dan P untuk praktikum). Kita juga dapat mengindeks ulang kolom ini
dimasa depan, saat kita memiliki kumpulan kategori yang lebih lengkap. Disini, saya tidak
membatasi indeks kolom tahun, karena ini adalah bilangan bulat, bukan string.
Gambar 3.3 Menambahkan indeks ke tabel klasik.
memakai CREATE INDEX
Alternatif untuk memakai ALTER TABLE untuk menambahkan indeks adalah
dengan memakai perintah CREATE INDEX. Mereka setara, kecuali bahwa CREATE INDEX
tidak dapat digunakan untuk membuat PRIMARY KEY (lihat bagian Primary key).
Contoh Kedua perintah ini setara
ALTER TABLE classics ADD INDEX(author(20));
CREATE INDEX author ON classics (author(20));
59
Manajemen Database MySQL
Menambahkan indeks saat membuat tabel
Anda tidak perlu menunggu hingga penambahan indeks selesai karena ini memakan
waktu terlalu lama. Sekarang, mari kita lihat perintah yang membuat tabel klasik dengan
indeks yang sudah ada.
Contoh Membuat tabel klasik dengan indeks
CREATE TABLE classics (
author VARCHAR(128),
title VARCHAR(128),
category VARCHAR(16),
year SMALLINT,
INDEX(author(20)),
INDEX(title(20)),
INDEX(category(4)),
INDEX(year)) ENGINE MyISAM;
Primary key
Sampai sini, kita telah membuat tabel klasik dan memastikan bahwa MySQL dapat
menemukan tabel tersebut dengan cepat dengan menambahkan indeks. Semua publikasi
dalam tabel dapat dicari, tetapi untuk mengaktifkan pengaksesan baris secara instan tidak ada
kunci unik tunggal untuk setiap publikasi. Kunci dengan nilai unik untuk setiap baris akan
muncul saat kita mulai menggabungkan data dari tabel yang berbeda.
Bagian Tipe data AUTO_INCREMENT secara singkat memperkenalkan ide primary key
saat membuat id kolom penambahan otomatis, yang dapat digunakan sebagai primary key
untuk tabel ini. Mari kita lanjutkan dan buat kolom baru untuk kunci ini. Sekarang, mengingat
bahwa ISBN memiliki panjang 13 karakter, kita mungkin berpikir bahwa perintah berikut akan
melakukan pekerjaan itu:
ALTER TABLE classics ADD isbn CHAR(13) PRIMARY KEY;
Tapi tidak. Jika kita mencobanya, kita akan mendapatkan Error Duplicate entry untuk kunci 1.
Alasannya adalah tabel sudah diisi dengan beberapa data dan perintah ini mencoba
menambahkan kolom dengan nilai NULL ke setiap baris yang tidak diperbolehkan karena
semua nilai harus unik di kolom mana pun yang memiliki indeks primary key. Jika belum ada
data dalam tabel, perintah ini akan berfungsi dengan baik, seperti halnya menambahkan
indeks primary key pada pembuatan tabel
Dalam situasi ini, kita dapat membuat kolom baru tanpa indeks, mengisinya dengan
data, dan kemudian menambahkan indeks secara retrospektif memakai perintah dari
contoh dibawah ini. Kita dapat memakai kolom tahun untuk mengidentifikasi setiap baris
yang akan diperbarui.
Contoh Mengisi kolom isbn dengan data dan memakai primary key.
ALTER TABLE classics ADD isbn CHAR(13);
UPDATE classics SET isbn='9781598184891' WHERE year='2020';
UPDATE classics SET isbn='97805 82506206' WHERE year='2021';
UPDATE classics SET isbn='9780517123201' WHERE year='2022';
UPDATE classics SET isbn='9780099533474' WHERE year='2022';
UPDATE classics SET isbn='9780192814968' WHERE year='2022';
ALTER TABLE classics ADD PRIMARY KEY(isbn);
60
Manajemen Database MySQL
DESCRIBE classics;
sesudah kita mengetik perintah ini, hasilnya akan terlihat seperti gambar yang ada dibawah ini.
Perhatikan bahwa kata PRIMARY KEY menggantikan kata kunci INDEX dalam sintaks ALTER
TABLE:
Gambar 3.4 Secara retrospektif menambahkan primary key ke tabel klasik
Sekali lagi, ganti nama klasik di baris 1 menjadi sesuatu yang lain jika kita ingin mencoba
contoh ini sendiri, lalu hapus tabel pengujian sesudahnya.
Contoh Membuat tabel klasik dengan primary key
CREATE TABLE classics (
author VARCHAR(128),
title VARCHAR(128),
category VARCHAR(16),
year SMALLINT,
isbn CHAR(13),
INDEX(author(20)),
INDEX(title(20)),
INDEX(category(4)),
INDEX(year),
PRIMARY KEY (isbn)) ENGINE MyISAM;
Membuat indeks FULLTEXT
Tidak seperti indeks biasa, FULLTEXT MySQL memungkinkan pencarian super cepat
dari seluruh kolom teks. Ini menyimpan setiap kata di setiap string data dalam indeks khusus
yang dapat kita cari memakai "bahasa alami", dengan cara yang mirip deng an
memakai mesin pencari.
Sebenarnya, tidak sepenuhnya benar bahwa MySQL menyimpan semua kata dalam
indeks FULLTEXT, karena memiliki daftar bawaan lebih dari 500 kata yang dipilih untuk
diabaikan karena kata tersebut sangat umum sehingga tidak terlalu membantu untuk
pencarian. Daftar ini, yang disebut stopwords, termasuk, sebagai, adalah, dari, dan
seterusnya. Daftar ini membantu MySQL berjalan lebih cepat saat melakukan pencarian
61
Manajemen Database MySQL
FULLTEXT dan menjaga ukuran database tetap rendah. Lampiran C berisi daftar lengkap
stopwords.
Berikut adalah beberapa hal yang harus kita ketahui tentang indeks FULLTEXT:
• Indeks FULLTEXT hanya dapat digunakan dengan tabel MyISAM, jenis yang digunakan
oleh mesin penyimpanan default MySQL (MySQL mendukung setidaknya 10 mesin
penyimpanan yang berbeda). Untuk mengonversi tabel ke MyISAM, kita dapat
memakai perintah MySQL ALTER TABLE tablename ENGINE = MyISAM;.
• Indeks FULLTEXT dapat dibuat untuk kolom CHAR, VARCHAR, dan TEXT saja.
• Definisi indeks FULLTEXT dapat diberikan dalam pernyataan CREATE TABLE saat
sebuah tabel dibuat, atau ditambahkan kemudian memakai ALTER TABLE (atau
CREATE INDEX).
• Untuk kumpulan data yang besar, jauh lebih cepat untuk memuat data kita ke dalam
tabel yang tidak memiliki indeks FULLTEXT selanjutnya membuat indeks untuk memuat
data ke dalam tabel yang memiliki indeks FULLTEXT.
Untuk membuat indeks FULLTEXT, terapkan ke satu atau lebih catatan seperti contoh yang
ada dibawah ini.
Contoh Menambahkan indeks FULLTEXT ke tabel klasik.
ALTER TABLE classics ADD FULLTEXT(author,title);
Sekarang kita dapat melakukan pencarian FULLTEXT dari pasangan kolom ini. Fitur
FULLTEXT dapat muncul dengan sendirinya jika menambahkan seluruh teks publikasi ke
database (terutama karena publikasi tersebut tidak dilindungi hak cipta) dan dapat ditelusuri
sepenuhnya. Jika MySQL berjalan lebih lambat saat mengakses database, bisa jadi indeks
bermasalah.
3.5 PRIMARY KEY: KUNCI DATABASE RELASIONAL
memakai kekuatan database relasional, kita dapat mendefinisikan informasi
untuk setiap penulis, buku, dan pelanggan hanya dalam satu tempat. Saya akan menunjukkan
beberapa prinsip dasarnya. Untuk sebuah buku, gunakan ISBN. Untuk penulis dan pelanggan
tetapkan kunci arbitrer, yang memudahkan fitur AUTO_INCREMENT. Singkatnya, setiap tabel
akan dirancang di sekitar beberapa objek yan paling sering kita cari, misalnya, penulis, buku,
atau pelanggan. Objek-objek tersebut akan memiliki primary key sendiri.
Normalisasi
Normalisasi merupakan proses memisahkan data ke dalam tabel dan membuat
primary key. Tujuan utama dari normalisasi adalah untuk memastikan setiap informasi muncul
dalam database hanya sekali. Duplikasi data sangat tidak efisien, karena membuat database
lebih besar dari yang seharusnya dan oleh karena itu memperlambat akses. Keberadaan
duplikat menciptakan risiko kuat, kita hanya bisa memperbarui satu baris data duplikat,
menciptakan inkonsistensi dalam database, ini akan menyebabkan kesalahan ser ius. Jadi, jika
kita mencantumkan judul buku di tabel penulis serta tabel buku, dan kita harus memperbaiki
kesalahan pengetikan judul, kita harus mencari melalui kedua tabel dan memastikan
perubahan yang dibuat pada setiap tempat judul dicantumkan adalah sama. Lebih baik
menyimpan judul di satu tempat dan memakai ISBN di tempat lain.
Dalam proses membagi database menjadi beberapa tabel, penting untuk tidak
melangkah terlalu jauh dan membuat lebih banyak tabel dibanding hanya membuat sejumlah
tabel yang dibutuhkan saja, karena ini akan menyebabkan desain menjadi tidak efisien dan
akses yang lebih lambat. Untungnya, E. F. Codd, penemu model relasional, menganalisis
konsep normalisasi dan membaginya menjadi tiga skema terpisah yang disebut Bentuk Normal
62
Manajemen Database MySQL
Pertama, Kedua, dan Ketiga. Jika kita memodifikasi database untuk memenuhi setiap formulir
ini secara berurutan, kita dapat memastikan bahwa database kita secara optimal untuk akses
cepat seimbang, dan penggunaan memori dan ruang disk minimum. Untuk melihat bagaimana
proses normalisasi bekerja, mari kita mulai dengan database dalam tabel, yang menunjukkan
satu tabel yang berisi semua nama penulis, judul buku, dan detail pelanggan (Ilmiah). Kita
dapat menganggapnya.
Tabel 3.14 Tabel Desain yang sangat tidak efisien untuk tabel database
Penulis
1
Penulis
2
Judul ISBN Harga
IDR
Nama
Pelangga
n
Alamat
Pelanggan
Tanggal
Pembelia
n
Agus
Wibowo
Mars
Caroline
Belajar PHP
dari dasar
05961010
15
44.90
0
Tiara Jl.
Majapahit
no. 11
Kota
Semarang
10 Maret
2022
Edy
Jogatam
a
Desain Seni
Rupa Klasik
05965274
03
59.90
0
Daniel Jl.
Pamularsi
h no 14
Kota
Semarang
13
Januari
2022
Sarwo
Nugroh
o
Agus
Wibowo
Potret Diri
Sebagai
Komunikas
i Visual
Simbolik
05960054
36
44.95
0
Ella Jl.
Diponegor
o no 30
Ungaran
22
Agustus
2022
Agus
Wibowo
Sarwo
Nugroh
o
Membang
un
PODCAST
05961010
15
44.90
0
Feri Jl. Imam
Bonjol no
2 Salatiga
03
Februari
2022
Mars
Caroline
Edy
Jogatam
a
Desain Seni
Rupa dan
Tata
Warna
05960068
15
39.90
0
Linda Jl.
Siliwangi
no 19 Kota
Semarang
July 2022
Selanjutnya, kita akan memeriksa dan mengetahui bagaimana cara memperbaiki dan
menghapus berbagai entri duplikat dan membagi satu tabel menjadi beberapa tabel yang
masing-masing berisi satu jenis data dalam desain database.
Bentuk Normal Pertama
Untuk database yang memenuhi Bentuk Normal Pertama, harus memenuhi tiga
persyaratan:
• Tidak boleh ada kolom berulang yang berisi jenis data yang sama.
• Semua kolom harus berisi satu nilai.
• Harus ada primary key untuk mengidentifikasi setiap baris secara unik.
Melihat persyaratan ini secara berurutan, kita harus langsung memperhatikan bahwa kolom
Penulis 1 dan Penulis 2 merupakan tipe data berulang. Jadi kita sudah memiliki kolom target
untuk ditarik ke tabel terpisah, karena kolom Penulis yang berulang melanggar Aturan 1.
63
Manajemen Database MySQL
Tabel 3.15 Tabel Penulis baru
Judul ISBN Harga
IDR
Nama
Pelanggan
Alamat
Pelanggan
Tanggal
Pembelian
Belajar PHP dari
dasar
0596101015 44.900 Tiara Jl. Majapahit
no. 11 Kota
Semarang
10 Maret
2022
Desain Seni Rupa
Klasik
0596527403 59.900 Daniel Jl. Pamularsih
no 14 Kota
Semarang
13 Januari
2022
Potret Diri
Sebagai
Komunikasi
Visual Simbolik
0596005436 44.950 Ella Jl.
Diponegoro
no 30
Ungaran
22 Agustus
2022
Membangun
PODCAST
0596101015 44.900 Feri Jl. Imam
Bonjol no 2
Salatiga
03 Februari
2022
Desain Seni Rupa
dan Tata Warna
0596006815 39.900 Linda Jl. Siliwangi
no 19 Kota
Semarang
12 Juli 2022
Seperti yang saya sebutkan sebelumnya, ISBN akan menjadi primary key untuk tabel
Buku. Di dunia nyata, tabel Penulis juga mendapatkan primary key, sehingga setiap penulis
akan memiliki kunci untuk mengidentifikasi dirinya secara unik. Jadi, di tabel Penulis, ISBN
hanyalah kolom yang bertujuan mempercepat pencarian yang pada faktanya, itu tidak bisa
menjadi primary key dalam tabel ini, karena itu tidak unik: ISBN yang sama muncul beberapa
kali setiap kali dua atau lebih penulis berkolaborasi dalam sebuah buku. Karena kita akan
memakai nya untuk menautkan penulis ke buku di tabel lain, kolom ini disebut kunci
asing.
Tabel 3.16 Tabel baru penulis
ISBN Penulis
0596101015 Agus Wibowo
0596101015 Mars Caroline
0596527403 Edy Jogatama
0596005436 Sarwo Nugroho
0596005436 Agus Wibowo
0596006815 Agus Wibowo
0596006815 Sarwo Nugroho
0596006815 Mars Caroline
Bentuk Normal Kedua
Bentuk Normal Pertama berurusan dengan data duplikat (atau redundansi) di
beberapa kolom. Bentuk Normal Kedua redundansi pada beberapa baris. Untuk mencapai
Bentuk Normal Kedua, tabel kita harus sudah dalam Bentuk Normal Pertama. sesudah ini
selesai selanjutnya akan menjadi Bentuk Normal Kedua dengan mengidentifikasi kolom yang
datanya berulang di tempat yang berbeda dan kemudian menghapusnya ke tabel mereka
sendiri.
64
Manajemen Database MySQL
Tabel 3.17 Judul baru
ISBN Judul Harga IDR
0596101015 Belajar PHP dari dasar 44.900
0596527403 Desain Seni Rupa Klasik 59.900
0596005436 Potret Diri Sebagai Komunikasi Visual
Simbolik
44.950
0596101015 Membangun PODCAST 44.900
0596006815 Desain Seni Rupa dan Tata Warna 39.900
Seperti yang kita lihat, tabel sisa diatas hanya berisi ISBN, Judul, dan Harga untuk
empat buku. Tabel ini efisien dan memnuhi persyarata dari Bentuk Normal Pertama dan
Kedua. Pada tabel selanjutnya, kita akan menormalisasikan beberapa tabel karena masih ada
duplikasi pada nama penulis. Kolom alamat juga perlu dipecah lagi menjadi kolom terpisah.
Tabel 3.18 Detail pelanggan
ISBN Nama Pelanggan Alamat Pelanggan Tanggal Pembelian
0596101015 Tiara Jl. Majapahit no. 11
Kota Semarang
10 Maret 2022
0596527403 Daniel Jl. Pamularsih no 14
Kota Semarang
13 Januari 2022
0596005436 Ella Jl. Diponegoro no 30
Ungaran
22 Agustus 2022
0596101015 Feri Jl. Imam Bonjol no 2
Salatiga
03 Februari 2022
0596006815 Linda Jl. Siliwangi no 19
Kota Semarang
12 Juli 2022
Karena ISBN tidak dapat digunakan sebagai primary key untuk mengidentifikasi
pelanggan maupun penulis, maka keyword harus dibuat. Tabel pelangan harus dipecah lagi
menjadi beberapa untuk memastikan bahwa tiap pelanggan hanya dimasukkan sekali,
sehingga tidak akan terjadi duplikasi tabel. Tabel selanjutnya merupakan hasil dari normalisasi
tabel pelanggan menjadi Bentuk Normal Pertama dan Kedua. Setiap pelanggan akan memiliki
nomor unik pelanggan yang disebut sebagai CustNo. Nomor unik dari CustNo ini akan menjadi
primary key tabel yang dibuat melalui AUTO_INCREMENT. Alamat pelanggan akan dipisahkan
juga ke beberapa kolom yang berbeda untuk mempermudah pencarian dan pembaharuan.
Tabel 3.19 Pelanggan baru
CustNo Nama
Pelanggan
Alamat Pelanggan Alamat
Pelanggan
Alamat
Pelanggan
1 Tiara Jl. Majapahit no. 11 Kota Semarang Jawa Tengah
2 Daniel Jl. Pamularsih no 14 Kota Semarang Jawa Tengah
3 Ella Jl. Diponegoro no 30 Kab Ungaran Jawa Tengah
4 Feri Jl. Imam Bonjol no 2 Salatiga Jawa Tengah
5 Linda Jl. Siliwangi no 19 Kota Semarang Jawa Tengah
Diwaktu yang sama, untuk menormalkan tabel diatas, kita harus menghapus informasi
pembelian pelanggan dan menggantinya menjadi data pembelian.
65
Manajemen Database MySQL
Tabel 3.20 Pembelian baru
CustNo ISBN Tanggal
Pembelian
1 0596101015 10 Maret 2022
2 0596527403 13 Januari 2022
3 0596005436 22 Agustus 2022
4 0596101015 03 Februari 2022
5 0596006815 12 Juli 2022
Pada tabel diatas, kolom CustNo diambil dari tabel sebelumnya, ini digunakan sebagai
kunci untuk mengikat tabel Pelanggan dan Pembelian secara bersama-sama. Kolom ISBN
dapat dihubungkan dengan salah satu dari Penulis atau tabel Judul. Kolom CustNo bisa
menjadi kunci yang berguna di tabel Pembelian, tabi bukan menjadi primary key. Satu
pelanggan dapat membeli beberapa buku (dan bahkan beberapa salinan dari satu buku), jadi
kolom CustNo bukanlah primary key, karena tabel Pembelian tidak memiliki primary key, ini
tak menjadi masalah karena kita tidak akan melacak pembelian unik. Jika satu pelanggan
membeli dua salinan buku yang sama pada hari yang sama, kita hanya akan mengizinkan dua
baris dengan informasi yang sama. Untuk memudahkan pencarian, kita dapat mendefinisikan
CustNo dan ISBN sebagai keyword, tapi bukan sebagai primary key.
Bentuk Normal Ketiga
Sekarang kita memiliki database yang sesuai dengan Bentuk Normal Pertama dan
Kedua, tanpa butuh memodifikasinya lebih jauh. Kita dapat memastikan tabel tersebut
memenuhi persyaratan dari Bentuk Normal Ketiga, yang mana tabel harus dipindahkan secara
terpisah sesuai ketergantungannya terhadap nilai.
Tabel 3.21 Kota Bentuk Normal Ketiga
CityID Nama ProvID
1234 Kota Semarang 5
5678 Kota Semarang 46
4321 Kab Ungaran 17
8765 Salatiga 21
Tabel 3.22 Keadaan Bentuk Normal Ketiga
ProvID Nama Keterangan
5 Kota Semarang Jawa Tengah
46 Kota Semarang Jawa Tengah
17 Kab Ungaran Jawa Tengah
21 Salatiga Jawa Tengah
Kita dapat memakai Bentuk Normal Ketiga memakai cara ini, waaupun
sbenenarnya cukup berlebihan. Untuk membuat Bentuk Normal Ketiga, kita harus
mengevaluasi berdasarkan data yang suatu hari nanti dibutuhkan.
Ada dua pertanyaan yang sangat saya sarankan jika Anda ingin memutuskan apakah
akan melakukan normalisasi Bentuk Normal Ketiga pada tabel lainnya, ini adalah:
• Apakah memungkinakan jika ingin menambahkan banyak kolom pada tabel?
• Dapatkan salah satu dari field tabel ini diubah kapan saja jika ada pembaharuan?
Jika salah satu dari jawabannya adalah ya, maka kita harus mempertimbangkan untuk
melakukan tahap akhir dari normalisasi bentuk normal ketiga ini.
66
Manajemen Database MySQL
Kapan Waktu yang Tepat untuk Tidak memakai Normalisasi?
Menormalisasikan tabel sepenuhnya di situs akan membuat MySQL thrash.
Normalisasi memerlukan penyebaran data di beberapa tabel, ini membuat beberapa
panggilan setiap queri pada MySQL. Jika kita memiliki tabel yang dinormalisasi di situs yang
sangat populer, akses database kita akan menjadi sangat lambat saat diakses secara
bersamaan oleh banyak user, dan disinilah kita harus melakukan de-normalisasi data yang
biasa dicari sebanyak mungkin.
Jika kita memiliki data yang diduplikasi di seluruh tabel, kita dapat mengurangi jumlah
permintaan tambahan yang perlu dibuat secara substansial, karena sebagian besar data yang
kita inginkan tersedia di setiap tabel. Ini berarti kita cukup menambahkan kolom tambahan ke
kueri, selanjutnya field akan tersedia untuk semua hasil. Dan tentunya, penggunaan ruang
penyimpanan dalam disk akan semakin penuh.
Beberapa pembaruan dapat terkomputerisasi. MySQL menyediakan fitur yang disebut
triggers yang membuat perubahan otomatis ke database sebagai respons terhadap
perubahan yang kita buat. Cara lain untuk menyebarkan data yang berlebihan adalah dengan
menyiapkan program PHP agar berjalan secara teratur dan menjaga semua salinan tetap
sinkron. Program akan membaca perubahan dari tabel "master" dan memperbarui yang
lainnya.
3.6 HUBUNGAN
MySQL disebut sistem manajemen database relasional karena tabelnya tidak hanya
menyimpan data, tetapi juga menghubungkan antar data. Disini ada tiga kategori hubungan.
Satu-ke-Satu (one-to-one)
Hubungan satu-ke-satu: setiap item memiliki hubungan hanya dengan satu item dari
jenis lainnya. Ini sangat langka. Misalnya, seorang penulis dapat menulis banyak buku, sebuah
buku dapat memiliki banyak penulis, dan bahkan sebuah alamat dapat dikaitkan dengan
banyak pelanggan.
Sebagai contoh, mari kita asumsikan bahwa hanya ada satu pelanggan di alamat mana
pun, yakni hubungan Pelanggan-Alamat, hanya ada satu pelanggan yang tinggal pada alamat
tertentu. Perhatikan dua tabel dibawah ini.
Tabel 3.23 Ilustrasi hubungan dua tabel
CustNo Nama
Pelanggan
Alamat Pelanggan Keterangan
1 Tiara ……………….. Jl. Majapahit no. 11 Jawa Tengah
2 Daniel ……………….. Jl. Pamularsih no 14 Jawa Tengah
3 Ella ……………….. Jl. Diponegoro no 30 Jawa Tengah
4 Feri ……………….. Jl. Imam Bonjol no 2 Jawa Tengah
5 Linda ……………….. Jl. Siliwangi no 19 Jawa Tengah
Biasanya, saat dua item memiliki hubungan satu-ke-satu, kita cukup
memasukkannya sebagai kolom dalam tabel yang sama. Ada dua alasan untuk membaginya
menjadi tabel terpisah:
• Anda ingin bersiap-siap jika hubungan berubah nanti.
• Tabel memiliki banyak kolom dan menurut kita kinerja atau pemeliharaan akan
ditingkatkan dengan memisahkannya.
Walaupun pada kenyataanya, untuk membangun database kita sendiri, kita harus membuat
hubungan Pelanggan-Alamat satu-ke-banyak (satu alamat dengan banyak pelanggan).
Satu-ke-Banyak (one-to-many)
67
Manajemen Database MySQL
Hubungan satu-ke-banyak terjadi saat satu baris dalam satu tabel ditautkan ke
banyak baris di tabel lain. Satu pelanggan memiliki hubungan dengan banyak pembelian. Kita
dapat melihat kedua tab ini berdampingan satu sama lain dibawah ini, di mana garis putus-
putus yang menghubungkan baris di setiap tabel dimulai dari satu baris di tabel sebelah kiri
tetapi dapat terhubung ke lebih dari satu baris di tabel sebelah kanan. Hubungan satu-ke-
banyak ini juga merupakan skema yang lebih disukai untuk digunakan saat menggambarkan
hubungan banyak ke satu, dalam hal ini kita biasanya akan menukar tabel kiri dan kanan untuk
melihatnya sebagai hubungan satu-ke-banyak.
Tabel 3.24 Mengilustrasikan hubungan antara dua tabel
CustNo Nama
Pelanggan
CustNo ISBN Keterangan
1 Tiara 1 0596101015 Jawa Tengah
2 Daniel 2 0596527403 Jawa Tengah
3 Ella 3 0596005436 Jawa Tengah
3
4 Feri 4 0596101015 Jawa Tengah
5 Linda 5 0596006815 Jawa Tengah
Banyak ke Banyak (many-to-many)
Dalam hubungan banyak ke banyak, banyak baris dalam satu tabel ditautkan ke banyak
baris di tabel lain. Untuk membuat hubungan ini, tambahkan tabel ketiga yang berisi kolom
kunci yang sama dari masing-masing tabel lainnya. Tabel ketiga ini tidak berisi yang lain,
karena satu-satunya tujuan adalah untuk menghubungkan tabel lainnya. Tabel dibawah ini
diambil dari tabel Pembelian dengan menghilangkan informasi tanggal pembelian. Ini berisi
salinan ISBN dari setiap judul yang dijual, bersama dengan nomor pelanggan dari setiap
pembeli.
Tabel 3.25 Kolom perantara
Customer ISBN
1 0596101015
2 0596527403
3 0596005436
4 0596101015
5 0596006815
Dengan tabel perantara ini, kita dapat menelusuri semua informasi dalam database
melalui serangkaian hubungan. Kita dapat mengambil alamat sebagai titik awal dan mencari
tahu nama penulis buku yang dibeli oleh pelanggan yang tinggal di alamat tersebut. Misalnya
saja kita ingin mencari tahu tentang pembelian dalam prov Jawa Tengah. Kita tinggal lihat
Kode provID dan akan menemukan pelanggan dengan jumlah pembelian tertentu
Tabel 3.26 Membuat hubungan banyak-ke-banyak melalui tabel ketiga
ProvID CustNo CustNo ISBN ISBN Judul
5 1 1 0596101015 0596101015 Belajar…
46 2 3 0596005436 0596005436 Desain…
3 Potret…
17 3 4 0596101015 0596101015 Memba-
...
68
Manajemen Database MySQL
21 4 5 0596006815 0596006815 Desain…
Dari tabel ini, kita melihat bahwa tabel tengah dapat ditautkan untuk menggabungkan
tabel kiri dan kanan dengan menautkan ID pelanggan dan ISBN. Selanjutnya kita harus
mengikuti ISBN ke tabel sebelah kanan. Kita juga dapat memakai tabel perantara untuk
bekerja mundur dari judul buku ke alamat lengkap. Tabel Judul dapat memberi tahu kita ISBN,
yang dapat kita gunakan di tabel tengah untuk menemukan nomor ID pelanggan yang
membeli buku, dan terakhir, tabel Pelanggan mencocokkan nomor ID pelanggan dengan kode
pos pelanggan.
3.7 DATABASE DAN ANONIMITAS
Aspek menarik dalam memakai relationship (hubungan) ini adalah kita dapat
mengumpulkan banyak informasi tentang beberapa item—seperti pelanggan—tanpa benar-
benar mengetahui siapa saja pelanggan tersebut. Perhatikan bahwa pada contoh sebelumnya
kita beralih dari Provinsi pelanggan ke pembelian pelanggan, dan kembali lagi, tanpa
mengetahui nama pelanggan. Database dapat digunakan untuk melacak orang, tetapi juga
dapat digunakan untuk membantu menjaga privasi orang sambil tetap menemukan informasi
yang berguna.
Transaksi
Dalam beberapa aplikasi urutan kueri berjalan dalam urutan yang benar begitu penting
demi keberhasilan penyelesaian. Misalnya, kita membuat urutan kueri untuk mentransfer
dana dari satu rekening bank ke rekening bank lainnya. Tentunya, kita tak ingin salah satu dari
peristiwa berikut terjadi:
• Anda menambahkan dana ke rekening kedua, tetapi saat kita mencoba
menguranginya dari rekening pertama, pembaruan gagal, dan kedua rekening terisi
dana.
• Kita mengurangi dana dari rekening pertama, tetapi permintaan pembaruan untuk
menambahkannya ke rekening kedua gagal, dan dana menghilang.
Urutan kueri tidak hanya penting dalam jenis transaksi ini, tetapi juga penting untuk semua
bagian transaksi agar berhasil diselesaikan. Tapi bagaimana cara memastikan hal ini? Terlebih
jika query sudah dibuat selanjutnya tidak dapat dibatalkan. Apakah kita harus melacak semua
bagian transaksi dan kemudian membatalkan semuanya satu per satu jika ada yang gagal?
Jawabannya sama sekali tidak, karena MySQL hadir dengan fitur penanganan transaksi yang
kuat untuk menutupi kemungkinan ini. Selain itu, transaksi memungkinkan oleh banyak user
atau program pada saat yang bersamaan. MySQL menangani dan memastikan bahwa semua
transaksi dalam antrian user atau program berjalan secara bergiliran tanpa mengacaukan yang
lain.
Mesin Penyimpanan Transaksi
Untuk dapat memakai fasilitas transaksi MySQL, kita harus memakai mesin
penyimpanan InnoDB MySQL. Buat tabel rekening bank dengan mengetikkan perintah pada
Contoh dibawah. (Ingat bahwa untuk melaku kan ini, kita memerlukan akses ke command line
MySQL.)
Contoh Membuat tabel siap transaksi
CREATE TABLE accounts (
number INT, balance FLOAT, PRIMARY KEY(number)
) ENGINE InnoDB;
DESCRIBE accounts;
69
Manajemen Database MySQL
Baris terakhir dari contoh ini menampilkan isi tabel baru sehingga kita dapat
memastikan bahwa itu dibuat dengan benar. Output dari itu akan terlihat seperti ini:
+---------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| number | int(11) | NO | PRI | 0 | |
| balance | float | YES | | NULL | |
+---------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Sekarang mari kita buat dua baris di dalam tabel ini agar kita dapat berlatih memakai
transaksi. Masukkan perintah dalam Contoh dibawah ini.
Contoh Mengisi tabel akun
INSERT INTO accounts(number, balance) VALUES(12345, 1025.50);
INSERT INTO accounts(number, balance) VALUES(67890, 140.00);
SELECT * FROM accounts;
Baris ketiga menampilkan konten tabel untuk mengonfirmasi bahwa baris telah dimasukkan
dengan benar. Outputnya akan terlihat seperti ini:
+ --------+ ---------+
| number | balance |
+ --------+ ---------+
| 12345 | 1025.5 |
| 67890 | 1 40 |
+ --------+ ---------+
2 rows in set (0.00 sec)
Dengan tabel ini dibuat dan diisi sebelumnya, kita sekarang siap untuk mulai memakai
transaksi.
memakai BEGIN
Transaksi di MySQL dimulai dengan pernyataan BEGIN atau START TRANSACTION.
Ketik perintah pada Contoh dibawah ini untuk mengirim transaksi ke MySQL.
Contoh Transaksi MySQL
BEGIN;
UPDATE accounts SET balance=balance+25.11 WHERE number=12345;
COMMIT;
SELECT * FROM accounts;
Hasil dari transaksi ini ditampilkan pada baris terakhir, dan akan terlihat seperti ini:
+ --------+ ---------+
| number | balance |
+ --------+ ---------+
| 12345 | 1050.61 |
| 67890 | 140 |
+ --------+ ---------+
70
Manajemen Database MySQL
2 rows in set (0.00 sec)
Seperti yang kita lihat, saldo nomor rekening 12345 meningkat 25,11 dan sekarang menjadi
1050,61. Kita mungkin juga memperhatikan perintah COMMIT pada contoh yang akan
dijelaskan selanjutnya.
memakai COMMIT
saat serangkaian kueri dalam transaksi telah berhasil diselesaikan, berikan perintah
COMMIT untuk melakukan semua perubahan ke database. Sebelum perintah COMMIT,
MySQL maka semua perubahan yang kita buat hanya bersifat sementara. Fitur ini memberi
kita kesempatan untuk membatalkan transaksi tanpa mengirimkan COMMIT tetapi dengan
mengeluarkan perintah ROLLBACK.
memakai ROLLBACK
memakai perintah ROLLBACK, kita dapat memberi tahu MySQL untuk melupakan
semua kueri yang dibuat sejak awal transaksi dan untuk mengakhiri transaksi. Untuk melihat
aksi ini memasukkan kode transaksi transfer dana dari contoh dibawah ini.
Contoh Transaksi transfer dana
BEGIN;
UPDATE accounts SET balance=balance -250 WHERE number=12345;
UPDATE accounts SET balance=balance+250 WHERE number=67890;
SELECT * FROM accounts;
sesudah kita memasukkan baris ini, kita akan melihat hasil berikut:
+ --------+ ---------+
| number | balance |
+ --------+ ---------+
| 12345 | 800.61 |
| 67890 | 390 |
+ --------+ ---------+
2 rows in set (0.00 sec)
Rekening bank pertama sekarang memiliki nilai 250 lebih kecil dari sebelumnya, dan yang
kedua telah bertambah 250; kita telah mentransfer nilai 250 di antara mereka. Tapi berasusmi
bahwa ada hal yang tidak beres dan kita ingin membatalkan transaksi ini. Kita dapt melakukan
perintah pada seperti contoh dibawah ini.
Contoh Membatalkan transaksi memakai ROLLBACK
ROLLBACK;
SELECT * FROM accounts;
Anda sekarang akan melihat output berikut, yang menunjukkan bahwa kedua akun
telah mengembalikan saldo sebelumnya, karena seluruh transaksi dibatalkan melalui perintah
ROLLBACK:
+ --------+ ---------+
| nu mber | balance |
+ --------+ ---------+
| 12345 | 1050.61 |
71
Manajemen Database MySQL
| 67890 | 140 |
+ --------+ ---------+
2 rows in set (0.00 sec)
memakai EXPLAIN
MySQL hadir dengan alat yang ampuh untuk menyelidiki bagaimana kueri yang kita
keluarkan ditafsirkan. Dengan perintah EXPLAIN, kita bisa mendapatkan snapshot dari kueri
apa pun untuk mengetahui apakah kita dapat mengeluarkannya dengan cara yang lebih baik
atau lebih efisien. Contoh dibawah ini menunjukkan cara memakai perintah EXPLAIN
dengan tabel rekening yang kita buat sebelumnya.
Contoh memakai perintah EXPLAIN
EXPLAIN SELECT * FROM accounts WHERE number='12345';
Hasil dari perintah EXPLAIN ini akan terlihat seperti berikut:
+--+-----------+--------+-----+-------------+-------+-------+-----+----+-----+
|id|select_type|table |type |possible_keys|key |key_len|ref |rows|Extra|
+--+-----------+--------+-----+-------------+-------+-------+-----+----+-----+
| 1|SIMPLE |accounts|const|PRIMARY |PRIMARY|4 |const| 1 | |
+--+-----------+--------+-----+-------------+-------+-------+-----+----+-----+
1 row in set (0.00 sec)
Informasi yang diberikan MySQL kepada kita di sini adalah sebagai berikut:
Select type
Jenis pemilihannya adalah SIMPLE IF. Jika kita menggabungkan tabel bersama, ini akan
menunjukkan jenis bergabung.
type
Jenis kuerinya adalah const. Dari yang terburuk hingga terbaik, nilai dapat berupa ALL,index,
range, ref, eq_ref, const, system, dan NULL.
possible_keys
Ada kemungkinan PRIMARY key, yang berarti akses harus cepat.
key
Kunci yang sebenarnya digunakan adalah PRIMARY.
key_len
Panjang kuncinya adalah 4. Ini adalah jumlah byte indeks MySQL yang akan digunakan.
ref
ref menampilkan kolom atau konstanta mana yang digunakan dengan kunci.
rown
Jumlah baris yang perlu dicari oleh query ini adalah 1.
Setiap kali kita memiliki kueri yang tampaknya memerlukan waktu lebih lama untuk
memproses, coba gunakan EXPLAIN untuk melihat di mana kita dapat mengoptimalkannya.
Kita akan menemukan kunci mana yang digunakan, panjangnya, dan seterusnya, dan akan
dapat menyesuaikan kueri atau desain tabel kita.
72
Manajemen Database MySQL
BAB 4
memakai DATABASE
Database kosong ibarat toples kue kosong — kita tidak mendapatkan apa pun darinya,
dan mencari database kosong tidak lebih menarik daripada mencari toples kue kosong.
Sebuah database berguna hanya sehubungan dengan informasi yang dimilikinya. Database
harus dapat menerima informasi untuk penyimpanan dan menyampaikan informasi
berdasarkan permintaan. Misalnya, CustomerOrderInformationdatabase yang harus dapat
menerima informasi pelanggan dan pesanan, dan harus dapat mengirimkan informasi yang
tersimpan saat kita memintanya. Jika kita ingin mengetahui alamat pelanggan tertentu atau
tanggal pesanan tertentu dibuat, misalnya, database perlu mengirimkan informasi tersebut
saat kita memintanya. Database MySQL kita merespons empat jenis permintaan:
• Menambahkan informasi: Menambahkan baris ke tabel.
• Mengambil informasi: Melihat data. Permintaan ini tidak menghapus data dari
database.
• Memperbarui informasi: Mengubah informasi di baris yang ada. Ini termasuk
menambahkan data ke field kosong di baris yang ada.
• Menghapus informasi: Menghapus data dari database.
Anda berinteraksi dengan database melalui pernyataan dan kueri SQL. Bab ini menjelaskan
cara memakai pernyataan dan kueri SQL untuk menambah, melihat, mengambil,
memperbarui, dan menghapus informasi dalam database Anda.
4.1 MENAMBAHKAN INFORMASI KE DATABASE
Setiap database memerlukan data. Misalnya, saat kita ingin menambahkan data
ke database agar user kita dapat melihatnya atau kita mungkin ingin membuat database
kosong bagi user untuk memasukkan data. Dalam skenario mana pun, data ditambahkan ke
database. Jika data kita masih di atas kertas, kita dapat memasukkannya langsung ke database
MySQL, satu per satu memakai pernyataan SQL. Namun, jika kita memiliki banyak data,
proses ini bisa membosankan dan melibatkan banyak pengetikan. Misalkan kita memiliki
informasi tentang 1.000 produk yang harus ditambahkan ke database Anda.
Dengan asumsi bahwa kita mengoleskan kilat pada keyboard dan dapat memasukkan
baris per menit, itu berarti pengetikan cepat 16 jam. Bisa dilakukan, tapi tidak menyenangkan.
Di sisi lain, misalkan kita perlu memasukkan 5.000 member organisasi ke dalam database, dan
setiap member memerlukan waktu lima menit, sehingga, untuk memasukkan 5000 member
ke database kita memerlukan lebih dari 400 jam waktu mengetik, ini terllau lama dan
membosankan bukan?
Jika kita memiliki banyak data untuk dimasukkan, pertimbangkan beberapa alternatif.
Terkadang scanning bisa menjadi sebuah pilihan, atau, mungkin kita perlu meminjam atau
menyewa bantuan demi melakukan hal ini. Dalam banyak kasus, mungkin lebih cepat untuk
memasukkan data ke dalam file teks besar daripada memasukkan setiap baris dalam
pernyataan SQL yang terpisah.
Pernyataan SQL LOAD dapat membaca data dari file teks besar (atau bahkan file teks
kecil). Jadi, jika data kita sudah ada di file komputer, kita bisa bekerja dengan file itu; kita tidak
perlu mengetikkan semua data lagi. Bahkan jika data dalam format selain file teks (misalnya,
73
Manajemen Database MySQL
dalam file Excel, Access, atau Oracle), kita dapat mengonversi file menjadi file teks, yang
kemudian dapat dibaca ke dalam database MySQL Anda. Jika data belum ada dalam file
komputer dan ada banyak data, mungkin akan lebih cepat untuk memasukkan data tersebut
ke komputer dalam file teks dan mentransfernya ke MySQL sebagai langkah kedua. Sebagian
besar file teks dapat dibaca ke MySQL, tetapi beberapa format lebih mudah dibaca daripada
yang lain.
Menambahkan satu baris pada satu waktu
Jika kita memiliki sedikit data, kita dapat menambahkan satu baris pada satu waktu ke
tabel. Skrip PHP sering kali perlu untuk menambahkan satu baris dalam satu waktu. Misalnya,
saat skrip PHP menerima data dari pelanggan, biasanya perlu memasukkan informasi
pelanggan ke dalam database di baris baru.
Anda memakai pernyataan INSERT untuk menambahkan baris ke database.
Pernyataan ini memberi tahu MySQL tabel mana yang akan ditambahkan baris dan apa
nilainya untuk field di baris tersebut. Bentuk umum dari pernyataan tersebut adalah:
INSERT INTO tablename (columnname, columnname,...,columnname) VALUES (value,
value,...,value)
Aturan berikut berlaku untuk pernyataan INSERT:
• Nilai harus dicantumkan dalam urutan yang sama dengan daftar nama kolom. Nilai
pertama dalam daftar nilai disisipkan ke dalam kolom yang dinamai pertama dalam
daftar kolom; nilai kedua dalam daftar nilai dimasukkan ke dalam kolom yang bernama
kedua; dan seterusnya.
• Daftar kolom, penuh atau sebagian, diperbolehkan. Kita tidak perlu membuat daftar
semua kolom. Kolom yang tidak terdaftar diberi nilai default atau dibiarkan kosong jika
tidak ada nilai default yang ditentukan. Ingat, kolom apa pun yang didefinisikan
sebagai NOT NULL harus disertakan, dengan nilai, atau pernyataan akan gagal.
• Daftar kolom tidak diperlukan. Jika kita memasukkan nilai untuk semua kolom, kita
tidak perlu mencantumkan kolom sama sekali. Jika tidak ada kolom yang terdaftar,
MySQL mencari nilai untuk semua kolom, sesuai urutan kemunculannya di tabel.
• Daftar kolom dan daftar nilai harus sama. Kita harus memberikan nilai untuk setiap
kolom yang kita daftarkan atau kita akan mendapatkan pesan kesalahan seperti ini:
Jumlah kolom tidak cocok dengan jumlah nilai.
Pernyataan INSERT berikut menambahkan baris ke tabel Pelanggan:
INSERT INTO Customer (lastName, street,city,state,zip,
email,phone,fax)
VALUES (“Contrary”,”1234 Garden St”,”Garden”,”NV”,”88888”,
“maryc@hergarden.com”,”(555) 555-5555”,””)
Perhatikan bahwa firstName tidak tercantum dalam daftar nama kolom. Tidak ada nilai yang
dimasukkan ke dalam field FirstName. Jika firstName didefinisikan sebagai NOT NULL, MySQL
tidak akan mengizinkan ini. Juga, jika definisi untuk firstName menyertakan default, maka nilai
default akan dimasukkan, tetapi karena tidak, kolom akan dibiarkan kosong. Perhatikan
bahwa nilai yang disimpan untuk faks adalah string kosong. Untuk melihat dan memastikan
apakah data yang kita masukkan sudah benar, gunakan kueri SQL yang mengambil data dari
database. Singkatnya, kueri berikut mengambil semua data dalam tabel Pelanggan:
74
Manajemen Database MySQL
SELECT * FROM Customer
Menambahkan banyak data
Jika kita memiliki banyak data untuk dimasukkan dan sudah ada dalam file komputer,
kita dapat mentransfer data dari file yang ada di komputer ke database MySQL Anda. Karena
data dalam database diatur dalam baris dan kolom, file teks yang sedang dibaca harus
menunjukkan di mana data untuk setiap kolom dimulai dan diakhiri dan di mana akhir baris.
Inilah cara kita membuat struktur tabel itu:
• Kolom: Untuk menunjukkan kolom, karakter tertentu memisahkan data untuk setiap
kolom. Secara default, MySQL mencari karakter tab untuk memisahkan field. Namun,
jika tab tidak berfungsi untuk file data Anda, kita dapat memilih karakter yang berbeda
untuk memisahkan field dan memberi tahu MySQL bahwa karakter yang berbeda dari
tab memisahkan field.
• Baris: Juga secara default, akhir baris diharapkan menjadi akhir baris — meskipun kita
dapat memilih karakter untuk menunjuk