1. Introduction
1.1 Importance of JSON
In modern web development, data exchange has become increasingly complex. JSON (JavaScript Object Notation), as a lightweight and structured data format, is widely used for data transfer and storage. Since version 5.7, MySQL has supported the JSON data type, making it easier to store and manipulate JSON data directly in the database.
1.2 Using JSON in MySQL
This article explains everything from the basics of working with JSON in MySQL to performance considerations and practical use cases. Whether you are a beginner or an advanced user, you will gain the knowledge needed to effectively use JSON in MySQL.
2. What is JSON in MySQL?
2.1 Basics of JSON
JSON is a simple format that structures data as key-value pairs. It is widely used in web APIs and data transfer, known for its lightweight nature and readability. In MySQL, the JSON data type allows you to store and manipulate JSON data directly in the database.
2.2 MySQL JSON Data Type
The JSON data type, introduced in MySQL 5.7, requires similar disk space as LONGBLOB or LONGTEXT. To ensure data integrity, MySQL validates JSON data upon insertion, preventing invalid JSON from being stored.
2.3 Use Cases for JSON
Common scenarios for using JSON in MySQL include:
- Storing complex data structures
- Saving raw data retrieved from APIs
- Managing data with dynamic or evolving schemas

3. Basic JSON Operations in MySQL
3.1 Creating JSON Columns
To create a column for storing JSON data, specify the json
data type as follows:
CREATE TABLE json_data (
doc JSON
);
3.2 Inserting JSON Data
To insert JSON data, use the INSERT
statement. MySQL validates the data format at insertion and returns an error if it is not valid JSON.
INSERT INTO json_data(doc) VALUES ('{"a": {"b": ["c", "d"]}, "e": "f"}');
You can also generate a JSON object from key-value pairs using the JSON_OBJECT
function:
INSERT INTO json_data(doc) VALUES (JSON_OBJECT('key1', 'value1', 'key2', 'value2'));
3.3 Querying JSON Data
To query inserted JSON data, use the JSON_EXTRACT
function. This function extracts values from a JSON object using a specified path.
SELECT * FROM json_data WHERE JSON_EXTRACT(doc, '$.e') = 'f';
Alternatively, you can use the shorthand ->
operator:
SELECT * FROM json_data WHERE doc->'$.e' = 'f';
3.4 Updating JSON Data
To update parts of a JSON object, use the JSON_SET
function. It updates specific fields without overwriting the entire object.
UPDATE json_data SET doc = JSON_SET(doc, '$.a.b[0]', 'new_value');
4. Performance Considerations
4.1 Insert Performance
When inserting data into JSON columns, the performance is nearly the same as inserting into TEXT
columns. For example, inserting 50,000 records shows that JSON performs comparably to TEXT in terms of speed.
4.2 Update Performance
When updating JSON data, JSON_SET
allows partial updates, improving performance since you only modify specific fields instead of overwriting the entire object. Even when updating 50,000 records, JSON_SET provides efficient updates.

5. Best Practices for Using JSON in MySQL
5.1 Appropriate Use Cases
JSON is best suited for storing complex data structures or data with dynamic schemas. However, for well-structured data, traditional relational tables are generally more efficient.
5.2 Indexing JSON Data
In MySQL, you can create indexes on JSON columns using virtual columns. This improves query performance on JSON data.
ALTER TABLE json_data ADD COLUMN e_value VARCHAR(255) AS (doc->'$.e'), ADD INDEX (e_value);
5.3 Avoiding Common Pitfalls
- Avoid excessive use of JSON columns and leverage relational database strengths.
- Set appropriate indexes to ensure query efficiency.
- Prevent JSON data from becoming too large and normalize data when needed.
6. Advanced JSON Functions in MySQL
6.1 Additional JSON Functions
MySQL provides many functions to manipulate JSON data. For example, JSON_APPEND
adds new elements, and JSON_REMOVE
deletes specific fields.
-- Add data
UPDATE json_data SET doc = JSON_APPEND(doc, '$.a.b', 'new_element');
-- Remove data
UPDATE json_data SET doc = JSON_REMOVE(doc, '$.a.b[0]');
6.2 Combining with SQL Functions
JSON functions can be combined with traditional SQL functions to build more complex queries. For example, you can use JSON data with GROUP BY
or ORDER BY
clauses.
SELECT JSON_EXTRACT(doc, '$.e') AS e_value, COUNT(*) FROM json_data GROUP BY e_value;
7. Conclusion
This article covered everything from basic JSON operations to advanced features in MySQL. By leveraging MySQL’s JSON capabilities, you can simplify storing and managing complex data. Applying performance insights and best practices will help you manage data more efficiently.