Geçmişte, bu tür bileşik veri alanlarının türü olarak genellikle MySQL'in VARCHAR veya TEXT'ini seçtik. 5.7.8'den başlayarak MySQL, standart alan türlerinden biri olarak JSON kullanır.
JSON biçimindeki düz metin alanlarıyla karşılaştırıldığında, JSON türü alanların aşağıdaki avantajları vardır:
1. json alanları içeren bir tablo oluşturun
- Tablo oluştur CREATE TABLE t_json (id INT PRIMARY KEY, sname VARCHAR (20), info JSON);2. Kayıt ekleyin
- Bir json dizisi içeren bir kayıt ekleyin INSERT INTO t_json (id, sname, info) VALUES (1, 'ad1', JSON_ARRAY (1, "abc", NULL, TRUE, CURTIME ())); - json nesnelerini içeren kayıtları ekleyin INSERT INTO t_json (id, sname, info) VALUES (2, 'ad2', JSON_OBJECT ("yaş", 20, "zaman", şimdi ())); INSERT INTO t_json (id, sname, info) DEĞERLER (3, 'ad3', '{"yaş": 20, "zaman": "2018-07-1410:52:00"}');3. Sorgu kayıtları
- Arama kaydı T_json'DAN JSON_EXTRACT (bilgi, '$. Yaş') SEÇİN; Sname, bilgi seçin > t_json'DAN '$ .age'; - Sorgu anahtarı T_json 'dan json_keys (bilgi) seçin;4. Kaydı değiştirin
- Anahtar ekle GÜNCELLEME t_json SET info = json_set (bilgi, '$. İp', '192.168.1.1') NEREDE id = 2; - Değeri değiştir GÜNCELLEME t_json SET info = json_set (bilgi, '$. İp', '192.168.1.2') NEREDE id = 2; - Anahtarı sil GÜNCELLEME t_json SET info = json_remove (bilgi, '$. İp') NEREDE id = 2;1. JSON_ARRAY json dizisi oluşturur
- JSON_ARRAY (değer1, değer2, değer3 ...) - Belirtilen öğeleri içeren bir json dizisi oluşturun. SELECT JSON_ARRAY (1, "abc", NULL, TRUE, CURTIME ()); -2. JSON_OBJECT, json nesnesi oluşturur
- JSON_OBJECT (anahtar1, değer1, anahtar2, değer2 ...) - Belirtilen K-V çiftini içeren bir json nesnesi oluşturun. Anahtar NULL ise veya parametre sayısı tuhafsa, bir hata atılacaktır. SELECT JSON_OBJECT ('yaş', 20, 'zaman', şimdi ()); - {"id": 87, "ad": "havuç"}3. JSON_QUOTE artı "işareti
- JSON_QUOTE (json_val) - json_val öğesini "ile kapatın. SELECT JSON_QUOTE (''); - ""1.JSON_CONTAINS, verilerin mevcut olup olmadığını belirtir
set @j = '{"a": 1, "b": 2, "c": {"d": 4}}'; - JSON_CONTAINS (json_doc, val) - json belgesinin belirtilen yolda belirtilen verileri içerip içermediğini sorgulayın, içeriyorsa 1 döndür, aksi takdirde 0 döndür. Herhangi bir parametre NULL ise veya yol yoksa, NULL döndürülür. JSON_CONTAINS SEÇİN (@j, '4', '$. C.d'); - 12.JSON_CONTAINS_PATH, yolun mevcut olup olmadığını belirtir
- JSON_CONTAINS_PATH (json_doc, one_or_all, yol ...) - Belirtilen yolun var olup olmadığını sorgulayın ve varsa 1 döndür, aksi takdirde 0 döndürür. Herhangi bir parametre NULL ise, NULL döndürülür. - one_or_all yalnızca "bir" veya "tümü" değerini alabilir, biri var olduğu sürece anlamına gelir; hepsi var demektir. SELECT JSON_CONTAINS_PATH (@ j, 'bir', '$. A', '$. E'); - 1 SELECT JSON_CONTAINS_PATH (@ j, 'tümü', '$. A', '$. C.d'); - 13. JSON_EXTRACT belirtilen tüm verileri bulur
- JSON_EXTRACT (json_doc, yol ...) - json belgelerinden verileri çıkarın. Herhangi bir parametrede NULL varsa veya yol yoksa, NULL döndürülür. Birden çok yol çıkarılırsa, döndürülen veriler bir json dizisi içine alınır. set @ j2 = ''; SELECT JSON_EXTRACT ('', '$'); - 20 SELECT JSON_EXTRACT ('', '$', '$'); - SELECT JSON_EXTRACT ('', '$'); -4. JSON_KEYS, belirtilen tüm anahtar değerlerini bulur
- JSON_KEYS (json_doc) - Belirtilen yol altındaki json belgesinin tüm anahtar değerlerini alın ve bir json dizisi döndürün. Herhangi bir parametre NULL ise veya yol yoksa, NULL döndürülür. JSON_KEYS SEÇİN ('{"a": 1, "b": {"c": 30}}'); - JSON_KEYS SEÇİN ('{"a": 1, "b": {"c": 30}}', '$. B'); - T_json 'dan json_keys (bilgi) seçin;5. JSON_SEARCH, belirtilen tüm değerlerin yerini bulur
- JSON_SEARCH (json_doc, one_or_all, search_str) - Belirtilen dizeyi içeren sorgu yolları ve bunu bir json dizisi olarak döndürür. Herhangi bir parametre NUL ise veya yol yoksa, NULL döndürülür. - one_or_all: "bir", biri bulunduğunda sorgunun döneceği anlamına gelir; "tümü", tümünü sorgu anlamına gelir. - search_str: Sorgulanacak dizge. Eşleştirmek için LIKE içindeki '%' veya'_ 'kullanabilirsiniz. - yol: Belirtilen yolun altında kontrol edin. SET @ j3 = ''; SELECT JSON_SEARCH (@ j3, 'bir', 'abc'); - "$" SELECT JSON_SEARCH (@ j3, 'tümü', 'abc'); - JSON_SEARCH (@ j3, 'tümü', 'abc', NULL, '$'); - "$ .x" SEÇİN SELECT JSON_SEARCH (@ j3, 'tümü', '10'); - "$ .k" SELECT JSON_SEARCH (@ j3, 'tümü', '% b%'); - SELECT JSON_SEARCH (@ j3, 'all', '% b%', NULL, '$'); - "$ .x"1. JSON_ARRAY_APPEND, belirtilen konuma dizi öğeleri ekler
- JSON_ARRAY_APPEND (json_doc, yol, değer ...) - Belirtilen yolun json dizisinin sonuna val ekleyin. Belirtilen yol bir json nesnesiyse, bir json dizisi içine kapsüllenecek ve sonra eklenecektir. Herhangi bir parametre NULL ise, NULL döndürülür. SET @ j4 = ''; - JSON_ARRAY_APPEND SEÇİN (@ j4, '$', 3); - SET @ j5 = '{"a": 1, "b" :, "c": 4}'; SELECT JSON_ARRAY_APPEND (@ j5, '$. B', 'x'); - {"a": 1, "b" :, "c": 4} SELECT JSON_ARRAY_APPEND (@ j5, '$. C', 'y'); - {"a": 1, "b" :, "c":} SELECT JSON_ARRAY_APPEND (@ j5, '$', 'z'); -2. JSON_ARRAY_INSERT, belirtilen konuma bir dizi öğesi ekler
- JSON_ARRAY_INSERT (json_doc, yol, değer ...) - yol tarafından belirtilen json dizi öğesine val ekleyin, orijinal konum ve sağdaki öğeler sırayla sağa taşınır. Yol tarafından belirtilen veriler bir json dizi öğesi değilse, bu değeri atlayın; belirtilen öğe dizini json dizisinin uzunluğunu aşarsa, kuyruk eklenir. SET @ j6 = ''; SELECT JSON_ARRAY_INSERT (@ j6, '$', 'x'); - SELECT JSON_ARRAY_INSERT (@ j6, '$', 'x'); - SELECT JSON_ARRAY_INSERT (@ j6, '$. B', 'x'); - SELECT JSON_ARRAY_INSERT (@ j6, '$', 'x', '$', 'y'); -3. JSON_INSERT belirtilen konuma ekle
- JSON_INSERT (json_doc, yol, değer ...) - Belirtilen yolun altına veri girin Yol zaten varsa, bu değeri göz ardı edin (yoksa ekleyin). SET @ j7 = '{"a": 1, "b":}'; SELECT JSON_INSERT (@ j7, '$. A', 10, '$. C', ''); - {"a": 1, "b" :, "c": ""}4. JSON_REPLACE belirtilen konum değişimi
- JSON_REPLACE (json_doc, yol, değer ...) - Belirtilen yolun verilerini değiştirin, bir yol yoksa, atlayın (yalnızca varsa değiştirin). Herhangi bir parametre NULL ise, NULL döndürülür. JSON_REPLACE (@ j7, '$. A', 10, '$. C', ''); - {"a": 10, "b":} SEÇİN5. JSON_SET konum ayarını belirtir
- JSON_SET (json_doc, yol, değer ...) - Belirtilen yolun verilerini ayarlayın (var olup olmadığına bakılmaksızın). Herhangi bir parametre NULL ise, NULL döndürülür. JSON_SET SEÇİNİZ (@ j7, '$. A', 10, '$. C', ''); - {"a": 10, "b" :, "c": ""}6. JSON_MERGE birleştirme
- JSON_MERGE (json_doc, json_doc ...) - Birden çok json belgesini birleştirin. Kurallar aşağıdaki gibidir: - Her ikisi de json dizisiyse, sonuç otomatik olarak bir json dizisinde birleşecektir; - Her ikisi de json nesnesiyse, sonuç otomatik olarak bir json nesnesine birleştirilir; - Birden fazla tür varsa, json olmayan dizi öğelerini json dizisine kapsülleyin ve kural 1'e göre mege gerçekleştirin. SELECT JSON_MERGE ('', ''); - JSON_MERGE SEÇİN ('{"ad": "x"}', '{"kimlik": 47}'); - {"kimlik": 47, "ad": "x"} SELECT JSON_MERGE ('1', 'true'); - SELECT JSON_MERGE ('', '{"id": 47}'); -7. JSON_REMOVE belirtilen konumu kaldırın
- JSON_REMOVE (json_doc, yol ...) - Belirtilen yolun verilerini kaldırın, bir yol yoksa bu yolu atlayın. Herhangi bir parametre NULL ise, NULL döndürülür. SET @ j8 = ''; SELECT JSON_REMOVE (@ j8, '$'); -8. JSON_UNQUOTE "numaraya git
- JSON_UNQUOTE (değer) - val'den tırnak işaretlerini kaldırın. Val NULL ise, NULL döndürülür. SELECT JSON_UNQUOTE ("\" 123 \ ""); - 1231.JSON_DEPTH derinlik
- JSON_DEPTH (json_doc) - JSON belgesinin derinliğini öğrenin. Parametre NULL ise, NULL döndürülür. - Boş bir json dizisinin, json nesnesinin veya skalerin derinliği 1'dir. SELECT JSON_DEPTH ('()'), JSON_DEPTH [''), JSON_DEPTH ('true'); - 11 1 SELECT JSON_DEPTH (''), JSON_DEPTH (''); - 22 JSON_DEPTH ('') SEÇİN; - 32. JSON_LENGTH uzunluğu
- JSON_LENGTH (json_doc) - Belirtilen yolun altındaki uzunluğu alın. Parametre NULL ise, NULL döndürülür. - Uzunluk hesaplama kuralları: - Skalerin uzunluğu 1'dir; - json dizisinin uzunluğu, eleman sayısıdır; - json nesnesinin uzunluğu anahtarların sayısıdır. JSON_LENGTH ('') SEÇİN; - 3 SELECT JSON_LENGTH ('{"a": 1, "b": {"c": 30}}'); - 2 SEÇİN JSON_LENGTH ('{"a": 1, "b": {"c": 30}}', '$. B'); - 13. JSON_TYPE türü
- JSON_TYPE (json_val) - Spesifik json belgesi türünü alın. Parametre NULL ise, NULL döndürülür. JSON_TYPE ('') seçin; - ARRAY4. JSON_VALID, json biçiminde geçerlidir
- JSON_VALID (değer) - val'in 0 değil 1 olan geçerli bir json biçimi olup olmadığını belirleyin. Parametre NUL ise, NULL döndürülür. SELECT JSON_VALID ('{"a": 1}'); - 1 SELECT JSON_VALID ('merhaba'), JSON_VALID ('"merhaba"'); - 1Daha sonra daha fazla devop ve DBA içeriği paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~