Modul Kursus
Rev. 1902
Database dan MySQL
Dalam tutorial ini akan dibahas tentang konsep Relational Database Management System,
Structured Query Language SQL, Database MySQL dan cara mengaksesnya dengan dengan bahasa
pemrograman PHP (PHP MySQL).
1 Mengenal Database
Pada masa ini, database yang paling banyak digunakan untuk aplikasi, termasuk aplikasi berbasis
web, adalah RDBMS.
2 Mendesain Database
Desain database yang baik dimulai dari mendaftar data apa saja yang ingin dimasukan ke dalam
database dan apa yang ingin anda lakukan terhadap data tersebut. Jangan terlalu menganggap
ringan karena jika ada yang terlewat dimasukan, terkadang harus mulai lagi dari awal.
one-to-one, 1:1
one-to-many: 1:N
many-to-one: M:1
many-to-many: M:N
Pelanggan => Penjualan; => 1:N, 1 Pelanggan melakukan banyak transaksi Penjualan (1
transaksi hanya bisa dilakukan oleh 1 Pelanggan);
Pelanggan => Produk; => M:N, Banyak pelanggan dapat membeli 1 Produk, dan Banyak
Produk dapat dibeli 1 Pelanggan
Pelanggan => Toko; => M:N, Banyak Pelanggan bisa membeli di 1 toko, dan Banyak Toko bisa
menjual ke 1 Pelanggan
Penjualan => Produk; => M:N, Banyak Penjualan menjual 1 Produk, dan Banyak Produk bisa
dijual dalam 1 transaksi Penjualan.
Toko => Penjualan; => 1:N, 1 Toko bisa melakukan banyak Penjualan. (1 transaksi Penjualan
hanya bisa dilakukan di 1 toko)
Toko => Produk; => M:N, Banyak Toko bisa menyimpan 1 Produk, Banyak Produk bisa
disimpan di satu Toko.
Dari gambar diatas, kita melihat bahwa hubungan antara Pelanggan dan Produk dapat diwakili oleh
Penjualan. Relationship ini disebut Redundant. Relasi seperti ini bisa dihapus.
Hubungan Produk dan Penjualan yang berupa M:N (banyak ke banyak) pada prakteknya tidak bisa
dilakukan langsung. Tetapi harus dilakukan melalui tabel antara. Begitu juga antara Produk dengan
Toko. Untuk hubungan antara Produk dan Penjualan dapat dibuat tabel antara Penjualan Detil.
Sedangkan hubungan antara Produk dan Toko, dapat dibuat tabel antara Stok. Berikut adalah
model database yang telah diperbaiki:
Gambar 2. Hubungan relationship antar entity yang sudah dioptimasi dengan menghapus
relationship redundant, dan tambahan 2 table: penjualan detail dan stok.
Elemen data yang ingin kita simpan dalam sebuah entitas disebut atribut. Contoh atribut pada entitas
Produk adalah nama produk, harga, tipe, pabrik. Pada Pelanggan, misanya nama dan alamat.
Pada Penjualan misalnya produk, tanggal, jumlah, dan seterusnya.
Data turunan adalah data yang diturunkan dari data atribut lain yang sudah disimpan. Contoh klasik
dari data turunan misalnya ‘total penjualan’. Nilainya adalah total penjumlahan dari harga barang
dikali jumlah pembelian, dalam kurun waktu tertentu. Karena nilainya bisa terus berubah seiring
waktu, maka data turunan ini tidak perlu disimpan.
Dalam membangun relationship antar entitas, PK dipakai sebagai referensi. Contohnya, relasi antara
entitas Penjualan dan Penjualan-detil akan menggunakan PK Penjualan. Data atribut PK
Penjualan akan disimpan sebagai kolom pada pada entitas Penjualan-detil.
Keberadaan PK Penjualan dalam PK Penjualan-detil disebut Foreign Key.
The standard data types that every database knows, and are most-used, are: CHAR, VARCHAR, TEXT,
FLOAT, DOUBLE, and INT. Untuk database MySQL, akan dibahas pada bagian berikutnya.
3 Normalisasi Entitas
Normalilsasi adalah proses untuk akan menjaga agar data tetap mempunyai integritas yang baik
dengan menghilangkan kelompok data yang duplikat dan redundant. Normalisasi akan membuat
model data menjadi fleksible dan reliable.
Contoh 6. Kolom GenreType dihilangkan karena tidak bergantung pada primary-key buku.
Pada contoh ini, dibuat tabel baru Table_Genre.
4 Database MySQL
MySQL adalah adalah Relational Database Management System (RDBMS) open-source yang paling
terkenal. Ia juga merupakan database yang paling banyak dipakai untuk aplikasi berbasis web.MySQL
adalah database yang cepat, mudah digunakan, dan dapat dipakai baik pada bisnis kecil ataupun
yang berskala besar. MySQL dikembangkan, didukung, dan dipasarkan oleh perusahaan MySQL AB
dari Swedia.
Paket XAMPP telah menyertakan aplikasi phpMySQL untuk mengelola database server.
INT – Integer ukuran normal, nilai yang diperbolehkan adalah dari -2147483648 to 2147483647,
bisa negative dan positif. Jika atribut di set UNSIGNED, maka range yang dapat dipakai adalah
dari 0 sampai 4294967295. Integer ini dapat di set maksimal sampai 11 digit, atau INT(11).
TINYINT – Tipe Integer yang sangat kecil, bisa negative dan positif. Untuk tipe SIGNED, nilai yang
diizinkan adalah -128 sampai 127. Sedangkan untuk UNSIGNED dari 0 sampai 255. Tipe TINYINT
dapat diset sampai 4 digit.
SMALLINT – Tipe integer kecil, SIGNED memiliki range -32768 sampai 32767, dan UNSIGNED 0
sampai 65535. Tipe SMALLINT dapat di set sampai 5 digits.
MEDIUMINT - Tipe integer menengah, SIGNED memiliki range -8388608 sampai 8388607, dan
UNSIGNED 0 sampai 16777215. Tipe MEDIUMINT dapat di set sampai 9 digits.
BIGINT –Tipe integer paling besar, SIGNED memiliki range -9223372036854775808 sampai
9223372036854775807, dan UNSIGNED 0 sampai 0 to 18446744073709551615. Tipe BIGINT
dapat di set sampai 20 digits.
FLOAT(M,D) – Tipe bilangan pecahan. Tipe ini tidak bisa unsigned. Anda dapat menentukan
panjang tampilan dengan (M) dan jumlah decimal pada (D). Nilai default untuk (M,D) adalah
(10,2). Nilai (10,2) artinya panjang total adalah 10 digit, termasuk decimal. Nilai presisi decimal
bisa sampai 24.
DOUBLE(M,D) – Tipe bilangan pecahan presisi dobel. Tipe ini tidak bisa unsigned. Anda dapat
menentukan panjang tampilan dengan (M) dan jumlah decimal pada (D). Nilai default untuk
(M,D) adalah (16,4). Nilai presisi decimal bisa sampai 53. Tipe REAL adalah sinonim untuk
DOUBLE.
DECIMAL(M,D) – Tipe DECIMAL tidak bisa unsigned. Pada tipe ini, setiap decimal akan
mengambil satu byte. Menentukan nilai M dan D adalah keharusan (tidak ada nilai default). Tipe
NUMERIC adalah nama lain dari DECIMAL.
CHAR(M) – String yang memiliki panjang tetap, antara 1 dan 255. Panjang tipe string dapat
ditentukan dengan CHAR(M) dimana M adalah jumlah maksimal karakter.
VARCHAR(M) – String dengan panjang variable antara 1-255.
BLOB or TEXT – Tipe data String (rangkaian karakter) dengan maksimum panjang data 65535
characters. BLOBs singkatan dari "Binary Large Objects", dipakai untuk menyimpan data binary,
seperti gambar. Sedangkan TEXT dipakai untuk menyimpan data yang berbasis “Karakter untuk
dibaca”. Pada proses mengurutkan dan pencarian, tipe data TEXT akan berbasis karakter.
Sedangkan BLOB berbasis nilai byte numerik.
TINYBLOB or TINYTEXT – Tipe data BLOB atau TEXT yang berisi maksimal 125 karakter.
MEDIUMBLOB or MEDIUMTEXT – Tipe data BLOB or TEXT dengan panjang maksimum
16777215 characters.
LONGBLOB or LONGTEXT – Tipe data BLOB or TEXT dengan panjang maksimum 4294967295
characters.
ENUM – Enum adalah tipe data string dengan nilai yang dipilih dari daftar tertentu yang
diizinkan. Daftar tersebut ditentukan saat table dibuat. Misanya Anda ingin membuat datar
untuk mengisi field jenis kelamin, tipenya: ENUM(“PRIA”,”WANITA”).
Meskipun SQL adalah standar ANSI (American National Standards Institute), tetapi ada beberapa
bagian yang berbeda dari bahasa SQL tergantung vendor databasenya.
Namun, untuk menjadi sesuai dengan standar ANSI, mereka semua mendukung setidaknya perintah
utama dengan model sintak yang sama. Contoh perintah utama: : SELECT, UPDATE, DELETE, INSERT,
WHERE, dan seterusnya.
Sebuah program database RDBMS (yaitu MySQL, MS Access, SQL Server, Oracle)
Bahasa server-side scripting seperti PHP atau ASP
Bahasa SQL untuk mendapatkan data yang Anda inginkan
CREATE DATABASE
SELECT DATABSE
DROP DATABASE
CREATE TABLE
DROP TABLE
ALTER COMMAND
8.1.1 Syntax:
CREATE DATABASE nama_database;
8.1.2 Contoh:
CREATE DATABASE database_baru;
Perintah tersebut untuk membuat database baru dengan nama database_baru. Setelah dibuat,
database tersebut dapat dicek dalam daftar menggunakan perintah berikut:
SHOW DATABASES;
9.1.2 Contoh:
Misalnya kita akan menghapus database database_baru, maka perintah yang dipakai adalah:
Catatan.
Hati-hatilah dalam menggunakan perintah ini akan akan menghapus database dengan seluruh isinya
dan datanya tidak bisa dikembalikan.
When you have multiple databases in your SQL Schema, then before starting your operation, you
would need to select a database where all the operations would be performed.
10.1.1 Syntax:
USE nama_database;
11.1.1 Syntax:
Basic syntax of CREATE TABLE statement is as follows:
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
);
Berikut adalah contoh bagaimana menggunakan perintah CREATE TABLE untuk membuat table
lengkap dengan field yang didefinisikan tipe-nya.
11.1.2 Contoh:
Berikut adalah contoh untuk membuat table CUSTOMER lengkap dengan field: ID (Integer), NAME
(teks), AGE (Integer), ADDRESS (teks), SALARY (decimal), dan ID sebagai primary key.
Setelah table dibuat, anda dapat memverifikasi hasil table tersebut dengan memanggil perintah:
DESC CUSTOMERS;
12.1.1 Syntax:
DROP TABLE table_name;
Pernyataan SQL berikut dipakai untuk memilih kategori yang unik (hanya ditampilkan sekali) dari
table film list:
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
Bentuk kedua harus menetapkan nama kolom dan nilai-nilai yang akan dimasukkan:
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
18.1.2 Peringatan!
Hati-hati saat memperbarui record. Jika kita telah menghilangkan klausa WHERE dalam contoh di
atas, maka seluruh title pada table film akan diperbarui.
or
Catatan: Berhati-hatilah saat menghapus record. Anda tidak dapat membatalkan pernyataan ini!
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
Pernyataan SQL berikut memilih semua film dengan title mulai dari huruf “s”:
Tip: Tanda "%" digunakan untuk mendefinisikan wildcard (huruf hilang). Wildcard dapat digunakan
sebelum dan sesudah pola.
Pernyataan SQL berikut memilih semua film diakhiri dengan huruf "s":
Pernyataan SQL berikut memilih semua film yang title-nya berisi pola "land":
Kata kunci “NOT” digunakan untuk untuk memilih record yang TIDAK sesuai pola.
Pernyataan SQL berikut memilih semua film dengan title yang tidak mengandung pola "land":
Wildcard Deskripsi
% Sebuah pengganti nol atau lebih karakter
_ Sebuah pengganti satu karakter
[charlist] Sets dan ranges karakter untuk mencocokkan
[^charlist] Pertandingan hanya karakter tidak ditentukan dalam kurung
or
[!charlist]
Pernyataan SQL berikut memilih semua film dengan title dimulai kata "ber":
Pernyataan SQL berikut memilih semua film dengan title mengandung pola "es":
Pernyataan SQL berikut memilih semua film dengan title dimulai dengan karakter apapun, diikuti
dengan " ictory ":
Pernyataan SQL berikut memilih semua film dengan title dimulai dengan "a", "b", atau "c":
Pernyataan SQL berikut memilih semua film dengan title TIDAK dimulai dengan "b", "s", atau "p":
atau
24 Operator SQL IN
Operator IN memungkinkan Anda menentukan beberapa nilai sekaligus dalam klausa WHERE.
Nilai yang dimasukan dalam klausa WHERE dipisahkan dengan KOMA
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
25.1.1 Contoh Operator BETWEEN
Pernyataan SQL berikut memilih semua film dengan harga sewa antar 2 samai 3 (dollar):
Untuk menampilkan produk di luar jangkauan contoh sebelumnya, gunakan NOT BETWEEN:
Pernyataan SQL berikut memilih semua pembayaran dengan payment_date antara 1 Juni 2005
sampai denagn 30 Juni 2005:
26 SQL Alias
Alias SQL digunakan untuk memberikan nama sementara pada table database atau kolom.
Tujuannya agar mudah dibaca, terutama untuk kolom-kolom yang berasal dari rumus/fungsi.
SELECT column_name(s)
FROM table_name AS alias_name;
Jenis yang paling umum dari bergabung adalah: SQL JOIN (INNER JOIN).
Sebuah SQL JOIN menghasilkan semua baris dari beberapa table di mana kondisi JOIN terpenuhi.
Berikut adalah tabel "Customers" yang memiliki CustomerID yang sama dengan tabel Orders:
Berikut adalah contoh memanggil JOIN dengan menggunakan relasi CustomerID tersebut:
27.1.1 Contoh
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
akan mengasilkan
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
Atau
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
Catatan:
Kata kunci INNER JOIN hanya menampilkan baris yang memiliki kecocokan antar kolom. Baris
lainnya akan disembunyikan.
or:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
29.1.2 Contoh
Pernyataan SQL berikut akan menampilkan seluruh baris customer, dan hanya order yang mungkin
mereka miliki:
Catatan:
LEFT JOIN kata kunci menghasilkan semua baris dari table kiri (Customers), bahkan jika tidak ada
kecocokan di table kanan (Pesanan).
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
PS! Pada beberapa database, pernyataa RIGHT JOIN dikenal dengan RIGHT OUTER JOIN.
30.1.1 Contoh
Berikut adalah contoh dari database Northwind.
30.1.2 Contoh
Pernytaan berikut akan menghasilkan semua employee, dan beberapa order yang telah masuk:
32.1.2 Contoh
Pernyataan SQL berikut akan menghasilkan rata-rata dari kolom "Price" dari tabel "Products":
33.1.4 Contoh
Pernyataan SQL menghitung jumlah order dari "CustomerID"=7 from untuk tabel "Orders":
34.1.2 Contoh
Pernyataan SQL berikut menghasilkan nilai terbesar dari kolom "Price" dari table "Products":
35.1.2 Contoh
Pernyataan SQL berikut akan menghasilkan nilai terkecil dari kolom "Price" dari table "Products":
36.1.2 Contoh
Pernyataan berikut menghitung jumlah total dari kolom "Quantity" untuk tabel "OrderDetails":
Fungsi GROUP BY dipakai secara bersamaan dengan fungsi aggregate untuk menghasilkan nilai yang
dikelompokan berdasarkan kriteria tertentu.
37.1 SQL GROUP BY Syntax
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
37.1.2 Contoh
Contoh berikut menghitung order digrup berdasarkan shipper:
38.1.2 Contoh
Berikut adalah contoh SQL untuk mencari jumlah employee yang terdaftar memililki lebih dari 10
order.
Berikut adalah untuk mencari employees "Davolio" or "Fuller" yang telah teregister lebih dari 25
orders.
Dengan Query, kita bisa mendapatkan informasi yang sepesifik melalui data yang
dihasilkan/dikeluarkan olehnya.
PHP 5 dan versi setelahnya, dapat bekerja dengan MySQL database menggunakan fungsi-
fungsi MySQLi Extension (huruf "i" berasal dari “improved”). Manual tentang aplikasi-aplikasi ini
bisa dilihat di http://php.net/manual/en/book.mysqli.php
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
Berikut adalah aturan yang harus diikuti dalam melakukan query SQL dalam PHP:
*) Dalam bentuk quoted artinya pernyataan yang dibuat berada dalam pasangan tanda petik satu ‘..
’atau dua “...“. Pernyataan dalam bentuk quoted akan dianggap STRING oleh PHP.
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " .
$row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>
Catatan Penting.
Dalam melakukan perintah DELETE perhatikan klausul WHERE karena jika tidak sengaja diabaikan bisa
menyebabkan seluruh data terhapus.
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
if (mysqli_query($conn, $sql)) {
echo "Record deleted successfully";
} else {
echo "Error deleting record: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
Catatan Penting.
Dalam melakukan perintah UPDATE perhatikan klausul WHERE karena jika tidak sengaja
diabaikan bisa menyebabkan seluruh terupdate data yang sama.
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
if (mysqli_query($conn, $sql)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($conn);
}
mysqli_close($conn);
?>