在現代應用程式開發中,管理半結構化資料是一個常見的挑戰。 MySQL 在 5.7 版本中引入了對 JSON 的支持,提供了一種在關聯式資料庫中儲存、查詢和操作此類資料的強大方法。這篇文章探討了 MySQL 提供的基本 JSON 函數,並透過實際範例來幫助入門。
為什麼 MySQL 中要使用 JSON?
在關聯式資料庫中儲存 JSON 資料可以簡化半結構化或分層資料的處理。它允許:
- 彈性: JSON 允許動態和分層資料儲存。
- 內建功能:高效查詢、更新和驗證 JSON 資料。
- 整合:將關聯式資料與 JSON 物件結合以實現混合用例。
1. 建立 JSON 數據
您可以使用 JSON_OBJECT() 和 JSON_ARRAY() 函式建構 JSON 物件或陣列。
範例:
SELECT JSON_OBJECT('id', 1, 'name', 'Alice', 'roles', JSON_ARRAY('admin', 'editor')) AS json_data;
輸出:
{"id": 1, "name": "Alice", "roles": ["admin", "editor"]}
2. 儲存JSON數據
要儲存 JSON 數據,請使用列的 JSON 資料類型。
範例:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, details JSON NOT NULL ); INSERT INTO users (details) VALUES ('{"name": "Bob", "age": 30, "roles": ["viewer", "editor"]}');
3. 從 JSON 擷取數據
MySQL提供了幾個從JSON文件中提取資料的函數:
- JSON_EXTRACT():使用 JSON 路徑取得值。
- ->運算子:JSON_EXTRACT() 的簡寫。
範例:
SELECT JSON_EXTRACT(details, '$.name') AS name, details->'$.age' AS age FROM users;
輸出:
4. 修改JSON數據
您可以使用以下方法更新或新增元素到 JSON 資料:
- JSON_SET():插入或更新金鑰。
- JSON_INSERT():如果 key 不存在則插入。
- JSON_REPLACE():僅更新現有金鑰。
範例:
UPDATE users SET details = JSON_SET(details, '$.city', 'New York') WHERE id = 1; SELECT details FROM users;
輸出:
{"name": "Bob", "age": 30, "roles": ["viewer", "editor"], "city": "New York"}
5. 刪除鍵或數值
使用 JSON_REMOVE() 從 JSON 文件中刪除元素。
範例:
UPDATE users SET details = JSON_REMOVE(details, '$.roles') WHERE id = 1; SELECT details FROM users;
輸出:
{"name": "Bob", "age": 30, "city": "New York"}
6. 在 JSON 中搜尋
JSON_CONTAINS() 函數檢查 JSON 文件是否包含特定值。
範例:
SELECT JSON_CONTAINS(details, '"New York"', '$.city') AS has_city FROM users;
輸出:
7. 聚合 JSON 數據
JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 函數有助於將查詢結果聚合到 JSON 結構中。
範例:
SELECT JSON_ARRAYAGG(name) AS names FROM ( SELECT JSON_EXTRACT(details, '$.name') AS name FROM users ) AS subquery;
輸出:
SELECT JSON_OBJECT('id', 1, 'name', 'Alice', 'roles', JSON_ARRAY('admin', 'editor')) AS json_data;
8. 驗證 JSON 數據
JSON_VALID() 函數檢查字串是否是有效的 JSON。
範例:
{"id": 1, "name": "Alice", "roles": ["admin", "editor"]}
輸出:
9. 漂亮的印刷 JSON
使用 JSON_PRETTY() 進行人類可讀的 JSON 格式。
範例:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, details JSON NOT NULL ); INSERT INTO users (details) VALUES ('{"name": "Bob", "age": 30, "roles": ["viewer", "editor"]}');
輸出:
SELECT JSON_EXTRACT(details, '$.name') AS name, details->'$.age' AS age FROM users;
附加 JSON 函數
MySQL 提供了廣泛的 JSON 函數,超出了詳細介紹的範圍。以下是其他 JSON 函數:
- JSON_ARRAY_APPEND():將值附加到 JSON 陣列的結尾。
- JSON_ARRAY_INSERT():將值插入 JSON 陣列的指定位置。
- JSON_CONTAINS_PATH():檢查 JSON 文件中是否存在指定路徑。
- JSON_DEPTH():傳回 JSON 文件的最大深度。
- JSON_KEYS():從 JSON 物件中提取金鑰。
- JSON_LENGTH():計算 JSON 陣列中的元素數量或 JSON 物件中的鍵數量。
- JSON_MERGE_PATCH():合併多個 JSON 文檔,以最新值覆寫現有鍵。
- JSON_MERGE_PRESERVE():組合多個 JSON 文檔,透過建立重複項數組來保留所有值。
- JSON_OVERLAPS():確定兩個 JSON 文件是否有重疊元素。
- JSON_QUOTE():轉義字串中的特殊字元並將其作為有效的 JSON 字串文字傳回。
- JSON_SEARCH():傳回 JSON 文件中指定值的路徑。
- JSON_STORAGE_FREE():傳回修改 JSON 欄位後釋放的空間量。
- JSON_STORAGE_SIZE():提供 JSON 文件的儲存大小(以位元組為單位)。
- JSON_TABLE():將JSON資料轉換為關聯式表格式以便進一步處理。
- JSON_TYPE():傳回 JSON 值的類型(例如物件、陣列、字串等)。
- JSON_UNQUOTE():從 JSON 字串中刪除引號。
MySQL 的 JSON 函數為管理關係型資料庫中的半結構化資料提供了強大的工具。它們使得直接在 SQL 中儲存、查詢和操作 JSON 變得容易。了解這些函數有助於簡化工作流程並開啟資料庫設計的新方法。
以上是在 MySQL 中使用 JSON的詳細內容。更多資訊請關注PHP中文網其他相關文章!

mySqlStringTypesimpactStorageAndPerformanCeaseAsfollows:1)長度,始終使用theSamestoragespace,whatcanbefasterbutlessspace-felfficity.2)varCharisvariable varcharisvariable length,morespace-morespace-morespace-effficitybuteftife buteftife butfority butfority textifforlyslower.3)

mysqlStringTypesIncludeVarChar,文本,char,Enum和set.1)varCharisVersAtileForvariable-lengthStringStringSuptoPuptOuptoPepePecifiedLimit.2)textisidealforlargetStortStorStoverStoverStorageWithoutAutAdefinedLength.3)charlisfixed-lenftenge,for forConsistentDatalikeCodes.4)

MySQLoffersvariousstringdatatypes:1)CHARforfixed-lengthstrings,2)VARCHARforvariable-lengthtext,3)BINARYandVARBINARYforbinarydata,4)BLOBandTEXTforlargedata,and5)ENUMandSETforcontrolledinput.Eachtypehasspecificusesandperformancecharacteristics,sochoose

TograntpermissionstonewMySQLusers,followthesesteps:1)AccessMySQLasauserwithsufficientprivileges,2)CreateanewuserwiththeCREATEUSERcommand,3)UsetheGRANTcommandtospecifypermissionslikeSELECT,INSERT,UPDATE,orALLPRIVILEGESonspecificdatabasesortables,and4)

toadduserInmysqleffect和securly,跟隨台詞:1)USEtheCreateUserStattoDaneWuser,指定thehostandastrongpassword.2)GrantNecterAryAryaryPrivilegesSustherthing privilegesgeStatement,usifementStatement,adheringtotheprinciplelastprefilegege.3)

toaddanewuserwithcomplexpermissionsinmysql,loldtheSesteps:1)創建eTheEserWithCreateuser'newuser'newuser'@''localhost'Indedify'pa ssword';。 2)GrantreadAccesstoalltablesin'mydatabase'withGrantSelectOnMyDatabase.to'newuser'@'localhost';。 3)GrantWriteAccessto'

MySQL中的字符串數據類型包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT,排序規則(Collations)決定了字符串的比較和排序方式。 1.CHAR適合固定長度字符串,VARCHAR適合可變長度字符串。 2.BINARY和VARBINARY用於二進制數據,BLOB和TEXT用於大對像數據。 3.排序規則如utf8mb4_unicode_ci忽略大小寫,適合用戶名;utf8mb4_bin區分大小寫,適合需要精確比較的字段。

最佳的MySQLVARCHAR列長度選擇應基於數據分析、考慮未來增長、評估性能影響及字符集需求。 1)分析數據以確定典型長度;2)預留未來擴展空間;3)注意大長度對性能的影響;4)考慮字符集對存儲的影響。通過這些步驟,可以優化數據庫的效率和擴展性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3漢化版
中文版,非常好用

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中