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 

Penulis 

Judul  ISBN Harga 

IDR 

Nama 

Pelangga

Alamat 

Pelanggan  

Tanggal 

Pembelia

n  

Agus 

Wibowo 

Mars 

Caroline 

Belajar PHP 

dari dasar 

05961010

15 

44.90

Tiara Jl. 

Majapahit 

no. 11 

Kota 

Semarang 

10 Maret 

2022 

Edy 

Jogatam

 Desain Seni 

Rupa Klasik 

05965274

03 

59.90

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

Ella Jl. 

Diponegor

o no 30 

Ungaran 

22 

Agustus 

2022 

Agus 

Wibowo 

Sarwo 

Nugroh

Membang

un 

PODCAST 

05961010

15 

44.90

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

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