Skip to main content

MySQL/MariaDB Cheat Sheet

·6 mins

MySQL dan MariaDB adalah dua Relational Database Management System (RDBMS) yang paling banyak digunakan saat ini. MariaDB merupakan fork dari MySQL yang dikembangkan untuk mempertahankan kompatibilitas sekaligus menghadirkan berbagai peningkatan. Oleh karena itu, keduanya memiliki sintaks SQL, struktur data, dan cara penggunaan yang sangat mirip.

Baik MySQL maupun MariaDB digunakan untuk menyimpan, memvalidasi, mengambil, dan mengelola data secara terstruktur. Dibandingkan menyimpan data dalam berkas biasa (flat file), keduanya menawarkan keunggulan seperti:

  • Integritas data yang lebih baik.
  • Performa pencarian dan pengolahan data yang tinggi.
  • Dukungan transaksi.
  • Keamanan dan manajemen hak akses pengguna.
  • Skalabilitas untuk aplikasi berukuran kecil hingga besar.

Mengakses Server Database
#

Anda dapat mengakses server MySQL atau MariaDB melalui terminal.

Memeriksa Status Server
#

mysqladmin -u root -p ping

Jika server berjalan dengan normal, akan muncul keluaran seperti berikut.

mysqld is alive

Masuk ke Sesi Interaktif
#

mysql -u root -p

Setelah memasukkan kata sandi, Anda akan masuk ke MySQL/MariaDB Shell dan dapat menjalankan perintah SQL.

Perintah Dasar SQL
#

Mengelola Database
#

Perintah Kegunaan
SHOW DATABASES; Menampilkan seluruh database yang tersedia.
USE nama_database; Memilih database yang akan digunakan.
CREATE DATABASE nama_database; Membuat database baru.
DROP DATABASE nama_database; Menghapus database secara permanen.

Mengelola Tabel
#

Perintah Kegunaan
SHOW TABLES; Menampilkan seluruh tabel pada database yang sedang aktif.
CREATE TABLE nama_tabel (...); Membuat tabel baru beserta strukturnya.
DESCRIBE nama_tabel; Menampilkan struktur tabel, termasuk nama kolom dan tipe datanya.
DROP TABLE nama_tabel; Menghapus tabel beserta seluruh datanya.

Operasi Data (CRUD)
#

Perintah Kegunaan
INSERT INTO tabel (kolom) VALUES ('nilai'); Menambahkan data baru ke dalam tabel.
SELECT * FROM tabel; Menampilkan data dari tabel.
UPDATE tabel SET kolom = nilai WHERE syarat; Memperbarui data yang sudah ada.
DELETE FROM tabel WHERE syarat; Menghapus data yang memenuhi kondisi tertentu.
TRUNCATE TABLE nama_tabel; Menghapus seluruh data dalam tabel dengan lebih cepat daripada DELETE tanpa klausa WHERE.

Query dan Filter Data
#

SQL menyediakan berbagai klausa untuk memfilter, mengurutkan, dan merangkum data.

Operasi Contoh
Filter data SELECT * FROM table_name WHERE condition;
Mengurutkan data SELECT * FROM table_name ORDER BY column ASC;
Mengurutkan data menurun SELECT * FROM table_name ORDER BY column DESC;
Membatasi jumlah hasil SELECT * FROM table_name LIMIT 10;
Menghitung jumlah data SELECT COUNT(*) FROM table_name;
Menghitung total nilai SELECT SUM(column) FROM table_name;
Menghitung rata-rata SELECT AVG(column) FROM table_name;
Nilai minimum SELECT MIN(column) FROM table_name;
Nilai maksimum SELECT MAX(column) FROM table_name;
Mengelompokkan data SELECT column, COUNT(*) FROM table_name GROUP BY column;

Menghubungkan Data Antar Tabel (JOIN)
#

Dalam basis data relasional, data umumnya disimpan di beberapa tabel agar tidak terjadi duplikasi (normalisasi). Untuk menggabungkan data dari beberapa tabel, SQL menyediakan klausa JOIN.

Jenis JOIN Kegunaan
INNER JOIN Menampilkan hanya data yang memiliki pasangan pada kedua tabel.
LEFT JOIN Menampilkan seluruh data dari tabel kiri beserta data yang cocok dari tabel kanan. Jika tidak ada pasangan, kolom dari tabel kanan akan bernilai NULL.
RIGHT JOIN Menampilkan seluruh data dari tabel kanan beserta data yang cocok dari tabel kiri. Jika tidak ada pasangan, kolom dari tabel kiri akan bernilai NULL.

Contoh
#

SELECT *
FROM member
INNER JOIN linux
ON member.os = linux.id;

Contoh di atas menggabungkan tabel member dengan tabel linux berdasarkan nilai member.os yang sama dengan linux.id.

Manajemen Pengguna dan Hak Akses
#

Untuk meningkatkan keamanan, setiap pengguna dapat diberikan hak akses yang berbeda sesuai kebutuhan.

Perintah Kegunaan
CREATE USER 'user'@'host' IDENTIFIED BY 'password'; Membuat pengguna baru.
DROP USER 'user'@'host'; Menghapus pengguna.
ALTER USER 'user'@'host' IDENTIFIED BY 'new_password'; Mengubah kata sandi pengguna.
GRANT ALL PRIVILEGES ON db.* TO 'user'@'host'; Memberikan hak akses ke database.
REVOKE privilege ON db.* FROM 'user'@'host'; Mencabut hak akses tertentu.
SHOW GRANTS FOR 'user'@'host'; Menampilkan hak akses yang dimiliki pengguna.
FLUSH PRIVILEGES; Memuat ulang tabel hak akses (umumnya tidak diperlukan pada versi MySQL dan MariaDB modern setelah GRANT atau REVOKE, tetapi masih berguna jika hak akses diubah secara langsung pada tabel sistem).

Backup dan Restore Database
#

Melakukan pencadangan (backup) secara berkala sangat penting untuk mencegah kehilangan data akibat kerusakan sistem atau kesalahan pengguna.

# Backup seluruh database
mysqldump -u username -p database_name > backup.sql

# Restore database
mysql -u username -p database_name < backup.sql

# Backup satu tabel
mysqldump -u username -p database_name table_name > table.sql

# Import file SQL
mysql -u username -p database_name < file.sql

Administrasi dan Diagnostik
#

Beberapa perintah berikut berguna untuk memantau kondisi server dan melakukan administrasi database.

-- Menampilkan versi server
SELECT VERSION();

-- Menampilkan proses yang sedang berjalan
SHOW PROCESSLIST;

-- Menampilkan status server
SHOW STATUS;

-- Menampilkan variabel konfigurasi server
SHOW VARIABLES;

-- Menampilkan status server utama (replication source)
SHOW MASTER STATUS;

-- Menampilkan status server replika
SHOW REPLICA STATUS\G;

-- Menampilkan daftar pengguna
SELECT User, Host FROM mysql.user;

Fitur Khusus MariaDB
#

MariaDB menyediakan beberapa fitur yang tidak dimiliki atau memiliki implementasi berbeda dibandingkan MySQL.

JSON Functions
#

MariaDB mendukung berbagai fungsi untuk membaca dan memanipulasi data JSON. Berbeda dengan MySQL, tipe data JSON di MariaDB merupakan alias dari LONGTEXT yang dilengkapi validasi.

SELECT JSON_EXTRACT(data, '$.name') FROM table_name;

SELECT JSON_TYPE(json_doc);

SELECT JSON_INSERT(json_doc, '$.key', 'value');

Beberapa fungsi JSON yang sering digunakan:

Fungsi Kegunaan
JSON_EXTRACT() Mengambil nilai dari dokumen JSON.
JSON_INSERT() Menambahkan elemen baru jika jalur (path) belum ada.
JSON_SET() Menambah atau memperbarui nilai JSON.
JSON_REPLACE() Mengubah nilai yang sudah ada.
JSON_REMOVE() Menghapus elemen dari dokumen JSON.
JSON_TYPE() Menampilkan tipe data dari nilai JSON.
JSON_VALID() Memeriksa apakah dokumen JSON valid.

Dynamic Columns
#

Dynamic Columns merupakan fitur khusus MariaDB yang memungkinkan beberapa kolom disimpan secara dinamis dalam satu kolom bertipe BLOB. Fitur ini berguna ketika struktur data sering berubah tanpa harus mengubah skema tabel.

INSERT INTO table_name
VALUES (
    1,
    COLUMN_CREATE('name', 'John')
);

SELECT COLUMN_GET(col, 'name' AS CHAR)
FROM table_name;

Fungsi yang umum digunakan:

Fungsi Kegunaan
COLUMN_CREATE() Membuat kumpulan dynamic columns.
COLUMN_GET() Mengambil nilai dari dynamic columns.
COLUMN_ADD() Menambahkan atribut baru.
COLUMN_DELETE() Menghapus atribut tertentu.
COLUMN_EXISTS() Memeriksa apakah atribut tersedia.

Storage Engine
#

Storage engine menentukan cara MariaDB menyimpan, mengunci, dan mengelola data.

Storage Engine Keterangan
InnoDB Storage engine bawaan. Mendukung transaksi (ACID), foreign key, dan row-level locking. Cocok untuk sebagian besar aplikasi.
MyISAM Performa baca tinggi, tetapi tidak mendukung transaksi maupun foreign key.
Aria Dikembangkan sebagai penerus MyISAM. Banyak digunakan untuk tabel sementara (temporary table) dan operasi internal MariaDB.
MEMORY Menyimpan seluruh data di RAM sehingga sangat cepat, tetapi seluruh data akan hilang saat server dimatikan atau direstart.

Script Administrasi
#

Menampilkan Storage Engine Setiap Database
#

Query berikut menampilkan jumlah tabel, jumlah baris, ukuran data, serta persentase penggunaan setiap storage engine pada masing-masing database.

SELECT
    t.TABLE_SCHEMA AS `database`,
    t.ENGINE AS `storage_engine`,
    COUNT(*) AS `jumlah_tabel`,
    SUM(t.TABLE_ROWS) AS `total_baris`,
    ROUND(
        SUM(t.DATA_LENGTH + t.INDEX_LENGTH) / 1024 / 1024,
        2
    ) AS `total_ukuran_mb`,
    ROUND(
        COUNT(*) * 100.0 /
        SUM(COUNT(*)) OVER (PARTITION BY t.TABLE_SCHEMA),
        2
    ) AS `persentase_tabel`
FROM information_schema.TABLES AS t
WHERE t.TABLE_SCHEMA NOT IN (
    'information_schema',
    'mysql',
    'performance_schema',
    'sys'
)
AND t.TABLE_TYPE = 'BASE TABLE'
GROUP BY
    t.TABLE_SCHEMA,
    t.ENGINE
ORDER BY
    t.TABLE_SCHEMA,
    jumlah_tabel DESC;

Related