A Comprehensive Guide to Updating JSON Data Type Columns in MySQL 5.7.10

Dec 05, 2025 · Programming · 6 views · 7.8

Keywords: MySQL | JSON Data Type | JSON_SET Function

Abstract: This article provides an in-depth analysis of updating JSON data type columns in MySQL 5.7.10, focusing on the JSON_SET function. Through practical examples, it details how to directly modify specific key-value pairs in JSON columns without extra SELECT queries, thereby improving operational efficiency. The article also covers the use of the JSON_ARRAY function for adding array-type data to JSON objects.

MySQL 5.7.10 introduced native JSON data type support, offering robust capabilities for storing and manipulating JSON data. However, many developers encounter challenges when updating JSON columns, particularly in efficiently modifying specific key-value pairs without prior SELECT queries. This guide explores the core methods for these operations.

Basic Usage of the JSON_SET Function

The JSON_SET function is a key tool in MySQL for updating JSON data. It allows direct modification of specified paths in JSON columns, eliminating the need to read the entire JSON object first. The basic syntax is: JSON_SET(json_doc, path, val[, path, val] ...). Here, json_doc is the JSON document to update, path is a JSON path expression (e.g., "$.key"), and val is the new value to set.

For example, consider a table t1 with columns data (JSON type) and id (integer type). Initial data might look like:

mysql> SELECT * FROM t1;
+--------------------+------+
| data               | id   |
+--------------------+------+
| {"key1": "value1"} |    1 |
| {"key2": "value2"} |    2 |
+--------------------+------+
2 rows in set (0.00 sec)

To update the data column for the row with id=2, changing the value of key2 to "I am ID2", use the following UPDATE statement:

mysql> UPDATE t1 SET data = JSON_SET(data, "$.key2", "I am ID2") WHERE id = 2;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

After execution, the data becomes:

mysql> SELECT * FROM t1;
+--------------------+------+
| data               | id   |
+--------------------+------+
| {"key1": "value1"} |    1 |
| {"key2": "I am ID2"} |    2 |
+--------------------+------+
2 rows in set (0.00 sec)

This approach avoids the cumbersome process of first executing a SELECT query to retrieve JSON data, modifying it at the application layer, and then performing an UPDATE, significantly enhancing operational efficiency.

Adding New Key-Value Pairs

The JSON_SET function can also add new key-value pairs. If the specified path does not exist, the function automatically creates it. For instance, to add a new key key3 with value "I am ID3" to the data column for the row with id=2:

mysql> UPDATE t1 SET data = JSON_SET(data, "$.key3", "I am ID3") WHERE id = 2;
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0

The updated data is:

mysql> SELECT * FROM t1;
+------------------------------------------+------+
| data                                     | id   |
+------------------------------------------+------+
| {"key1": "value1"}                       |    1 |
| {"key2": "I am ID2", "key3": "I am ID3"} |    2 |
+------------------------------------------+------+
2 rows in set (0.00 sec)

Handling Array-Type Data

Arrays are a common data structure in JSON. MySQL provides the JSON_ARRAY function to create JSON arrays. Combined with JSON_SET, it is easy to add array-type values to JSON objects. For example, to add a key key4 with the array value ["Hello", "World!"] to the data column for the row with id=2:

mysql> UPDATE t1 SET data = JSON_SET(data, "$.key4", JSON_ARRAY('Hello', 'World!')) WHERE id = 2;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

After execution, the data is:

mysql> SELECT * FROM t1;
+--------------------------------------------------------------------+------+
| data                                                               | id   |
+--------------------------------------------------------------------+------+
| {"key1": "value1"}                                                 |    1 |
| {"key2": "I am ID2", "key3": "I am ID3", "key4": ["Hello", "World!"]} |    2 |
+--------------------------------------------------------------------+------+
2 rows in set (0.00 sec)

This method ensures that arrays are stored in the correct JSON format, facilitating subsequent queries and operations.

Performance and Best Practices

Using the JSON_SET function to directly update JSON columns offers significant performance advantages over the traditional approach of SELECT followed by UPDATE. It reduces network round-trips and data processing overhead, especially with large datasets. However, consider the following best practices:

In summary, the JSON data type in MySQL 5.7.10, through functions like JSON_SET, provides efficient update mechanisms. Mastering these methods can greatly enhance the flexibility and efficiency of database operations.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.