Sebelum menyimpan satu tabel pun, kita perlu wadahnya terlebih dahulu: database. Database di MySQL berfungsi sebagai namespace yang mengelompokkan tabel, view, stored procedure, dan objek lain milik satu aplikasi. Pada Chapter ini kita akan membuat database pertama, memeriksa hasilnya dengan SHOW DATABASES, dan membahas dua keputusan penting yang sebaiknya diambil sejak awal: character set dan collation.
CREATE DATABASE #
Perintah CREATE DATABASE membuat database baru di server. Bentuk paling sederhananya hanya butuh nama database:
CREATE DATABASE belajar_toko;Output yang Dihasilkan:
Query OK, 1 row affected (0.00 sec)Nama database di MySQL mengikuti aturan identifier pada umumnya: diawali huruf dan dapat berisi huruf, angka, garis bawah (_), serta tanda dolar ($). Untuk nama yang mengandung spasi atau karakter khusus, kita wajib memberi tanda kutip terbalik (backtick) seperti CREATE DATABASE `belajar toko` — meskipun praktik tersebut tidak disarankan karena menyulitkan penulisan query sehari-hari.
Setelah perintah dijalankan, MySQL mengembalikan baris Query OK, 1 row affected yang menandakan database berhasil dibuat. Respons 1 row affected pada pernyataan DDL memang terkesan aneh karena kita tidak mengubah baris data apa pun; MySQL melaporkannya demikian karena pembuatan database menulis satu baris metadata pada katalog internal server.
Memeriksa Hasil dengan SHOW DATABASES #
Kita dapat memastikan database baru sudah terdaftar menggunakan SHOW DATABASES:
SHOW DATABASES;Output yang Dihasilkan:
+--------------------+
| Database |
+--------------------+
| belajar_toko |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)Empat nama selain belajar_toko adalah database bawaan MySQL. Database mysql menyimpan tabel sistem seperti daftar user dan privilege, information_schema dan performance_schema menyajikan metadata serta metrik server dalam bentuk tabel virtual, sedangkan sys berisi view bantuan yang merangkum informasi performance_schema agar mudah dibaca. Kita sebaiknya tidak mengubah isi database bawaan tersebut secara langsung.
Character Set dan Collation #
Database baru mewarisi pengaturan character set dan collation dari konfigurasi server. Character set menentukan karakter apa saja yang bisa disimpan, sedangkan collation menentukan cara membandingkan dan mengurutkan karakter tersebut. Kita bisa melihat keduanya dengan:
SELECT @@character_set_database, @@collation_database;Output yang Dihasilkan:
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4 | utf8mb4_0900_ai_ci |
+--------------------------+----------------------+
1 row in set (0.00 sec)Bila kita mengakses variabel tersebut tanpa memilih database lebih dulu, nilai default server yang akan tampil. Nilai utf8mb4 berarti server mendukung karakter Unicode lengkap termasuk emoji, sedangkan utf8mb4_0900_ai_ci adalah collation default MySQL 8.x yang membandingkan teks tanpa membedakan huruf besar-kecil (case-insensitive, ci).
Kita juga bisa menetapkan keduanya secara eksplisit saat pembuatan database:
CREATE DATABASE belajar_blog
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;Output yang Dihasilkan:
Query OK, 1 row affected (0.00 sec)Menetapkan character set sejak awal lebih mudah daripada mengubahnya setelah tabel terisi data, karena konversi karakter pada data yang sudah ada bisa memicu galat bila terdapat karakter yang tidak terdukung oleh character set tujuan.
Variasi IF NOT EXISTS #
Menjalankan CREATE DATABASE pada nama yang sudah terpakai menghasilkan galat:
-- @error
CREATE DATABASE belajar_toko;Output yang Dihasilkan:
Query OK, 0 rows affected (0.00 sec)
ERROR 1007 (HY000): Can't create database 'belajar_toko'; database exists
ByeMySQL menolak perintah tersebut supaya database lama tidak tertimpa secara tidak sengaja. Untuk skrip yang dijalankan berulang kali, kita bisa menambahkan klausa IF NOT EXISTS agar perintah diabaikan dengan aman ketika database sudah ada:
CREATE DATABASE IF NOT EXISTS belajar_toko;Output yang Dihasilkan:
Query OK, 1 row affected, 1 warning (0.00 sec)Baris 1 warning muncul karena MySQL tetap melaporkan bahwa database sudah ada sebelumnya. Kita bisa membaca detail peringatan tersebut dengan perintah SHOW WARNINGS; setelahnya. Pola IF NOT EXISTS ini nantinya juga kita pakai pada CREATE TABLE supaya skrip inisialisasi proyek aman dijalankan ulang.
Menghapus Database Latihan #
Chapter selanjutnya akan banyak membuat database dan tabel latihan. Supaya daftar database kita tetap rapi, database percobaan yang tidak terpakai bisa dihapus:
DROP DATABASE belajar_blog;Output yang Dihasilkan:
Query OK, 0 rows affected (0.00 sec)Perintah DROP DATABASE menghapus database beserta seluruh isi di dalamnya tanpa konfirmasi tambahan. Karena sifatnya yang tidak bisa dibatalkan, perintah ini hanya boleh dijalankan setelah kita yakin datanya memang tidak dibutuhkan — pada tahap belajar, gunakan database latihan yang memang boleh hilang kapan saja.
Referensi #
- CREATE DATABASE — MySQL 8.4 Reference Manual
- SHOW DATABASES Statement — MySQL 8.4 Reference Manual
- Character Sets and Collations — MySQL 8.4 Reference Manual
Pembuatan database baru terasa seperti menyiapkan kamar kosong: belum ada satu tabel pun di dalamnya. Chapter berikutnya membahas cara memilih database aktif dengan USE sebelum kita mulai mengisi kamar tersebut.