Melakukan Query Data JSON di DBMS MySQL
MySQL memiliki fitur untuk melakukan operasi / interaksi dengan data JSON
MySQL merupakah salah satu RDBMS (Relational Database Management System) yang cukup popular. Karena berbasis tabel, operasi data biasanya akan mengguankan dengan nama kolom dari sebuah tabel.
Namun ada kalanya data yang disimpan di dalam sebuah kolom adalah sebuah JSON. Dan kita diharuskan untuk melakukan operasi terhadap salah satu nilai di dalam JSON tersebut.
Contoh Kasus
Anggaplah kita memiliki sebuah table apps
dengan struktur seperti di bawah ini.
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(100) | YES | | NULL | |
| config | json | YES | | NULL | |
+--------+--------------+------+-----+---------+----------------+
* Tipe data JSON bisa menggunakan json
atau text
Kemudian diisi data seperti berikut ini
+----+-------+---------------------------------------------------------------------------+
| id | name | config |
+----+-------+---------------------------------------------------------------------------+
| 1 | app a | {"token": "abc", "status": "active", "endpoint": "https://app.com/api"} |
| 2 | app b | {"token": "def", "status": "suspended", "endpoint": "https://app.io/api"} |
+----+-------+---------------------------------------------------------------------------+
Tentu akan sulit untuk mendapatkan data apps yang status di dalam confignya active
. Bisa menggunakan LIKE
ataupun SUBSTRING_INDEX
, tetapi akan rawan terhadap perubahan data. Begitu juga untuk menampilkan hanya data token dari kolom config, tidak bisa dilakukan jika hanya menggunakan SELECT [name_kolom]
seperti biasa.
Solusi
Di dalam MySQL 8, operasi dengan data JSON bisa dilakukan dengan menggunakan nama_kolom->>"$.key_data"
. Contohnya bisa dilihat seperti di bawah ini.
mysql> select config->>"$.status" as status from apps;
+-----------+
| status |
+-----------+
| active |
| suspended |
+-----------+
Atau bisa juga lihat contoh di bawah ini
mysql> select id, name, config->>"$.token" as token
-> from apps
-> where config->>"$.status" = 'active';
+----+-------+-------+
| id | name | token |
+----+-------+-------+
| 1 | app a | abc |
+----+-------+-------+
Kesimpulan
Operasi data JSON di MySQL saat ini sudah sangat dipermudah, hanya cukup dengan menggunakan syntax kolom->>"$.data"
di dalam query.
Fitur ini mulai tersedia di MySQL versi 8 ke atas.
On this page
More Topics