Di MySQL, JSON_STORAGE_FREE()
fungsi menunjukkan berapa banyak ruang penyimpanan yang dikosongkan setelah Dokumen JSON diperbarui.
Untuk nilai kolom JSON, ini menunjukkan berapa banyak ruang penyimpanan yang dibebaskan dalam representasi binernya setelah diperbarui menggunakan JSON_SET()
, JSON_REPLACE()
, atau JSON_REMOVE()
.
Untuk dokumen JSON (atau string yang dapat diuraikan sebagai satu), fungsi ini mengembalikan 0
.
Sintaks
Sintaksnya seperti ini:
JSON_STORAGE_FREE(json_val)
Dimana json_val
mewakili dokumen JSON yang mengembalikan jumlah byte yang dibebaskan setelah pembaruan. Ini bisa menjadi nama kolom. Itu juga bisa berupa dokumen JSON yang valid atau string yang dapat diuraikan sebagai satu—baik sebagai nilai literal atau sebagai nilai variabel pengguna—dalam hal ini fungsi mengembalikan 0
.
Contoh
Kami menjalankan kueri:
SELECT Contents FROM Collections WHERE CollectionId = 4;
Dan dapatkan data berikut:
+-------------------------------------+ | Contents | +-------------------------------------+ | {"Name": "Homer", "Stupid": "True"} | +-------------------------------------+
Mari kita periksa ukuran penyimpanan Contents
kolom, dan lihat apakah ada ruang yang telah dibebaskan oleh pembaruan.
SELECT JSON_STORAGE_SIZE(Contents) Size, JSON_STORAGE_FREE(Contents) Free FROM Collections WHERE CollectionId = 4;
Hasil:
+------+------+ | Size | Free | +------+------+ | 40 | 0 | +------+------+
Dalam hal ini, data menggunakan hingga 40 byte ruang penyimpanan, dan tidak ada ruang yang dibebaskan oleh pembaruan apa pun.
Tapi kita bisa mengubahnya.
Ayo lakukan pembaruan.
UPDATE Collections SET Contents = JSON_SET(Contents, "$.Stupid", 1) WHERE CollectionId = 4;
Hasil:
Query OK, 1 row affected (0.08 sec) Rows matched: 1 Changed: 1 Warnings: 0
Mari jalankan kueri lain untuk melihat data yang diperbarui.
SELECT Contents FROM Collections WHERE CollectionId = 4;
Hasil:
+--------------------------------+ | Contents | +--------------------------------+ | {"Name": "Homer", "Stupid": 1} | +--------------------------------+
Jadi nilainya "True"
telah diubah menjadi 1
.
Sekarang mari kita lihat berapa banyak ruang yang dikosongkan dengan pembaruan tersebut.
SELECT JSON_STORAGE_SIZE(Contents) Size, JSON_STORAGE_FREE(Contents) Free FROM Collections WHERE CollectionId = 4;
Hasil:
+------+------+ | Size | Free | +------+------+ | 40 | 5 | +------+------+
Hasil ini menunjukkan bahwa pembaruan sebagian dokumen JSON terjadi, dan ini mengosongkan 5 byte ruang penyimpanan. Hasil dikembalikan oleh JSON_STORAGE_SIZE()
tidak berubah oleh pembaruan sebagian.
Pembaruan sebagian didukung untuk pembaruan menggunakan JSON_SET()
, JSON_REPLACE()
, atau JSON_REMOVE()
.
Pembaruan Tidak Sebagian
Penetapan nilai langsung ke kolom JSON tidak dapat diperbarui sebagian, dan oleh karena itu, tidak ada ruang kosong yang dilaporkan.
Hal yang sama berlaku untuk variabel pengguna JSON.
Berikut ini contoh untuk didemonstrasikan.
Pertama kita atur variabelnya:
SET @data = '{"Name": "Homer", "Stupid": "True"}'; SELECT JSON_STORAGE_SIZE(@data) Size, JSON_STORAGE_FREE(@data) Free;
Hasil:
+------+------+ | Size | Free | +------+------+ | 40 | 0 | +------+------+
Sekarang kami memperbarui variabel menggunakan JSON_SET()
:
SET @data = JSON_SET(@data, "$.Stupid", 1); SELECT JSON_STORAGE_SIZE(@data) Size, JSON_STORAGE_FREE(@data) Free;
Hasil:
+------+------+ | Size | Free | +------+------+ | 35 | 0 | +------+------+
Jadi dalam hal ini tidak ada ruang yang dibebaskan. Namun, perhatikan juga bahwa JSON_STORAGE_SIZE()
function sekarang melaporkan jumlah byte yang lebih rendah (35) yang digunakan untuk menyimpan dokumen.