Database tidak bisa kita ajak bicara dengan bahasa manusia; kita membutuhkan bahasa yang dipahami oleh semua database relasional: SQL (Structured Query Language). SQL adalah bahasa standar untuk membuat struktur data, menyimpan data, mengambil data kembali, dan mengatur siapa yang boleh mengakses data. MySQL memahami SQL dan menambahkan beberapa perintah khas miliknya sendiri. Pada Chapter ini kita memetakan keluarga perintah SQL, mencoba siklus lengkap DDL, DML, dan DQL dalam satu sesi latihan, serta melihat posisi MySQL terhadap standar SQL.

SQL adalah Bahasa Deklaratif #

SQL bersifat deklaratif: kita menyatakan hasil apa yang kita inginkan, bukan langkah demi langkah cara mendapatkannya. Sebagai contoh, kita cukup menulis “ambil semua pelanggan yang kotanya Bandung” dalam satu statement SELECT; MySQL sendiri yang menentukan cara mencari baris tersebut, memakai index mana, dan dalam urutan apa membaca table.

Sifat ini kontras dengan bahasa prosedural seperti PHP atau Python. Pada bahasa prosedural, kita menulis perulangan dan pengecekan kondisi secara manual untuk menyaring data. Pada SQL, penyaringan dinyatakan sekali di klausa WHERE dan sisanya diserahkan kepada server. Akibatnya, query SQL yang setara sering jauh lebih pendek daripada kode prosedural yang setara.

Sebelum membuat struktur apa pun, mari kita buktikan sifat deklaratif tersebut dengan ekspresi murni:

sql
SELECT 15000 * 3 AS total_harga;

Output yang Dihasilkan:

text
+-------------+
| total_harga |
+-------------+
|       45000 |
+-------------+
1 row in set (0.00 sec)

Server mengevaluasi 15000 * 3 tanpa membaca table mana pun, lalu mengembalikan hasilnya sebagai tabel satu baris satu kolom bernama total_harga. Query seperti ini berguna untuk menguji koneksi dan mencoba ekspresi secara cepat.

Keluarga Perintah SQL #

Perintah SQL dikelompokkan berdasarkan fungsinya, bukan berdasarkan sintaks. Pemetaan berikut adalah kosakata yang akan sering kita pakai sepanjang course:

KelompokTugasContoh perintah
DDL (Data Definition Language)membuat dan mengubah strukturCREATE TABLE, ALTER TABLE, DROP
DML (Data Manipulation Language)mengubah isi dataINSERT, UPDATE, DELETE
DQL (Data Query Language)membaca dataSELECT
DCL (Data Control Language)mengatur hak aksesGRANT, REVOKE
TCL (Transaction Control Language)mengelola transaksiSTART TRANSACTION, COMMIT, ROLLBACK

Cara membaca tabelnya sederhana: DDL mengubah wadah, DML mengubah isi, DQL membaca isi, DCL menjaga akses, dan TCL menjaga konsistensi operasi ganda. Sebagian referensi menggabungkan DQL ke dalam DML karena keduanya sama-sama “bekerja dengan data”; pembagian lima kelompok di atas hanya alat berpikir, bukan aturan resmi.

Latihan: Siklus DDL, DML, dan DQL #

Kita praktikkan tiga kelompok perintah terpenting dalam satu alur nyata: membuat database latihan belajar_perintah, membuat table, mengisi data, lalu membaca dan mengubahnya. Mulai dari wadahnya:

sql
CREATE DATABASE belajar_perintah;

Output yang Dihasilkan:

text
Query OK, 1 row affected (0.00 sec)

Tahap DDL: kita definisikan table tugas untuk mencatat daftar tugas belajar:

sql
USE belajar_perintah;
CREATE TABLE tugas (
  id INT PRIMARY KEY,
  judul VARCHAR(60),
  selesai BOOLEAN
);

Output yang Dihasilkan:

text
Database changed
Query OK, 0 rows affected (0.00 sec)

Kolom selesai bertipe BOOLEAN. MySQL tidak punya tipe boolean terpisah; BOOLEAN adalah nama lain untuk TINYINT(1) sehingga nilainya disimpan sebagai angka 1 (benar) dan 0 (salah). Kata kunci TRUE dan FALSE tetap boleh dipakai saat menulis query dan otomatis diterjemahkan menjadi angka tersebut.

Tahap DML: kita sisipkan dua tugas ke dalam table:

sql
USE belajar_perintah;
INSERT INTO tugas (id, judul, selesai) VALUES
  (1, 'Belajar SELECT', TRUE),
  (2, 'Latihan INSERT', FALSE);

Output yang Dihasilkan:

text
Database changed
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

Tahap DQL: kita baca seluruh isi table dengan SELECT. Tanda bintang (*) berarti “semua kolom”:

sql
USE belajar_perintah;
SELECT * FROM tugas ORDER BY id;

Output yang Dihasilkan:

text
Database changed
+----+----------------+---------+
| id | judul          | selesai |
+----+----------------+---------+
|  1 | Belajar SELECT |       1 |
|  2 | Latihan INSERT |       0 |
+----+----------------+---------+
2 rows in set (0.00 sec)

Kolom selesai tampil sebagai angka 1 dan 0, sesuai penjelasan BOOLEAN di atas. Sekarang kita ubah status tugas kedua menjadi selesai, lalu baca ulang hasilnya:

sql
USE belajar_perintah;
UPDATE tugas SET selesai = TRUE WHERE id = 2;
SELECT id, judul, selesai FROM tugas ORDER BY id;

Output yang Dihasilkan:

text
Database changed
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

+----+----------------+---------+
| id | judul          | selesai |
+----+----------------+---------+
|  1 | Belajar SELECT |       1 |
|  2 | Latihan INSERT |       1 |
+----+----------------+---------+
2 rows in set (0.00 sec)

Perintah UPDATE mengubah baris yang cocok dengan kondisi WHERE id = 2. Klausa WHERE pada UPDATE sangat penting: tanpa klausa tersebut, seluruh baris table ikut berubah. Setelah UPDATE, perintah SELECT kedua memperlihatkan nilai selesai yang sudah menjadi 1.

Latihan selesai, jadi kita hapus database-nya agar daftar database tetap rapi:

sql
DROP DATABASE belajar_perintah;

Output yang Dihasilkan:

text
Query OK, 1 row affected (0.00 sec)

Standar SQL dan Dialek MySQL #

SQL distandarkan oleh ANSI/ISO, dan MySQL mengikuti mayoritas standar tersebut. Statement seperti SELECT, INSERT, UPDATE, dan CREATE TABLE yang kita tulis di MySQL dapat dipakai juga di PostgreSQL, SQLite, dan database relasional lain dengan penyesuaian kecil. Inilah alasan utama mempelajari SQL: kemampuan berpindah antar-database tanpa mulai dari nol.

Di samping standar, MySQL memiliki dialek — perintah dan fitur tambahan khas MySQL. Contohnya keluarga SHOW seperti SHOW DATABASES, penanda backtick untuk identifier, serta klausa LIMIT untuk membatasi jumlah baris hasil. Dialek semacam ini tidak semuanya ada di database lain, jadi query yang memakai fitur khas MySQL bisa perlu disesuaikan saat berpindah database.

Referensi #

Kita kini mengenal bahasa yang dipakai untuk berbicara dengan MySQL beserta peta keluarga perintahnya. Pertanyaan berikutnya: apa yang sebenarnya terjadi di dalam server ketika sebuah query dikirim? Chapter berikutnya membedah arsitektur dan cara kerja MySQL dari koneksi client sampai data di disk.