SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

JSON_INSERT () so với JSON_SET () so với JSON_REPLACE () trong SQLite

SQLite cung cấp một số chức năng để chèn, thiết lập và thay thế các giá trị trong tài liệu JSON. Cụ thể, nó cung cấp json_insert() , json_set()json_replace() .

Các hàm này thực hiện các tác vụ tương tự và đôi khi bạn có thể sử dụng chúng thay thế cho nhau đến một thời điểm nhất định.

Nhưng chắc chắn có sự khác biệt rõ ràng giữa mỗi chức năng.

Sự khác biệt

Bảng sau đây trình bày sự khác biệt giữa các chức năng này:

Hàm Ghi đè nếu đã tồn tại? Tạo nếu không tồn tại?
json_insert() Không
json_replace() Không
json_set()

Vì vậy, sự khác biệt giữa các chức năng này là ở cách chúng xử lý các khóa / giá trị tồn tại và không tồn tại.

Ví dụ

Dưới đây là một số ví dụ đơn giản để chứng minh cách mỗi hàm xử lý như thế nào với các khóa / giá trị tồn tại và không tồn tại.

Khi khóa đã tồn tại

Dưới đây là cách mỗi chức năng giải quyết việc cập nhật khóa đã tồn tại:

SELECT 
    json_insert('{ "a" : 1 }', '$.a', 2) AS json_insert,
    json_replace('{ "a" : 1 }', '$.a', 2) AS json_replace,
    json_set('{ "a" : 1 }', '$.a', 2) AS json_set;

Kết quả:

+-------------+--------------+----------+
| json_insert | json_replace | json_set |
+-------------+--------------+----------+
| {"a":1}     | {"a":2}      | {"a":2}  |
+-------------+--------------+----------+

Chúng ta có thể thấy rằng json_insert() không cập nhật bất cứ điều gì, nhưng hai chức năng khác đã làm.

Điều tương tự với mảng:

SELECT 
    json_insert('[ 1, 2, 3 ]', '$[1]', 4) AS json_insert,
    json_replace('[ 1, 2, 3 ]', '$[1]', 4) AS json_replace,
    json_set('[ 1, 2, 3 ]', '$[1]', 4) AS json_set;

Kết quả:

+-------------+--------------+----------+
| json_insert | json_replace | json_set |
+-------------+--------------+----------+
| [1,2,3]     | [1,4,3]      | [1,4,3]  |
+-------------+--------------+----------+

Khi chìa khóa không tồn tại

Đây là những gì sẽ xảy ra khi khóa không tồn tại:

SELECT 
    json_insert('{ "a" : 1 }', '$.b', 2) AS json_insert,
    json_replace('{ "a" : 1 }', '$.b', 2) AS json_replace,
    json_set('{ "a" : 1 }', '$.b', 2) AS json_set;

Kết quả:

+---------------+--------------+---------------+
|  json_insert  | json_replace |   json_set    |
+---------------+--------------+---------------+
| {"a":1,"b":2} | {"a":1}      | {"a":1,"b":2} |
+---------------+--------------+---------------+

Chúng ta có thể thấy rằng json_replace() đã không chèn cặp khóa / giá trị mới, nhưng hai hàm còn lại đã thực hiện.

Tương tự với các mảng:

SELECT 
    json_insert('[ 1, 2, 3 ]', '$[3]', 4) AS json_insert,
    json_replace('[ 1, 2, 3 ]', '$[3]', 4) AS json_replace,
    json_set('[ 1, 2, 3 ]', '$[3]', 4) AS json_set;

Kết quả:

+-------------+--------------+-----------+
| json_insert | json_replace | json_set  |
+-------------+--------------+-----------+
| [1,2,3,4]   | [1,2,3]      | [1,2,3,4] |
+-------------+--------------+-----------+

Điều này cũng có thể được thực hiện bằng cách sử dụng [#] đường dẫn:

SELECT 
    json_insert('[ 1, 2, 3 ]', '$[#]', 4) AS json_insert,
    json_replace('[ 1, 2, 3 ]', '$[#]', 4) AS json_replace,
    json_set('[ 1, 2, 3 ]', '$[#]', 4) AS json_set;

Kết quả:

+-------------+--------------+-----------+
| json_insert | json_replace | json_set  |
+-------------+--------------+-----------+
| [1,2,3,4]   | [1,2,3]      | [1,2,3,4] |
+-------------+--------------+-----------+

Một lợi ích của việc sử dụng [#] là bạn không cần biết có bao nhiêu phần tử đã có trong mảng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chương trình Android để chuyển đổi cơ sở dữ liệu SQLite sang excel

  2. Cách sử dụng lớp databasehelper trong lớp asynctask làm việc trên một lớp khác

  3. Đính kèm Cơ sở dữ liệu trong SQLite

  4. SQLiteOpenHelper:phương thức onCreate () không được gọi trên thiết bị vật lý

  5. SQLite - Không thể mở tệp cơ sở dữ liệu