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 pingJika server berjalan dengan normal, akan muncul keluaran seperti berikut.
mysqld is aliveMasuk ke Sesi Interaktif #
mysql -u root -pSetelah 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.sqlAdministrasi 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;