MySQL Dasar
Dibuat oleh Stacklab.
Pengenalan Database
Apa itu Database?
● Database adalah kumpulan data yang terorganisir sehingga mudah diakses,
dikelola, dan diperbarui.
● Contoh dalam Kehidupan Sehari-hari:
○ Buku alamat untuk menyimpan kontak.
○ Aplikasi e-commerce yang menyimpan data produk dan pembeli.
Mengapa Kita Membutuhkan Database?
● Di era modern ini, data adalah salah satu aset paling berharga.
● Dalam kehidupan sehari-hari, kita sering menemukan berbagai aktivitas yang
melibatkan pengumpulan, penyimpanan, dan pengelolaan data.
● Namun, jika kita melihat kembali ke metode tradisional dalam mengelola data,
kita akan menyadari bahwa cara-cara lama memiliki banyak kekurangan.
Berangkat dari suatu masalah
● Bayangkan kita memiliki toko kecil yang menyimpan data pelanggan
menggunakan buku catatan.
● Setiap pelanggan baru ditambahkan ke halaman baru, dan ketika kita ingin
mencari pelanggan tertentu, kita harus membolak-balik seluruh buku untuk
menemukannya.
● Jika ada pelanggan yang datang kembali dan informasinya perlu diperbarui,
misalnya mengganti alamat, data lama harus dicoret atau ditulis ulang,
menciptakan kekacauan.
● Risiko kehilangan data akibat rusaknya buku atau hilangnya catatan juga
sangat besar.
Bagaimana solusi nya?
● Seiring pertumbuhan toko tersebut, masalah menjadi semakin kompleks.
● Makin banyak pelanggan, makin sulit mengelola data.
● Lembar kerja seperti Excel mungkin menawarkan solusi awal, tetapi ketika
jumlah data meningkat, Excel juga memiliki batasannya
● Data dalam jumlah besar sulit dikelola, sering terjadi duplikasi, dan keamanan
data menjadi masalah serius, terutama ketika data sensitif seperti nomor
telepon atau alamat pelanggan terlibat.
● Solusi untuk masalah ini adalah database.
Database sebagai solusi
● Database menawarkan cara yang lebih terorganisir untuk menyimpan data.
● Dengan menggunakan database, data dapat disimpan dalam tabel-tabel yang
memiliki struktur jelas.
● Setiap baris dalam tabel mewakili satu data individu, dan setiap kolom
menyimpan jenis informasi tertentu, seperti nama, alamat, atau nomor
telepon.
● Database memungkinkan data dicari dengan cepat, diperbarui dengan
mudah, dan dilindungi dengan tingkat keamanan yang tinggi.
Jenis-jenis database
● Database sendiri memiliki beberapa jenis diantaranya:
○ Relational (MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server, MariaDB, dll)
○ Key-Value (Redis, Memcached, dll)
○ Document (MongoDB, CouchDB, dll)
○ Graph (Neo4j, Amazon Neptune, ArangoDB, OrientDB, dll)
○ Columnar (Apache Cassandra, Amazon Redshift, dll)
● Jenis database apa yang ingin digunakan, itu tergantung kebutuhan.
● Namun, umumnya database relasional menjadi pilihan awal, karena database
relasional mudah digunakan, data nya yang terstruktur, dan kelebihan
lainnya.
Alat untuk mengelola database
● Jika pada lembar kertas kita butuh pena untuk menuliskan sebuah data
disana, begitu pun dengan database.
● Untuk mengelola database kita membutuhkan suatu alat yang disebut
dengan DBMS (database management system).
● Terdapat banyak DBMS yang bisa digunakan mulai dari versi yang berbayar
hingga yang gratis.
● Salah satu DBMS paling populer saat ini adalah MySQL. (survey)
Pengenalan MySQL
Apa itu MySQL?
● MySQL adalah salah satu sistem manajemen basis data relasional (RDBMS)
paling populer di dunia.
● Dikembangkan oleh MySQL AB pada tahun 1995, MySQL sekarang dimiliki
dan dikelola oleh Oracle Corporation.
● MySQL menggunakan Structured Query Language (SQL) untuk mengelola,
mengakses, dan memanipulasi data.
● MySQL memiliki versi gratis dan open source, yaitu Community Edition dan
versi berbayar yang memiliki fitur tambahan yaitu Enterprise Edition.
● [Link]
Sejarah MySQL - Awal Pengembangan
● MySQL dikembangkan oleh Michael
Widenius (Monty), David Axmark, dan
Allan Larsson di Swedia pada tahun
1995.
● Nama MySQL berasal dari nama anak
perempuan Monty, "My," serta singkatan
SQL untuk Structured Query Language.
source: [Link]
Sejarah MySQL - Akuisisi oleh Oracle
● Pada tahun 2008, Sun Microsystems
mengakuisisi MySQL AB.
● Pada tahun 2010, Oracle Corporation
mengakuisisi Sun Microsystems, termasuk
MySQL.
● Komunitas open-source mulai khawatir bahwa
Oracle, sebagai perusahaan besar yang memiliki
produk database lain (seperti Oracle Database),
mungkin akan membatasi pengembangan
MySQL atau mengarahkan MySQL untuk tujuan
komersial.
● Sebagai respons terhadap kekhawatiran ini,
Monty Widenius memutuskan untuk membuat
fork dari MySQL dan menciptakan MariaDB pada source: [Link]
tahun 2009.
Struktur Dasar MySQL
● Database: Tempat untuk menyimpan data dalam bentuk tabel. Satu database
bisa berisi banyak tabel.
● Tabel: Struktur untuk menyimpan data yang terdiri dari baris dan kolom.
● Baris (Row): Setiap baris dalam tabel menyimpan satu record data.
● Kolom (Column): Setiap kolom dalam tabel menyimpan atribut dari data yang
ingin disimpan.
● Query: Perintah yang digunakan untuk melakukan operasi pada data, seperti
SELECT, INSERT, UPDATE, dan DELETE.
Representasi Data MySQL
source: [Link]
Cara kerja MySQL
GUI Tool
DBeaver, Navicat, Mysql Workbench
DML | DDL | DCL | TCL | DQL
DB Client SQL
Connector
MySQL
CLI Tool
MySQL Cli, MySQL Shell
SQL (Structure Query Language)
● SQL adalah bahasa standar yang digunakan untuk mengelola dan
berkomunikasi dengan database.
● SQL menjadi standar American National Standards Institute (ANSI) pada
tahun 1986, dan International Organization for Standardization (ISO) pada
tahun 1987.
● Walaupun SQL menjadi bahasa standar, pada kenyataan terdapat beberapa
versi sql yang berbeda di setiap masing-masing DBMS.
● Namun, agar sesuai dengan standar ANSI, semuanya mendukung setidaknya
perintah utama (seperti SELECT, UPDATE, DELETE, INSERT, WHERE)
dengan cara yang sama.
Jenis-jenis SQL
● DDL (Data Definition Language)
Untuk membuat atau mengubah struktur database.
Contoh: CREATE, ALTER, DROP
● DML (Data Manipulation Language)
Untuk menambah, mengubah, atau menghapus data.
Contoh: INSERT, UPDATE, DELETE
● DQL (Data Query Language)
Untuk mengambil data.
Contoh: SELECT
● DCL (Data Control Language)
Untuk mengatur hak akses.
Contoh: GRANT, REVOKE.
● TCL (Transaction Control Language)
Untuk mengatur transaksi data (seperti menyimpan perubahan atau membatalkan perubahan).
Contoh: COMMIT, ROLLBACK.
SQL Statement
● SQL adalah bahasa yang mudah dimengerti, karena menggunakan kata
kunci dalam bahasa inggris (SELECT, WHERE, ORDER BY)
● Saat kita menuliskan SQL untuk melakukan aksi, itu disebut sebagai
statement / pernyataan.
● Misal nya: Ambil data A, Tambah data B, Hapus data C.
Aturan Penulisan
● Penulisan SQL itu tidak case sensitive, artinya huruf besar atau kecil itu di
anggap sama.
● Setiap statement pada SQL harus diakhiri nya titik koma.
● Titik koma juga sebagai pemisah antara statement satu dengan statement
selanjut nya.
● Contoh penulisan SQL:
SELECT name FROM products;
INSERT INTO products (id, name category)
VALUES (1, “Television”, “Electronic”);
Persiapan Belajar
Alat-alat yang dibutuhkan
● MySQL Server
Service utama MySQL Database.
● GUI Client Tool
Alat yang digunakan untuk berinteraksi dengan MySQL Server via GUI.
Beberapa GUI tools yang direkomendasikan untuk digunakan seperti:
dbeaver, heidisql, MySQL Workbench, SQLyog, Datagrip.
Instalasi di Linux (Ubuntu)
● Untuk menginstall MySQL di linux, kita bisa menggunakan package manager
yaitu apt agar lebih mudah.
● Jalankan perintah berikut di terminal: sudo apt install mysql-server
● Untuk mengaktifkan MySQL service ketika komputer di reboot, kita bisa
menggunakan perintah ini: sudo systemctl enable [Link]
● Untuk menjalankan MySQL Service: sudo systemctl start [Link]
● Untuk melihat status MySQL service nya apakah sudah berjalan, kita bisa
menggunakan perintah: systemctl status [Link]
Instalasi di Windows
● Untuk menginstall MySQL di windows, kita bisa menggunakan installer yang
disediakan oleh situs official MySQL disini
[Link]
● Pada installer tersebut, disediakan beberapa produk dari MySQL seperti
MySQL Server, MySQL Workbench, dan MySQL Shell yang bisa kita install
dengan mudah.
● Pilih sistem operasi yang digunakan, yaitu Microsoft Windows.
● Untuk versi nya, silahkan pilih versi 8 yang LTS (Long Term Support)
Instalasi di Windows (2)
● Pada proses setup, pilih custom,
karena kita hanya akan
menginstall beberapa produk nya
saja.
● Kemudian pilih next.
Instalasi di Windows (3)
● Pilih beberapa produk MySQL
yang akan di install, yaitu MySQL
Server dan MySQL Workbench.
● Pilih versi yang paling terbaru.
● Kemudian pilih next.
Instalasi di Windows (3)
● Pilih execute untuk memulai
proses download produk nya.
● Kemudian tunggu hingga proses
download selesai.
● Lalu pilih next.
● Kemudian klik execute untuk
menginstall produk-produk yang
telah dipilih.
● Selanjutnya klik Next.
Instalasi di Windows (4)
● Untuk konfigurasi dibiarkan saja
default.
● Dan untuk accounts nya, silahkan
masukan password yang di
inginkan, ingat baik-baik password
ini karena kita akan menggunakan
password ini untuk koneksi ke
MySQL Server,
Instalasi di Windows (4)
● Untuk konfigurasi lainnya,
dibiarkan saja dibuat default.
● Jika sudah selesai, klik finish.
● Proses instalasi telah selesai.
Terhubung ke MySQL (CLI)
● Ada 2 cara agar bisa terhubung ke MySQL Server, pertama menggunakan CLI, dan
kedua menggunakan GUI client tool.
● untuk terhubung menggunakan CLI, kita perlu menjalankan mysql client dalam bentuk file
executable dengan nama mysql (.exe / .sh) dari lokasi tempat mysql di install.
● Default nya, folder program mysql berada di path ini:
C:\Program Files\MySQL\MySQL Server 8.0\bin
● Kemudian buka CMD/Terminal di directory tersebut, atau menggunakan lokasi path
lengkap nya.
● jalan perintah berikut: mysql -u <username> -p
● Kemudian masukan password yang sebelumnya dibuat.
Terhubung ke MySQL (CLI)
Konfigurasi Environment Path untuk MySQL CLI
● Sebelumnya, untuk terhubung ke mysql server, kita perlu menjalankan
mysql client di dalam folder instalasi mysql di folder program files.
● Kita bisa menjalankan MySQL client tanpa harus masuk ke folder instalasi
nya, atau menggunakan path lengkap ke folder bin mysql.
● Cara nya, tambahkan path folder instalasi MySQL ke dalam environment
variable.
Konfigurasi Environment (Windows)
● Tekan windows + R
● Ketikan [Link]
● Kemudian pilih tab advanced dan pilih Environment Variables di bawah.
● Disana, terdapat 2 panel, yaitu user variables dan system variables. Perbedaan
nya, user variables hanya berlaku pada user yang login saat ini. Sedangkan
system variables berlaku untuk semua user di dalam sistem.
● Kita akan tambahkan di system variables, klik 2 kali bagian “path”
● Di sebelah kanan, pilih New untuk menambahkan env variable baru.
● Tuliskan lokasi mysql bin di program files, tekan OK
Konfigurasi Environment (Linux / MacOS)
● Untuk melihat seluruh env, gunakan perintah di terminal “printenv” / “env”
● Buka file .bashrc (untuk bash) atau .zshrc (untuk zsh) dengan menggunakan
text editor seperti nano/vim.
● perintah nya: nano ~/.bashrc
● Kemudian tambahkan lokasi path tempat bin mysql disimpan menggunakan
kata kunci export.
● export PATH="$PATH:/usr/local/mysql/bin"
● Jika sudah, terakhir jalankan perintah: source ~/.bashrc
Terhubung ke MySQL (MySQL Workbench)
● Untuk terhubung ke MySQL server
menggunakan Workbench, kita bisa
pilih menu database di atas.
● Kemudian masukan credential
MySQL Server yang telah kita
install. Jika sebelum nya kita buat
default, maka langsung saja pilih
connect.
● Masukan password yang
sebelumnya telah kita buat.
Sample Database
● Kita akan menggunakan Sample Database.
● Dengan sample database, kita bisa melakukan simulasi pada database.
● Silahkan download disini
● Sample database berisi tabel-tabel seperti customers, products, customers,
payments, employees dan lain-lain.
Load sample ke database
● Ekstrak file zip sample database yang telah di
download, dan simpan dimana saja yang anda
inginkan.
● Kemudian kita perlu terhubung ke mysql melalui
CLI mysql -u root -p
● Selanjut, pada CLI mysql, jalankan perintah source
<lokasi file sample>/[Link]
● Lihat seluruh database dengan menjalankan
perintah SHOW DATABASES dan pastikan ada
database dengan nama classicmodels.
MySQL Workbench
Apa itu MySQL Workbench?
● MySQL Workbench adalah sebuah aplikasi yang digunakan untuk
mengelola database MySQL.
● Aplikasi ini memiliki UI yang mudah digunakan dan menyediakan alat-alat
untuk bekerja dengan database.
● Fungsi utamanya:
○ Desain Database
○ Manajemen Database
○ Query Editor
○ Administrasi Server
Tampilan MySQL Workbench
Cara eksekusi query
● Saat kita membuat query di sql editor, kita bisa menjalankan query tersebut
secara keseluruhan atau salah satu query yang ingin kita pilih saja.
● Jika hanya ingin menjalankan query yang dipilih kita bisa gunakan shortcut
CTRL + Enter, namun pastikan kursor berada pada query yang dipilih.
Cara eksekusi query
Database Management
Membuat Database
● Sebagai langkah awal, kita perlu membuat DATABASE terlebih dahulu.
● Untuk cara penulisan nya: CREATE DATABASE nama_database;
Membuat Database
Melihat seluruh Database
● Untuk melihat keseluruhan
database yang kita punya, kita bisa
gunakan perintah:
SHOW DATABASES;
Menggunakan Database
● Selanjut nya, kita perlu melakukan USE statement terhadap database yang
ingin kita lakukan query.
● Untuk memeriksa kita sedang use database yang mana, kita bisa
menggunakan perintah SELECT DATABASE() jika hasil nya null, maka kita
tidak sedang menggunakan database manapun.
Menggunakan Database
Menghapus Database
● Untuk menghapus database kita bisa menggunakan perintah:
○ DROP DATABASE nama_database;
Tipe Data
Tipe Data
● Di MySQL, tipe data digunakan untuk mendefinisikan jenis data yang akan
disimpan dalam kolom sebuah tabel.
● Contoh: Kolom NAME untuk tipe data teks, kolom UMUR tipe data angka.
● Terdapat beberapa tipe data yang tersedia di mysql sebagai berikut:
● [Link]
Tipe Data Numerik
● Tipe data numerik digunakan untuk menyimpan angka.
● Ada berbagai macam tipe data numerik di MySQL, yang dibagi berdasarkan
kapasitas dan cara penyimpanan angka tersebut, diantaranya:
○ Tipe Data Integer (Bilangan Bulat)
○ Tipe Data Floating-Point (Bilangan Pecahan)
Tipe Data Numerik - Integer (Bilangan Bulat)
● Tipe data integer digunakan untuk menyimpan angka bulat (tanpa koma
desimal).
Tipe Data Numerik - Floating-Point (Bilangan Pecahan)
● Tipe data ini digunakan untuk menyimpan angka yang memiliki nilai desimal
(bilangan pecahan)
Tipe Data String
● Tipe data String digunakan untuk menyimpan informasi berupa karakter
atau string.
● Berikut beberapa tipe data String yang tersedia di MySQL:
○ CHAR
○ VARCHAR
○ TEXT
○ TINYTEXT, MEDIUMTEXT, LONGTEXT
Tipe Data String
● CHAR(n): Menyimpan string dengan panjang tetap sebanyak n karakter.
○ Jika teks yang disimpan lebih pendek dari n, MySQL akan menambah spasi kosong untuk memenuhi panjang yang ditentukan.
● VARCHAR: Menyimpan string dengan panjang variabel hingga n karakter.
○ VARCHAR lebih efisien dalam penyimpanan dibandingkan CHAR untuk teks yang panjangnya bervariasi.
● TEXT: Menyimpan teks dengan panjang hingga 65,535 karakter.
○ Berguna untuk teks panjang yang tidak bisa diakomodasi dengan VARCHAR.
● TINYTEXT: Menyimpan hingga 255 karakter.
● MEDIUMTEXT: Menyimpan hingga 16,777,215 karakter.
● LONGTEXT: Menyimpan hingga 4,294,967,295 karakter
○ Digunakan untuk menyimpan teks yang sangat panjang, misalnya deskripsi produk atau artikel.
Tipe Data Waktu dan Tanggal
● Tipe data waktu dan tanggal digunakan untuk menyimpan informasi waktu,
tanggal, atau keduanya.
● Berikut beberapa tipe data Waktu dan Tanggal yang tersedia di MySQL:
○ DATE
○ DATETIME
○ TIMESTAMP
○ TIME
○ YEAR
Tipe Data Waktu dan Tanggal
● DATE: Menyimpan tanggal dalam format YYYY-MM-DD
contoh: 2025-01-21
● DATETIME: Menyimpan tanggal dan waktu dalam format YYYY-MM-DD HH:MM:SS
contoh: 2025-01-21 14:30:00
● TIMESTAMP: Menyimpan tanggal dan waktu, tetapi memiliki batasan waktu antara 1970-01-01
00:00:01 UTC dan 2038-01-19 03:14:07 UTC.
Perbedaan utama dengan DATETIME adalah TIMESTAMP menyimpan data dalam waktu UTC
dan akan otomatis disesuaikan dengan zona waktu server.
● TIME: Menyimpan waktu dalam format HH:MM:SS (tanpa tanggal)
contoh: 14:30:00
● YEAR: Menyimpan tahun dalam format YYYY.
contoh: 2025
Tipe Data Biner
● Tipe data biner digunakan untuk menyimpan data dalam bentuk biner
seperti file, gambar, atau media lainnya.
● Berikut beberapa tipe data Biner yang tersedia di MySQL:
○ BLOB (Binary Large Object)
○ TINYBLOB
○ MEDIUMBLOB
○ LONGBLOB
Tipe Data Biner
● BLOB (Binary Large Object): Menyimpan data biner dengan ukuran hingga
65,535 byte (64KB).
Berguna untuk menyimpan gambar, dokumen, atau file lainnya.
● TINYBLOB: Menyimpan data biner hingga 255 byte.
● MEDIUMBLOB: Menyimpan data biner hingga 16,777,215 byte (16MB).
● LONGBLOB: Menyimpan data biner hingga 4,294,967,295 byte (4GB).
Tipe Data Enum dan Set
● ENUM: Digunakan untuk menyimpan satu nilai dari beberapa pilihan yang
telah ditentukan.
contoh: Jika sebuah kolom hanya dapat memiliki nilai "Laki-laki" atau
"Perempuan", kita bisa menggunakan ENUM.
● SET: Menyimpan beberapa nilai yang dipilih dari daftar pilihan yang telah
ditentukan.
Kolom yang menyimpan pilihan "Merah", "Hijau", dan "Biru" bisa memilih
beberapa warna sekaligus.
Tipe Data JSON
● JSON: Digunakan untuk menyimpan data dalam format JSON (JavaScript
Object Notation).
○ Berguna untuk menyimpan data yang tidak terstruktur atau semi-terstruktur.
NULL
● Dalam MySQL, NULL adalah nilai khusus yang menunjukkan bahwa sebuah
kolom tidak memiliki data atau tidak terdefinisi.
● NULL berbeda dari angka 0, string kosong (''), atau nilai lain.
● NULL secara khusus berarti "tidak ada nilai".
Rangkuman Tipe Data
● Memilih tipe data yang tepat sangat penting untuk mengoptimalkan penyimpanan dan performa database.
Pastikan untuk memilih tipe data yang sesuai dengan jenis informasi yang akan Anda simpan dalam aplikasi
Anda.
● Tipe data numerik digunakan untuk angka (baik bulat maupun desimal).
● Tipe data string digunakan untuk menyimpan teks, dari teks pendek hingga panjang.
● Tipe data waktu dan tanggal digunakan untuk menyimpan informasi terkait waktu dan tanggal.
● Tipe data biner digunakan untuk menyimpan data dalam bentuk biner, seperti file atau gambar.
● Tipe data ENUM dan SET digunakan untuk menyimpan pilihan yang terbatas.
● Tipe data JSON digunakan untuk menyimpan data dalam format JSON.
● NULL adalah nilai khusus yang menunjukkan bahwa sebuah kolom tidak memiliki data atau tidak terdefinisi.
Tabel Management
Table
● Tabel dalam MySQL adalah struktur
yang digunakan untuk menyimpan
data dalam bentuk baris dan kolom.
● Setiap tabel terdiri dari satu atau
lebih kolom yang memiliki tipe data
tertentu dan diatur dalam urutan
tertentu.
● Tabel juga memiliki nama yang
digunakan untuk mengidentifikasi
tabel tersebut.
source: [Link]
Cara melihat seluruh isi tabel
● Untuk melihat seluruh tabel yang ada pada database, kita bisa gunakan
perintah SHOW TABLES;
Cara melihat seluruh isi tabel
Cara melihat informasi tabel
● untuk melihat informasi dari suatu tabel, seperti tipe data, kolom, panjang,
constraint dan lainnya, kita bisa menggunakan perintah:
DESCRIBE nama_tabel
● Atau bisa kita singkat menjadi DESC nama_tabel;
Cara melihat informasi tabel
Cara membuat tabel
● Untuk membuat tabel, kita menggunakan perintah CREATE TABLE.
● Sintaks dasar adalah sebagai berikut:
Cara membuat tabel
Membuat tabel dari hasil select tabel lain
Kita juga membuat tabel berdasarkan hasil select dari tabel lain.
Contoh Membuat tabel dari hasil select tabel lain
Merubah tabel
● Untuk mengubah tabel, kita menggunakan perintah
ALTER TABLE nama_tabel
● Operasi ini memungkinkan berbagai jenis modifikasi seperti:
○ Menambah kolom
○ Menghapus kolom
○ Mengubah definisi kolom (Tipe data, panjang, constraint)
○ Mengganti nama kolom
○ Mengganti nama tabel
Menambahkan kolom
● untuk menambahkan kolom, kita bisa menggunakan kata sintaks:
ALTER TABLE nama_tabel ADD nama_kolom tipe_data [constraint]
● Atau jika kita ingin menambahkan kolom pada posisi tertentu, kita bisa
tambahkan kata kunci AFTER atau FIRST setelah tipe data nya.
Menambahkan kolom
Menghapus kolom
● Untuk menghapus kolom dari
sebuah tabel, kita bisa
menggunakan sintaks:
ALTER TABLE table_name
DROP COLUMN column_name;
Mengubah definisi kolom
● Kita juga bisa mengubah tipe data, panjang, atau constraint pada kolom
yang sudah ada menggunakan kata kunci MODIFY.
● sintaks nya sebagai berikut:
ALTER TABLE table_name
MODIFY column_name new_data_type [constraint];
Mengubah definisi kolom
Mengubah nama kolom
● Untuk mengubah nama kolom,
kita bisa menggunakan kata
kunci:
RENAME COLUMN
old_column TO new_column.
Storage Engine
Apa itu Storage Engine?
● Storage engine adalah cara MySQL menyimpan, mengorganisir, dan
mengelola data dalam tabel.
● Setiap tabel dalam database MySQL memiliki storage engine yang
menentukan bagaimana data ditulis, dibaca, di indeks, dan dipulihkan.
● Secara default, saat kita membuat tabel, maka storage engine nya adalah
InnoDB.
● Namun sebenar nya kita bisa menentukan secara eksplisit storage
engine pada tabel yang kita buat.
Jenis-jenis Storage Engine
● Untuk melihat seluruh storage engine yang tersedia di MySQL, kita bisa
jalan perintah: SHOW ENGINES;
Menentukan Storage Engine
● Menentukan storage engine yang tepat di MySQL bergantung pada jenis
aplikasi dan kebutuhan yang spesifik.
● Setiap engine memiliki kelebihan dan kekurangan, dan pilihan engine
dapat mempengaruhi kinerja serta fungsionalitas database.
● Untuk melihat kelebihan dan kekurangan pada setiap engine, silahkan
lihat selengkap nya disini:
[Link]
● Pada kelas ini kita akan lebih sering menggunakan InnoDB, karena
InnoDB adalah engine yang modern dan umum lebih banyak digunakan.
Contoh membuat storage engine pada tabel
Primary Key
Apa itu primary key?
● Primary Key adalah kolom (atau kumpulan kolom) dalam sebuah tabel yang
digunakan untuk mengidentifikasi setiap baris secara unik.
● Setiap tabel hanya boleh memiliki satu Primary Key, dan nilai di kolom ini:
○ Harus unik (tidak boleh ada duplikat).
○ Tidak boleh kosong (NULL).
Fungsi primary key
● Primary Key memiliki beberapa fungsi penting, diantaranya sebagai berikut:
○ Identifikasi Unik: Membantu membedakan setiap baris dalam tabel.
○ Referensi Antar Tabel: Digunakan sebagai acuan dalam relasi antar
tabel dengan Foreign Key.
○ Optimasi Kinerja: Membantu MySQL mengakses data lebih cepat.
Contoh primary key
● Misalnya kita akan membuat tabel users.
id name email
1 John Doe john@[Link]
2 Jane Smith jane@[Link]
● Pada tabel diatas, kolom id bisa dijadikan Primary Key karena nilainya unik
untuk setiap baris.
Buat primary key
● penulisan PRIMARY KEY bisa dibuat setelah tipe data, atau di akhir baris
setelah definisi semua kolom.
Menambahkan primary key pada tabel yang sudah ada
● Jika tabel sudah terlanjur dibuat
tanpa primary key, kita juga bisa
menambahkan nya dengan cara
berikut.
Primary Key menggunakan composite key
● Composite Key adalah kombinasi
dari dua atau lebih kolom dalam
sebuah tabel yang digunakan
bersama-sama untuk membentuk
sebuah Primary Key.
● Composite Key memastikan bahwa
kombinasi nilai dari kolom-kolom
tersebut unik di seluruh tabel,
meskipun nilai masing-masing
kolom secara individual mungkin
tidak unik.
Insert Data
Cara insert data
● Setelah kita membuat database dan tabel nya, maka sekarang kita sudah
bisa memasukan data ke kedalam tabel yang telah kita buat.
● Untuk menambah data ke dalam tabel,kita bisa menggunakan perintah
INSERT INTO.
● Sintaks dasar adalah:
Cara insert data
Cara insert multiple data
● Selain itu kita bisa melakukan insert pada beberapa data secara sekaligus.
● Untuk sintaks nya seperti ini:
Cara insert multiple data
Constraint
Apa itu constraint?
● Constraint adalah aturan atau batasan yang diterapkan pada kolom dalam
tabel untuk memastikan integritas data.
● Dengan constraint, kita dapat mengontrol jenis data yang diizinkan masuk
ke dalam tabel.
● Mengapa Constraint Penting?
○ Menjaga integritas data – Mencegah data yang tidak valid atau duplikat masuk ke tabel.
○ Meningkatkan akurasi – Data yang tersimpan lebih sesuai dengan aturan yang telah
ditentukan.
○ Mempermudah pengelolaan database – Constraint meminimalkan kemungkinan kesalahan
akibat data yang tidak konsisten.
Jenis-jenis constraint di MySQL
● Terdapat beberapa jenis constraint yang bisa digunakan di MySQL,
diantaranya sebagai berikut:
○ NOT NULL
○ UNIQUE
○ PRIMARY KEY
○ FOREIGN KEY
○ AUTO_INCREMENT
○ DEFAULT
○ CHECK (Mulai Didukung di MySQL 8.0)
NOT NULL
● NOT NULL adalah constraint yang digunakan untuk memastikan suatu
kolom tidak boleh NULL / Kosong.
● Kolom yang diberi constraint ini wajib diisi saat data dimasukkan ke tabel.
● Jika kita mencoba insert data tanpa mengirimkan value pada kolom yang
memiliki constraint NOT NULL, maka akan terjadi error.
Contoh NOT NULL
UNIQUE
● UNIQUE adalah constraint yang digunakan untuk memastikan bahwa nilai
dalam kolom (atau kombinasi kolom) tidak duplikat.
● Constraint UNIQUE ini biasa nya digunakan untuk kolom yang
membutuhkan nilai unik, seperti email atau username.
Contoh UNIQUE
PRIMARY KEY
● Primary key merupakan bagian dari constraint.
● Primary key adalah gabungan dari constraint UNIQUE dan NOT NULL.
● Primary key digunakan untuk kolom yang menjadi identifikasi unik bagi
setiap baris.
Contoh PRIMARY KEY
FOREIGN KEY
● Foreign key digunakan untuk membuat hubungan antara dua tabel.
● Untuk detailnya, ini akan dibahas di materi table relationship.
AUTO_INCREMENT
● AUTO_INCREMENT adalah constraint yang digunakan untuk menghasilkan
nilai unik secara otomatis (increment) di kolom numerik, artinya kita tidak
perlu mengisinya secara manual, karena akan diisi secara otomatis oleh
MySQL berupa angka unik.
● AUTO_INCREMENT Biasanya digunakan untuk membuat kolom dengan
Primary Key.
Contoh AUTO_INCREMENT
AUTO_INCREMENT - LAST_INSERT_ID
● Untuk melihat ID terakhir pada auto increment, kita bisa menggunakan
statement SELECT LAST_INSERT_ID();
DEFAULT
● DEFAULT adalah constraint yang digunakan untuk memberikan nilai default
pada kolom jika tidak ada nilai yang dimasukkan.
● Nilai ini digunakan saat data dimasukkan tanpa memberikan nilai untuk
kolom tersebut.
Contoh DEFAULT
CHECK
● CHECK merupakan constraint yang baru diperkenalkan di MySQL versi 8.0
● CHECK adalah constraint yang digunakan untuk membatasi nilai yang dapat
dimasukkan ke dalam kolom berdasarkan kondisi tertentu.
Contoh CHECK
Comment
Comment / Komentar
● Komentar adalah teks yang ditulis di dalam kode tetapi tidak akan
dieksekusi oleh MySQL.
● Misalnya, kita ingin memberikan informasi, bahwa query tersebut
merupakan query yang kita buat.
● Jika tidak menggunakan komentar, Teks informasi yang berada di baris
pertama akan dianggap sebagai query.
Jenis-jenis comment
● Umum nya, penulisan comment di mysql itu terdapat 2 jenis, yaitu menggunakan single
line comment atau multiline comment.
● Single line comment itu menggunakan simbol -- (strip 2 kali) di awal baris.
● Atau juga bisa menggunakan simbol #
● Sedangkan untuk multiline comment, itu menggunakan simbol /* dan ditutup dengan */
● Perbedaan nya sederhana, single line comment hanya berlaku pada satu baris, jika kita
ingin membuat single line comment untuk beberapa baris, maka kita perlu buat komentar
di baris berikut nya.
● Sedangkan multiline comment, selama teks belum ditutup dengan */ maka itu semua akan
dianggap sebagai comment.
Single Line Comment
Multi Line Comment
Waktu untuk menggunakan komentar
● Teks yang ditulis sebagai komentar, itu memiliki beberapa alasan seperti:
○ Untuk dokumentasi
○ Memberikan penjelasan
○ Menonaktifkan kode sementara (biasa nya untuk proses debugging)
○ Menyimpan Catatan untuk Referensi
○ Dan masih banyak lagi
Waktu untuk menggunakan komentar
Select Data
SELECT
● Query SELECT digunakan untuk mengambil data dari satu atau lebih kolom
dalam suatu tabel.
● Setiap query SELECT memiliki bentuk dasar seperti berikut:
○ kolom1, kolom2, ...: Nama-nama kolom yang ingin diambil dari tabel.
○ nama_tabel: Nama tabel yang ingin di-query.
SELECT
Asterisk symbol
● Alih-alih melakukan select pada setiap kolom, kita bisa menggunakan
simbol asterisk (*) untuk memilih semua kolom.
Asterisk symbol
SELECT tanpa FROM
● Kita bisa membuat SELECT statement tanpa clause FROM.
● Artinya, SELECT statement tidak melulu mengambil data pada tabel,
melainkan bisa mengambil atau menampilkan data apapun.
● Contoh nya untuk operasi aritmatika sederhana, menyeleksi waktu saat ini,
menggabungkan beberapa teks, dan beberapa hal lainnya.
SELECT tanpa FROM
Hasil SELECT bisa dijadikan table
● Hasil query SELECT, itu akan berbentuk tabel.
● Kita bisa gunakan tabel result itu sebagai table baru.
Hasil SELECT bisa dijadikan table
Sorting
ORDER BY
● Ketika kita mengambil data menggunakan select statement, maka urutan
data yang ditampilkan tidak menentu.
● Untuk mengurutkan data yang ditampilkan menggunakan statement select,
kita bisa menggunakan sebuah klausa yaitu ORDER BY.
ORDER BY
ORDER BY pada beberapa kolom
Filtering
Where
● WHERE adalah klausa yang digunakan untuk menyaring baris data dalam
tabel berdasarkan kondisi tertentu.
● Klausa ini digunakan bersama perintah SQL seperti SELECT, UPDATE,
DELETE, dan lainnya untuk memastikan hanya data yang sesuai dengan
kriteria tertentu yang diproses.
Struktur dasar Where
Operator yang Didukung dalam WHERE
● SELECT untuk memilih kolom kolom mana yang akan dipilih.
● FROM untuk memilih di tabel mana data ingin dicari.
● Condition/kondisi adalah kombinasi satu atau lebih ekspresi yang
menggunakan operator logika, perbandingan dan operator lainnya.
● Jika kondisi bernilai benar (true) maka statement selanjut nya akan
dieksekusi.
Operator Perbandingan
Operator Deskripsi Contoh
= Sama dengan WHERE age = 25
!= atau <> Tidak sama dengan WHERE age != 25
> Lebih besar WHERE salary > 5000
< Lebih kecil WHERE salary < 5000
>= Lebih besar atau sama dengan WHERE age >= 18
<= Lebih kecil atau sama dengan WHERE age <= 18
Contoh Where dengan operasi perbandingan
Operator Logika
Operator Deskripsi Contoh
AND Semua kondisi harus benar WHERE age > 25 AND city =
'Jakarta'
OR Salah satu kondisi benar WHERE age < 18 OR city =
'Bandung'
NOT Membalikkan kondisi WHERE NOT (city = 'Jakarta')
Contoh Where dengan Operator Logika
Operator Lainnya
Operator Deskripsi Contoh
LIKE Mencari berdasarkan pola WHERE firstName LIKE ‘%s’
BETWEEN Rentang nilai WHERE age BETWEEN 18 AND 25
IN Sesuai dengan salah satu nilai WHERE city IN ('Jakarta',
'Surabaya')
IS NULL Nilai kosong WHERE email IS NULL
IS NOT NULL Nilai tidak kosong WHERE email IS NOT NULL
Operator LIKE
● Operator LIKE adalah operator yang digunakan untuk mencocokkan pola
teks dalam query SQL.
● Operator ini sangat berguna saat kita tidak mengetahui seluruh nilai yang
ingin dicari, tetapi kita tahu sebagian atau pola tertentu dari data tersebut.
● Berikut adalah sintaks penggunaan LIKE:
expression LIKE pattern ESCAPE escape_character
● Dalam sintaks diatas, jika ekspresi cocok dengan pola, operator LIKE akan
mengembalikan nilai 1 (TRUE). Jika tidak, maka akan mengembalikan nilai
0 (FALSE).
Operator LIKE - Wildcard
● Wildcards adalah simbol yang digunakan untuk mewakili pola tertentu dalam
teks.
● MySQL menyediakan dua karakter wildcard yaitu:
% (persen) dan _ (underscore)
● Persen untuk Mewakili nol atau lebih karakter apa pun.
● Underscore untuk mewakili tepat satu karakter.
Operator LIKE - Persent
Operator LIKE - Underscore
Operator LIKE - Case Sensitive
● Secara default, operator LIKE tidak membedakan huruf besar/kecil
(case-insensitive), tergantung pada collation kolom.
● Jika kita membutuhkan pencarian dengan case-sensitive, gunakan kata
kunci yaitu BINARY
Operator LIKE - Case Sensitive
Operator LIKE - Escaping
● Kadang-kadang mungkin akan ada data yang nilai nya berisi simbol wildcard
seperti % dan _.
● Untuk mengatasi masalah tersebut, kita bisa menggunakan escape, yaitu
menjadikan % dan _ sebagai teks biasa.
● Untuk melakukannya, kita bisa gunakan karakter escape (\).
Operator LIKE - Escaping
Operator BETWEEN
● Operator BETWEEN digunakan untuk menentukan apakah suatu nilai
berada dalam suatu rentang atau tidak.
● Sintaks nya seperti berikut:
value BETWEEN low AND high;
● dan untuk mencari data yang TIDAK berada pada rentang, kita bisa
menggunakan NOT BETWEEN.
Operator BETWEEN
Operator IN
● Operator IN digunakan untuk menentukan apakah suatu nilai berada di
dalam daftar nilai atau tidak.
● Sintaks nya seperti berikut:
value IN (value1, value2, value3,...)
Operator IN
Operator IS NULL dan IS NOT NULL
● Ada kemungkinan baris pada suatu kolom tidak ada nilai nya, alias NULL.
● Untuk memeriksa apakah suatu data itu NULL atau tidak, kita bisa
menggunakan operator IS NULL dan IS NOT NULL.
● IS NULL untuk data yang NULL
● IS NOT NULL untuk data yang tidak NULL
Operator IS NULL dan IS NOT NULL
LIMIT
● LIMIT adalah klausa dalam MySQL yang digunakan untuk membatasi
jumlah baris yang dikembalikan oleh sebuah query.
● Klausa ini sangat berguna saat kita hanya ingin mengambil sebagian data,
seperti untuk keperluan pagination, laporan, atau analisis.
● Sintaks:
SELECT column_name(s) FROM table_name LIMIT [offset], row_count;
● Atau bisa juga ditulis tanpa offset:
SELECT column_name(s) FROM table_name LIMIT row_count;
● row_count: Jumlah maksimum baris yang ingin dikembalikan.
offset: Posisi awal dari baris yang ingin diambil (opsional).
Contoh LIMIT
SELECT DISTINCT
● SELECT DISTINCT digunakan untuk mengambil data unik (tidak duplikat)
dari suatu kolom atau kombinasi kolom di tabel.
● Dengan kata lain, jika terdapat baris dengan nilai yang sama di kolom
tertentu, maka hanya satu dari nilai tersebut yang akan ditampilkan dalam
hasil query.
Contoh SELECT DISTINCT
Modify Data
UPDATE
● Operasi UPDATE digunakan untuk memperbarui data yang sudah ada
dalam tabel.
● Berikut adalah sintaks nya:
UPDATE nama_tabel SET kolom1 = nilai1, kolom2 = nilai2, … WHERE kondisi;
● Kita bisa mengupdate beberapa kolom secara sekaligus.
● PENTING! untuk selalu gunakan klausa WHERE, karena jika tidak, maka kita akan
mengubah seluruh data yang ada di dalam tabel tersebut.
Contoh UPDATE
DELETE
● Operasi DELETE digunakan untuk menghapus data dari tabel.
● Berikut adalah sintaks nya:
DELETE FROM nama_tabel WHERE kondisi;
● PENTING! untuk selalu gunakan klausa WHERE, karena jika tidak, maka kita akan
menghapus seluruh data yang ada di dalam tabel tersebut.
● Namun, MySQL memiliki fitur safe mode, dimana ketika safe mode ini aktif, maka kita
tidak bisa melakukan DELETE tanpa WHERE, karena hal itu dianggap berbahaya.
● Jika kita memang benar-benar butuh menggunakan DELETE tanpa WHERE untuk
membersihkan data misal nya, maka safe mode nya perlu di nonaktifkan.
● SET SQL_SAFE_UPDATES = 0;
Contoh DELETE
Contoh DELETE tanpa WHERE
TRUNCATE
● TRUNCATE adalah perintah yang digunakan untuk menghapus semua baris
(data) dalam sebuah tabel secara permanen dengan cara yang sangat
cepat dan efisien.
● Sebenar nya, untuk menghapus seluruh data, kita juga bisa menggunakan
DELETE tanpa WHERE. ()
● Salah satu yang menjadi alasan kuat untuk menggunakan TRUNCATE
dalam menghapus seluruh data adalah, TRUNCATE akan mereset
AUTO_INCREMENT, sedangkan DELETE itu tidak.
Contoh TRUNCATE
Alias
Alias
● Alias adalah nama sementara yang digunakan untuk kolom atau tabel dalam
query SQL
● membantu untuk memberikan nama yang lebih mudah dibaca atau lebih
deskriptif, terutama ketika kolom atau tabel yang digunakan memiliki nama
yang panjang atau rumit.
● Alias tidak mengubah nama asli kolom atau tabel di database, melainkan
hanya digunakan dalam konteks query yang sedang dijalankan.
● Kita bisa memberikan nama alias terhadap kolom maupun tabel.
● Untuk menggunakan alias, kita bisa menggunakan kata kunci AS.
Alias Kolom
● alias untuk kolom digunakan untuk memberikan nama sementara pada
kolom hasil query.
● Hal ini berguna jika kita ingin memberikan nama yang lebih deskriptif atau
lebih pendek untuk kolom tertentu dalam hasil query.
● Sintaks:
SELECT column_name AS alias_name FROM table_name;
● Jika nama alias mengandung spasi, kita bisa menggunakan tuliskan alias
tersebut di dalam Backticks, kutip dua atau kutip satu: `alias name`
Contoh Kasus penggunaan Alias pada kolom
● Misalnya kita ingin menampilkan nama
lengkap dari data employees
● Karena table employees tidak memiliki
kolom fullName, kita akan coba
menggabungkan data kolom firstName
dan lastName menggunakan fungsi
CONCAT_WS().
● Hasilnya, kolom pada hasil query tidak
informatif.
● Disinilah kita bisa menggunakan alias
pada nama kolom tersebut.
Contoh Kasus penggunaan Alias pada kolom
Alias Table
● Alias untuk tabel digunakan ketika kita nanti bekerja dengan banyak tabel
dalam query (misalnya dalam JOIN), dan kita ingin membuat referensi tabel
lebih singkat dan lebih mudah dibaca.
● Sintaks:
SELECT column_name
FROM table_name AS alias_name;
Contoh Alias Table
Function
Apa itu function?
● Mirip seperti di bahasa pemrograman komputer seperti C++, Java, PHP, Python
dan sebagainya, MySQL juga memiliki sebuah function.
● Sederhana nya, function adalah sebuah kode yang telah disediakan (built-in) atau
bisa kita buat sendiri untuk mengerjakan tugas tertentu agar menjadi lebih mudah.
● Untuk function yang dibuat sendiri itu akan dibahas di materi terpisah, yaitu
mengenai stored function.
● Function biasa nya digunakan untuk melakukan operasi pada data dalam tabel,
baik untuk keperluan manipulasi, perhitungan, atau pengambilan informasi.
● Secara tidak sadar, sebelum nya kita sudah menggunakan salah satu fungsi untuk
menggabungkan 2 buah nilai teks, yaitu CONCAT_WS()
Kategori Function di MySQL
Function Penggunaan Contoh
Numeric Function Digunakan untuk melakukan operasi DIV, MOD, *, +, ABS(), ROUND(),
terhadap data angka. FLOOR(), CEIL(), MOD()
String Function Digunakan untuk memanipulasi data CONCAT(), SUBSTRING(), UPPER(),
berbentuk teks. LOWER(), TRIM(), CONCAT_WS()
Date and Time Function Digunakan untuk menangani data NOW(), CURDATE(), DATE_ADD(),
tanggal dan waktu. DATEDIFF()
Aggregate Function Digunakan untuk melakukan perhitungan COUNT(), SUM(), AVG(), MAX(), MIN()
terhadap sekumpulan data.
Control Flow Function Digunakan untuk membuat logika kondisi IF(), CASE
di dalam SQL.
Numeric Function
Numeric Function
● Numeric function adalah sebuah cara untuk melakukan operasi terhadap
data yang berupa angka.
● Ada banyak numeric function yang bisa digunakan di MySQL dan terbagi
menjadi 2 kategori, yaitu Arithmetic Operator dan Mathematical Operator.
● [Link]
Arithmetic Operator
source: [Link]
Contoh penggunaan Arithmetic Operator
Menghitung total harga dari setiap order
Contoh penggunaan Arithmetic Operator
Menghitung Selisih Antara Harga Jual dan Harga Beli
Contoh penggunaan Arithmetic Operator
Menghitung jumlah paket dan sisa barang
Mathematical Function
● Mathematical functions adalah fungsi bawaan MySQL yang digunakan untuk
melakukan perhitungan matematis.
● Fungsi ini sangat berguna untuk operasi seperti penjumlahan, pengurangan,
penghitungan nilai absolut, pembulatan angka, trigonometri, logaritma, dan
lain sebagainya.
● Mathematical functions sering digunakan untuk manipulasi data numerik di
dalam query SQL.
● Ada banyak sekali mathematical function yang tersedia di MySQL, silahkan
lihat selengkap nya disini:
[Link]
Kategori Mathematical Functions
● Mathematical functions di MySQL dapat dibagi menjadi beberapa kategori
berdasarkan fungsinya:
○ Fungsi Aritmatika Dasar
○ Fungsi Pembulatan dan Pemformatan
○ Fungsi Nilai Mutlak dan Eksponensial
○ Fungsi Trigonometri
○ Fungsi Akar Kuadrat dan Logaritma
Contoh penggunaan Mathematical Operator
Membulatkan harga MSRP pada tabel products ke bilangan bulat terdekat, ke atas, dan ke bawah.
Contoh penggunaan Mathematical Operator
Menghitung akar kuadrat dari MSRP pada tabel products.
Contoh penggunaan Mathematical Operator
Menghitung MSRP dipangkatkan 2 dan dipangkatkan 3.
String Function
String function
● String functions di MySQL adalah fungsi bawaan yang digunakan untuk
memanipulasi, memodifikasi, dan menganalisis string (teks).
● Fungsi-fungsi ini sangat berguna dalam pengolahan teks, seperti
memformat output, mencari teks tertentu, mengganti teks, dan lainnya.
● Ada banyak sekali String function yang disediakan oleh MySQL, selengkap
nya bisa lihat disini:
[Link]
Contoh String function (CONCAT)
Contoh String function (UPPER)
Date Time Function
Date Time Function
● MySQL menyediakan sejumlah fungsi untuk menangani data bertipe tanggal
dan waktu (DATE, TIME, DATETIME, TIMESTAMP, dll).
● Fungsi ini biasa nya digunakan untuk mengambil data pada waktu saat ini,
melakukan perhitungan tanggal dan waktu, dan masih banyak lagi.
● Lihat selengkap nya disini:
[Link]
Contoh Date and Time Function
Fungsi untuk Mendapatkan Tanggal dan Waktu Saat Ini
Contoh Date and Time Function
Mengubah format tanggal
Contoh Date and Time Function
Fungsi Manipulasi Tanggal
Aggregate Function
Aggregate Function
● Aggregate Functions adalah fungsi yang digunakan untuk melakukan
kalkulasi pada sekumpulan data dalam satu atau lebih baris, dan
mengembalikan hasil tunggal.
● Fungsi ini sering digunakan bersama dengan klausa GROUP BY untuk
menghasilkan laporan yang terorganisir.
● Lihat selengkap nya disini:
[Link]
Contoh Aggregate Function
Menghitung jumlah produk dalam tabel products
Contoh Aggregate Function
Menghitung total dari semua nilai dalam kolom tertentu.
Contoh Aggregate Function
Menghitung rata-rata harga beli produk (buyPrice) dari tabel products:
Contoh Aggregate Function
Control Flow Function
Control Flow Function
● Control Flow Functions adalah fungsi dalam MySQL yang digunakan untuk
mengontrol alur logika dalam sebuah query.
● Fungsi-fungsi ini memungkinkan kita untuk melakukan evaluasi kondisi
tertentu, memilih nilai berdasarkan kondisi, atau membuat logika lebih
dinamis.
● Selengkap nya disini:
[Link]
Contoh Control Flow Function (IF)
Contoh Control Flow Function (CASE)
Grouping
GROUP BY
● GROUP BY adalah perintah di MySQL yang digunakan untuk
mengelompokkan baris yang memiliki nilai yang sama dalam satu kolom.
● Setelah dikelompokkan, kita bisa menghitung sesuatu dalam setiap
kelompoknya.
Analogi 1
No Nama Pelanggan Makanan Harga
1 Andi Nasi Goreng 20,000
2 Budi Mie Ayam 15,000
3 Andi Ayam Bakar 25,000
4 Citra Soto 18,000
5 Budi Nasi Goreng 20,000
Kalau kita ingin tahu berapa total belanja setiap pelanggan, kita bisa mengelompokkan (GROUP BY)
berdasarkan nama pelanggan dan menjumlahkan (SUM()) harga makanannya.
Analogi 1
No Nama Pelanggan Total Belanja
1 Andi 45,000
2 Budi 35,000
3 Citra 18,000
Analogi 2
Nama Siswa Kelas
Andi 10A
Budi 10B
Citra 10A
Deni 10B
Evi 10A
Sekarang, kita ingin tahu berapa banyak siswa di setiap kelas.
Jika tanpa GROUP BY kita perlu menghitung nya secara manual.
Analogi 2
Kelas Jumlah Siswa
10A 3
10B 2
Sintaksis GROUP BY
● kolom1, kolom2: Kolom yang digunakan untuk mengelompokkan data.
● AGGREGATE_FUNCTION(kolom3): Fungsi agregat seperti SUM(), AVG(), dll.
● GROUP BY kolom1, kolom2: Mengelompokkan data berdasarkan kolom tertentu.
Contoh Penggunaan GROUP BY
Misalnya kita ingin tahu jumlah pesanan berdasarkan status pesanan dari tabel orders:
HAVING
● HAVING digunakan untuk menyaring hasil setelah GROUP BY dilakukan.
● Sekilas memang terdengar mirip seperti WHERE clause, namun sebenar
nya berbeda.
● WHERE digunakan untuk menyaring baris individu sebelum data
dikelompokkan.
● Sedangkan HAVING digunakan untuk menyaring kelompok data setelah
GROUP BY.
Contoh penggunaan HAVING
Table Relationship
RDBMS
● MySQL itu adalah database dengan jenis RDBMS (Relational Database
Management System).
● Artinya, MySQL adalah sebuah database yang menyimpan data dalam
bentuk tabel, di mana data dalam tabel-tabel tersebut bisa dihubungkan satu
sama lain dengan menggunakan relasi.
● Walaupun kita bisa saja membuat database tanpa membuat relasi antar
tabel, namun akan sia-sia jika kita menggunakan RDBMS tanpa
menggunakan fitur utama nya, yaitu relasi.
● Terdapat beberapa jenis relasi antar tabel yang umum digunakan, yaitu
One-to-One, One-to-Many, dan Many-to-Many
Contoh nyata
● Misalnya kita memiliki database rumah
sakit, yang mana di dalam database
tersebut terdapat tabel dokter dan
pendaftaran.
● Tabel dokter berisi kolom: id, nama,
spesialis, email, dll.
● Tabel pendaftaran berisi: id, nik, nama
calon pasien, dokter pemeriksa, dll.
● Tabel pendaftaran itu memiliki hubungan
dengan tabel dokter, karena terdapat
kolom di tabel pendaftaran yang
membutuhkan data dokter.
Foreign Key
● Pada contoh sebelumnya, tabel pendaftaran itu memiliki relasi dengan tabel
dokter.
● Dimana kolom dokter_pemeriksa pada tabel pendaftaran itu mengacu
(referensi) pada kolom id (primary key) di tabel dokter.
● Jadi, sederhana nya foreign key adalah sebuah kolom yang mengacu pada
kolom primary key di tabel lain.
● Foreign key bisa lebih dari satu. Semisal nya kita menambahkan kolom
poliklinik di tabel pendaftaran, maka kolom tersebut menjadi foreign key
terhadap primary key di tabel poliklinik.
Jika tanpa Foreign Key
● Sebenarnya, kita bisa saja membuat tabel pendaftaran tanpa membuat
foreign key nya.
● Namun yang terjadi adalah sebagai berikut:
○ Data menjadi tidak konsisten.
Misal nya, data A pada pendaftaran menggunakan data dokter B, ketika data dokter B
dihapus dari tabel dokter, maka field dokter_pemeriksa pada data A menjadi tidak valid
(karena dokter B tidak ditemukan di tabel dokter).
○ Tidak ada validasi otomatis.
Misal nya kita ingin membuat data pendaftaran, namun pada kolom dokter_pemeriksa kita
memasukan dokter Z, yang mana dokter Z itu tidak ada di tabel dokter.
Kelebihan Foreign Key
● Dengan menerapkan foreign key, semua masalah yang telah disebutkan
sebelumnya akan teratasi.
● Misal nya, ketika data B di tabel dokter itu digunakan oleh data A di tabel
pendaftaran, maka kita tidak bisa menghapus data B di tabel dokter.
● Kemudian, ketika kita membuat data pendaftaran yang baru, jika kita
memasukan nilai yang tidak ada di tabel dokter pada kolom dokter_periksa,
maka pembuatan data tidak bisa dilakukan.
Ilustrasi
Kode Dokter Nama Dokter Spesialisasi Email
A001 Dr. Andi Mata andi@[Link] Tidak bisa dihapus
A002 Dr. Budi Penyakit Dalam budi@[Link]
A003 Dr. Citra Kandungan citra@[Link]
NIK Nama Alamat Dokter Pemeriksa
Tidak ada dokter A005
B001 Anton Jakarta A001
B002 Siska Bandung A002
B003 Joni Surabaya A005
Membuat Foreign Key
Simulasi Foreign Key
Simulasi Foreign Key
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails
(`belajar_mysql`.`pendaftaran`, CONSTRAINT `pendaftaran_ibfk_1` FOREIGN KEY
(`dokter_pemeriksa`) REFERENCES `dokter` (`kode_dokter`))
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails
(`belajar_mysql`.`pendaftaran`, CONSTRAINT `pendaftaran_ibfk_1` FOREIGN KEY
(`dokter_pemeriksa`) REFERENCES `dokter` (`kode_dokter`))
Opsi Foreign Key
● Sebelumnya kita sudah praktekan bagaimana cara kerja dari Foreign key,
dimana ketika suatu suatu kolom memiliki referensi ke tabel lain, maka kita
bisa sembarang menghapus nya.
● Secara default, memang opsi foreign key itu bersifat RESTRICT, artinya
MySQL menerapkan aturan yang ketat terhadap data yang memiliki relasi
dengan tujuan konsistensi.
● Namun di MySQL kita bisa mengubah opsi tersebut. Terdapat beberapa opsi
lainnya yang bisa kita terapkan, di antara nya:
RESTRICT, CASCADE, NO ACTION, dan SET NULL
ON DELETE dan ON UPDATE pada Foreign Key
● Saat membuat foreign key, kita dapat menambahkan ON DELETE dan ON
UPDATE untuk menentukan tindakan saat terjadi penghapusan atau
pembaruan pada data di tabel induk.
● Misalnya, jika kita punya tabel dokter dan tabel pendaftaran, lalu kita ingin
mengatur bagaimana data di tabel pendaftaran bereaksi ketika data di tabel
dokter dihapus atau diperbarui.
CASCADE
● Jika data di tabel parent dihapus (ON DELETE CASCADE), maka semua
data terkait di tabel child juga akan ikut dihapus.
● Jika data di tabel parent diperbarui (ON UPDATE CASCADE), maka semua
data terkait di tabel child juga akan ikut diperbarui.
● Opsi ini berguna jika kita ingin semua data terkait ikut diperbarui atau
dihapus secara otomatis.
Contoh CASCADE
RESTRICT (Default)
● Mencegah penghapusan atau pembaruan jika ada data terkait di tabel child.
● Opsi ini berguna jika kita ingin memastikan bahwa data di tabel parent tidak
bisa dihapus atau diperbarui selama masih ada data yang merujuk ke
dalamnya.
Contoh RESTRICT (Default)
NO ACTION
● Pada engine InnoDB, NO ACTION mirip dengan RESTRICT.
● Namun berbeda jika tabel menggunakan engine seperti NDBCluster, dimana
pemeriksaan akan dilakukan setelah proses commit dilakukan pada
transaksi (Materi transaksi akan dibahas terpisah).
Contoh NO ACTION
SET NULL
● Jika data di tabel parent dihapus atau diperbarui, maka nilai foreign key di
tabel child akan diubah menjadi NULL.
● Ini akan berguna jika kita ingin menghapus referensi tanpa menghapus data
di tabel child.
Contoh SET NULL
Relasi One-to-One
One-to-One
● Relasi One-to-One terjadi ketika satu record dalam tabel A berhubungan
dengan tepat satu record dalam tabel B.
● Setiap baris dalam tabel A memiliki hanya satu baris terkait di tabel B, dan
sebaliknya.
● Contoh kasus, misal nya kita memiliki 2 tabel, yaitu tabel user dan tabel
credential (username, password, dll).
● Dimana, satu credential itu hanya dimiliki oleh satu user.
Diagram One-to-One
Membuat One-to-One
Relasi One-to-Many
One-to-Many
● Relasi One-to-Many terjadi ketika satu record dalam tabel A berhubungan
dengan banyak record di tabel B
● Sebagai contoh, seorang penulis dapat menulis banyak artikel, tetapi
setiap artikel hanya memiliki satu penulis.
Diagram One-to-Many
Membuat One-to-Many
Relasi Many-to-Many
Many-to-Many
● Relasi Many-to-Many terjadi ketika banyak record dalam tabel A
berhubungan dengan banyak record di tabel B
● Sebagai contoh, seorang siswa bisa mengikuti banyak mata pelajaran,
dan setiap mata pelajaran bisa diikuti oleh banyak siswa.
● Untuk relasi Many-to-Many, kita memerlukan tabel ketiga, yang sering
disebut sebagai tabel penghubung atau junction table
● Tabel ini menyimpan pasangan ID dari kedua tabel yang terhubung.
Diagram Many-to-Many
Membuat Many-to-Many
Join
Apa itu join?
● JOIN adalah operasi yang digunakan untuk menggabungkan data dari dua
atau lebih tabel berdasarkan hubungan di antara tabel-tabel tersebut.
● Biasanya, tabel-tabel yang di-join memiliki kolom yang saling
berhubungan, seperti ID atau kunci utama (primary key) yang
berpasangan dengan kunci asing (foreign key).
● Terdapat beberapa jenis join yang tersedia di MySQL, diantaranya:
INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN
INNER JOIN
● INNER JOIN mengembalikan
hanya data yang memiliki
kecocokan (match) antara dua
tabel yang digabungkan.
● Artinya, hanya baris yang ada di
kedua tabel yang memiliki
pasangan yang akan ditampilkan.
Contoh INNER JOIN
Kita ingin menampilkan daftar pelanggan beserta pesanan mereka.
LEFT JOIN
● LEFT JOIN mengembalikan
semua data dari tabel kiri (tabel
pertama) dan data yang cocok
dari tabel kanan (tabel kedua)
● Jika tidak ada kecocokan, maka
kolom dari tabel kanan akan berisi
NULL.
Contoh LEFT JOIN
LEFT JOIN mengembalikan semua pelanggan meskipun mereka tidak memiliki pesanan.
RIGHT JOIN
● RIGHT JOIN hampir sama
dengan LEFT JOIN, tetapi
mengembalikan semua data dari
tabel kanan (tabel kedua) dan
data yang cocok dari tabel kiri
(tabel pertama).
● Jika tidak ada kecocokan, kolom
dari tabel kiri akan berisi NULL.
Contoh RIGHT JOIN
CROSS JOIN
● CROSS JOIN adalah tipe join yang
digunakan untuk menggabungkan
setiap baris dari satu tabel dengan
setiap baris dari tabel lain, tanpa ada
kondisi tertentu.
● Artinya, setiap baris dari tabel pertama
akan digabungkan dengan setiap baris
dari tabel kedua.
● Jika tabel pertama memiliki n baris dan
tabel kedua memiliki m baris, maka
hasil dari CROSS JOIN akan memiliki n
* m baris.
Contoh CROSS JOIN (Persiapan)
Contoh CROSS JOIN (2)
Subquery
Apa itu subquery?
● Subquery (query dalam query) adalah query yang ditempatkan di dalam
query lain, baik di dalam klausa SELECT, FROM, WHERE, atau HAVING.
● Subquery berfungsi untuk mengambil data yang kemudian digunakan oleh
query utama.
● Query yang memiliki query disebut sebagai outer query, sedangkan query
yang berada di dalam outer query disebut sebagai inner query.
● Untuk membuat query didalam query, inner query harus dibungkus
kedalam buka tutup kurung.
Contoh Subquery
● Kita akan mendapatkan data karyawan yang lokasi kerja nya di USA
Subquery di WHERE clause
● Kita akan mencari data pembayaran yang tertinggi.
Subquery di FROM
● Digunakan untuk mengambil hasil sementara yang kemudian digunakan
oleh query utama.
● Hasil dari subquery dianggap sebagai tabel sementara.
Set Operator
Set operator
● Set Operator di MySQL digunakan untuk menggabungkan hasil dari dua atau
lebih query SELECT.
● Set operator memungkinkan kita untuk melakukan operasi antara hasil dua
query seperti menggabungkan, mencari irisan, atau mencari perbedaan antara
hasil query tersebut.
● MySQL menyediakan beberapa set operator yang umum digunakan:
○ UNION
○ UNION ALL
○ INTERSECT (Tidak support di MySQL)
○ EXCEPT (Tidak support di MySQL)
Persiapan Data
UNION
● Operator UNION digunakan
untuk menggabungkan hasil dari
dua atau lebih query SELECT.
● Hasil dari kedua query ini akan
digabungkan menjadi satu set,
namun hanya akan menyertakan
nilai yang unik (tanpa duplikasi).
● Jika ingin menampilkan seluruh
nya, walau ada duplikasi, kita
bisa menggunakan UNION ALL
Contoh kasus
● Anggap saja karyawan di perusahaan kita itu terdiri dari 2 team, yaitu
team_a dan team_b.
● Kemudian kita akan buat dua tabel tersebut, dimana anggota team_a
bisa saja bagian team_b dan sebalik nya.
● Suatu ketika, direktur perusahaan kita meminta seluruh data karyawan.
● Disinilah kita membutuhkan operator UNION.
Contoh kasus (Implementasi)
Contoh kasus UNION ALL
Transaction
Transaction
● Transaction adalah serangkaian operasi database yang dikelompokkan
sebagai satu unit kerja yang harus dieksekusi secara penuh atau tidak sama
sekali.
● Jika satu perintah dalam transaksi gagal, maka semua perintah dalam
transaksi akan dibatalkan (rollback) agar database tetap dalam keadaan
konsisten.
● Contoh transaksi dalam dunia nyata adalah saat melakukan transfer uang
antar rekening.
● Jika salah satu langkah dalam proses transfer gagal (misalnya, saldo penerima
tidak bertambah), maka transaksi harus dibatalkan agar saldo pengirim tidak
berkurang secara sepihak.
Contoh kasus jika tidak menggunakan transaction
Apa yang jadi masalah?
● Jika kita perhatikan saat query update pertama berhasil, dimana saldo
akun A001 milik Joni sudah berkurang.
● Harus nya, update saldo pada akun A002 milik jeni bertambah.
● Namun sebelum proses update saldo milik jeni, seketika koneksi
terputus, yang mengakibatkan saldo jeni tidak bertambah.
● Sehingga bisa dikatakan uang 50 ribu yang dipotong dari saldo joni
hilang begitu saja.
● Inilah kenapa MySQL memiliki fitur transaction, tujuan nya, agar data
tetap aman walaupun mungkin akan terjadi suatu insiden.
Perintah Transaction
● Untuk membuat transaction, kita bisa awal dengan perintah
START TRANSACTION;
● Kemudian kita bisa tulis query yang ingin dijalankan.
● Di bagian akhir, tambahkan COMMIT untuk menyimpan hasil nya secara
permanen.
● Atau kita bisa tuliskan ROLLBACK di bagian akhir secara eksplisit.
Contoh Penggunaan Transaction
Locking
Race Condition
● Race Condition pada Database adalah situasi ketika dua atau lebih
transaksi mengakses dan mengubah data yang sama secara
bersamaan, sehingga hasil akhirnya tidak bisa diprediksi atau
menyebabkan inkonsistensi data.
● Kondisi ini dapat menyebabkan nilai data menjadi kacau, bahkan
menyebabkan kegagalan sistem.
Diagram Race Condition
Solusi Race Condition
● Untuk mengatasi masalah Race Condition, kita bisa menggunakan fitur
Locking yang telah disediakan DBMS.
● Sederhana nya Locking adalah mekanisme untuk mengunci data agar
tidak bisa diubah oleh transaksi lain sebelum transaksi sebelumnya
selesai.
Level Locking
● Table-Level Locking
○ Digunakan oleh storage engine seperti MyISAM.
○ MyISAM mengunci tabel secara keseluruhan untuk operasi baca dan tulis.
● Row-Level Locking
○ Digunakan oleh storage engine seperti InnoDB.
○ InnoDB mendukung row-level locking untuk memastikan efisiensi dalam lingkungan
dengan transaksi bersamaan yang tinggi.
Table-Level Locking
● Locking yang berlaku untuk seluruh tabel.
● Artinya ketika menggunakan locking level ini, operasi seperti seperti UPDATE,
DELETE, di sebuah tabel akan dikunci.
● Misal nya, user 1 mengubah data di tabel accounts, maka tabel accounts akan di
lock, artinya user 2 tidak dapat melakukan operasi terhadap tabel yang telah di
lock oleh user 1
● user 2 akan terus menunggu, hingga user 1 melepaskan kunci nya.
● Proses locking nya bisa kita atur menggunakan kata kunci READ atau WRITE
Jenis-jenis Locking pada Tabel-level Locking
● READ LOCK (Shared Lock)
Membatasi akses tulis ke tabel.
Banyak transaksi dapat membaca tabel, tetapi tidak ada transaksi lain yang
dapat menulis ke tabel selama lock berlangsung.
● WRITE LOCK (Exclusive Lock)
Membatasi akses baca dan tulis.
Transaksi lain tidak dapat membaca maupun menulis selama lock ini diterapkan.
Simulasi Tabel-level Locking
● Kita akan membuat 2 sesi koneksi, anggap saja 2 sesi tersebut adalah user
yang melakukan aksi secara bersamaan.
● Jalankan terminal/cmd: mysql -u <username> -p
● user_1 mengunci tabel accounts untuk menambahkan data.
● user_2 melakukan select data di tabel accounts.
● user_2 harus menunggu pada query nya hingga user_1 melepaskan kunci nya.
Simulasi Tabel-level Locking
Row-level Locking
● Pada Row-Level Locking (RLL), locking diterapkan pada baris tertentu
saja, sehingga memungkinkan operasi bersamaan pada baris yang
berbeda dalam tabel yang sama.
● Misal nya, kita merubah email pada data milik jeni di table accounts,
maka data joni akan di lock.
● Sehingga jika ada user lain yang ingin mengubah atau menghapus data
milik jeni, maka user tersebut harus menunggu, sampai transaction nya
selesai atau proses COMMIT.
Contoh Row-level Locking
FOR UPDATE digunakan untuk mengunci data A001 dan A002
Alur kerja Locking
Row-level Locking
● Pada Row-Level Locking (RLL), locking diterapkan pada baris tertentu
saja, sehingga memungkinkan operasi bersamaan pada baris yang
berbeda dalam tabel yang sama.
● Misal nya, kita merubah email pada data milik jeni di table accounts,
maka data joni akan di lock.
● Sehingga jika ada user lain yang ingin mengubah atau menghapus data
milik jeni, maka user tersebut harus menunggu, sampai transaction nya
selesai atau proses COMMIT.
Deadlock
● Deadlock adalah suatu kondisi di
mana dua atau lebih transaksi
saling mengunci satu sama lain
sehingga mereka tidak bisa
melanjutkan eksekusinya.
● Akibatnya, sistem terjebak dalam
keadaan saling menunggu yang
tidak dapat diselesaikan.
Simulasi Deadlock
Temporary Table
Temporary Table
● Di MySQL, kita bisa membuat tabel sementara untuk menyimpan
kumpulan hasil sementara, yang digunakan beberapa kali dalam satu sesi.
● Tabel ini akan dihapus setelah sesi koneksi berakhir atau menghapusnya
secara eksplisit menggunakan
DROP TEMPORARY TABLE <nama tabel>.
● Untuk cara membuat nya sendiri itu sama seperti tabel pada umum nya,
hanya menggunakan kata kunci TEMPORARY:
CREATE TEMPORARY TABLE …
Contoh membuat Temporary Table
Temporary tabel untuk menampung result sementara
Derived Table
Derived Table
● Derived Table adalah tabel sementara yang dibuat langsung dari subquery
di dalam perintah SQL.
● Ketika kita membuat subquery pada FROM clause, maka hasil nya itu
disebut sebagai Derived Table.
Contoh Kasus menggunakan Derived Table
● Tampilkan daftar customer yang memiliki total pembayaran lebih besar
dari $50,000.
Common Table Expressions
(CTE)
Common Table Expression
● Common Table Expression (CTE) adalah sebuah nama sementara untuk
menyimpan hasil query, seperti tabel sementara, tetapi hanya digunakan
dalam query yang sama.
● CTE didefinisikan menggunakan kata kunci WITH, dan hasilnya
langsung digunakan dalam query utama atau query berikutnya.
● CTE pertama kali diperkenalkan di MySQL mulai dari versi 8.0. Jadi
pastikan MySQL menggunakan versi 8.x ke atas untuk bisa
menggunakan fitur ini.
Sintaks Common Table Expression
Contoh Kasus menggunakan CTE
● Misalnya, kita ingin mencari customer yang total pembeliannya lebih dari
$50,000
Selesai
Materi Selanjut nya
MySQL Lanjutan - MySQL Administrasi