MySQL - JSON: Hướng dẫn tổng quan cho người mới bắt đầu

Xin chào các bạn đam mê cơ sở dữ liệu! Chào mừng các bạn đến với hành trình thú vị vào thế giới của MySQL và JSON. Là người giáo viên khoa học máy tính ở gần nhà, tôi rất vui mừng được hướng dẫn các bạn trong chuyến phiêu lưu này. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - chúng ta sẽ bắt đầu từ những điều cơ bản và dần dần nâng cao. Vậy, hãy lấy một tách cà phê (hoặc trà, nếu đó là sở thích của bạn), và cùng nhau bắt đầu nhé!

MySQL - JSON

MySQL JSON: Cặp đôi linh hoạt

Nhớ lại khi bạn còn nhỏ, bạn có một món đồ chơi có thể biến thành nhiều hình dạng khác nhau phải không? Well, JSON trong MySQL cũng giống như vậy - nó linh hoạt, đa năng và có thể lưu trữ nhiều loại dữ liệu khác nhau. Nhưng trước khi chúng ta quá háo hức, hãy cùng phân tích nó.

JSON là gì?

JSON viết tắt của JavaScript Object Notation. Đây là một định dạng dữ liệu nhẹ, dễ đọc và viết cho con người, và dễ phân tích và tạo ra cho máy móc. Hãy tưởng tượng nó như một cách để lưu trữ dữ liệu một cách có cấu trúc và tổ chức - như một tủ tài liệu kỹ thuật số rất ngăn nắp.

Tại sao cần JSON trong MySQL?

Bạn có thể tự hỏi, "Tại sao chúng ta cần JSON trong MySQL? MySQL đã rất giỏi trong việc lưu trữ dữ liệu rồi phải không?" Đó là một câu hỏi tuyệt vời! Mặc dù MySQL rất tuyệt vời trong việc lưu trữ dữ liệu có cấu trúc trong các bảng, nhưng đôi khi chúng ta cần nhiều sự linh hoạt hơn. Đó là lúc JSON phát huy tác dụng. Nó cho phép chúng ta lưu trữ dữ liệu phức tạp, phân cấp trong một cột duy nhất.

Hãy xem một ví dụ đơn giản:

CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
preferences JSON
);

INSERT INTO users (id, name, preferences) VALUES
(1, 'Alice', '{"theme": "dark", "font_size": 14, "notifications": true}');

Trong ví dụ này, chúng ta đã tạo một bảng叫做 users với một cột JSON tên là preferences. Chúng ta có thể lưu trữ nhiều sở thích người dùng trong một trường duy nhất, điều này linh hoạt hơn nhiều so với việc tạo ra các cột riêng biệt cho mỗi sở thích.

Truy xuất dữ liệu từ cột JSON

Bây giờ chúng ta đã lưu trữ một số dữ liệu JSON, làm thế nào để chúng ta lấy nó ra? MySQL cung cấp nhiều hàm để giúp chúng ta làm việc với dữ liệu JSON. Hãy cùng khám phá một số trong số đó!

Hàm JSON_EXTRACT()

Hàm JSON_EXTRACT() giống như một bản đồ kho báu - nó giúp chúng ta tìm thấy các phần dữ liệu cụ thể trong JSON. Dưới đây là cách chúng ta sử dụng nó:

SELECT name, JSON_EXTRACT(preferences, '$.theme') AS theme
FROM users
WHERE id = 1;

Truy vấn này sẽ trả về tên của Alice và chủ đề sở thích của cô ấy. Phần '$.theme' được gọi là đường dẫn JSON, và nó chỉ định chính xác nơi MySQL cần tìm trong dữ liệu JSON.

Оператор ->: Một lối tắt

MySQL cũng cung cấp một оператор viết tắt -> có tác dụng tương tự như JSON_EXTRACT(). Nó giống như việc đi một lối tắt qua công viên thay vì đi vòng vòng. Dưới đây là cách nó trông như thế nào:

SELECT name, preferences->'$.theme' AS theme
FROM users
WHERE id = 1;

Truy vấn này sẽ cho chúng ta kết quả tương tự như trước, nhưng ngắn gọn hơn. Đẹp phải không?

Hàm JSON_UNQUOTE(): Loại bỏ những dấu ngoặc

Đôi khi, khi chúng ta trích xuất dữ liệu từ cột JSON, nó sẽ có dấu ngoặc xung quanh. Điều này không phải lúc nào cũng là điều chúng ta muốn. Đó là lúc hàm JSON_UNQUOTE() phát huy tác dụng - nó giống như mộteraser dấu ngoặc cho dữ liệu JSON của chúng ta.

SELECT name, JSON_UNQUOTE(preferences->'$.theme') AS theme
FROM users
WHERE id = 1;

Truy vấn này sẽ trả về sở thích chủ đề của Alice mà không có dấu ngoặc. Đây là một điều nhỏ, nhưng nó có thể làm cho dữ liệu của chúng ta dễ dàng làm việc hơn!

Hàm JSON_TYPE(): Điều gì trong hộp?

Bạn có bao giờ nhận được một món quà bí ẩn và cố gắng đoán xem bên trong có gì bằng cách lắc nó không? Hàm JSON_TYPE() cũng giống như vậy, nhưng cho dữ liệu JSON. Nó cho chúng ta biết chúng ta đang dealing với loại giá trị nào.

SELECT JSON_TYPE('{"name": "Alice", "age": 30}') AS json_type;

Truy vấn này sẽ trả về 'OBJECT', vì chúng ta đã cung cấp cho nó một đối tượng JSON. Nếu chúng ta thử JSON_TYPE('[1, 2, 3]'), nó sẽ trả về 'ARRAY'. Nó rất hữu ích khi chúng ta không chắc chắn về loại dữ liệu chúng ta đang làm việc với.

Hàm JSON_ARRAY_APPEND(): Thêm vào bộ sưu tập của chúng ta

Hãy tưởng tượng bạn có một danh sách các sách yêu thích của mình, và bạn muốn thêm một cuốn sách mới. Đó là điều mà JSON_ARRAY_APPEND() làm cho các mảng JSON. Hãy xem nó trong hành động:

UPDATE users
SET preferences = JSON_ARRAY_APPEND(preferences, '$.favorite_colors', 'green')
WHERE id = 1;

Truy vấn này thêm 'green' vào danh sách màu sắc yêu thích của Alice. Nếu danh sách không tồn tại trước đó, MySQL sẽ tạo nó cho chúng ta. Thật chu đáo phải không?

Hàm JSON_ARRAY_INSERT(): Chèn vào

Đôi khi, chúng ta muốn thêm một thứ vào danh sách của mình, nhưng ở một vị trí cụ thể. Đó là lúc JSON_ARRAY_INSERT() phát huy tác dụng. Nó giống như việc chen vào một vị trí cụ thể trong một Elevator chật kín.

UPDATE users
SET preferences = JSON_ARRAY_INSERT(preferences, '$.favorite_numbers[0]', 42)
WHERE id = 1;

Truy vấn này chèn số 42 vào đầu danh sách số yêu thích của Alice. Nếu danh sách không tồn tại, MySQL sẽ tạo nó và thêm 42 là phần tử đầu tiên (và duy nhất).

Sử dụng JSON với Chương trình Khách: Kết hợp tất cả

Bây giờ chúng ta đã học được tất cả các hàm JSON này, hãy xem chúng ta có thể sử dụng chúng trong một tình huống thực tế như thế nào. Hãy tưởng tượng chúng ta đang xây dựng một hệ thống hồ sơ người dùng đơn giản cho một trang web.

-- Tạo bảng người dùng của chúng ta
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
profile JSON
);

-- Thêm một người dùng
INSERT INTO users (username, profile) VALUES
('coolcoder42', '{"name": "Alex", "age": 25, "skills": ["Python", "JavaScript"], "contact": {"email": "[email protected]", "phone": "123-456-7890"}}');

-- Truy xuất thông tin người dùng
SELECT username,
JSON_UNQUOTE(profile->'$.name') AS name,
profile->'$.age' AS age,
JSON_UNQUOTE(profile->'$.skills[0]') AS primary_skill,
JSON_UNQUOTE(profile->'$.contact.email') AS email
FROM users
WHERE username = 'coolcoder42';

-- Cập nhật thông tin người dùng
UPDATE users
SET profile = JSON_SET(
profile,
'$.age', 26,
'$.skills[2]', 'MySQL',
'$.contact.twitter', '@coolcoder42'
)
WHERE username = 'coolcoder42';

-- Kiểm tra hồ sơ đã cập nhật
SELECT profile
FROM users
WHERE username = 'coolcoder42';

Trong ví dụ này, chúng ta đã tạo một hồ sơ người dùng, truy xuất thông tin cụ thể từ nó, và sau đó cập nhật nó với dữ liệu mới. Rất tuyệt vời phải không?

Kết luận: Hành trình JSON của bạn bắt đầu!

Và thế là bạn đã có nó, các bạn! Chúng ta đã đi qua các основы JSON trong MySQL, từ việc tạo cột JSON đến việc manipulatings dữ liệu JSON với các hàm khác nhau. Nhớ rằng, như bất kỳ cuộc phiêu lưu nào, việc thành thạo JSON trong MySQL đòi hỏi sự thực hành và kiên nhẫn. Đừng sợ hãi khi thử nghiệm và mắc lỗi - đó là cách chúng ta học hỏi!

Khi kết thúc, đây là bảng tóm tắt các hàm JSON chúng ta đã học:

Hàm Mục đích
JSON_EXTRACT() Truy xuất dữ liệu từ JSON
-> operator Viết tắt cho JSON_EXTRACT()
JSON_UNQUOTE() Loại bỏ dấu ngoặc từ giá trị JSON
JSON_TYPE() Xác định loại giá trị JSON
JSON_ARRAY_APPEND() Thêm phần tử vào mảng JSON
JSON_ARRAY_INSERT() Chèn phần tử vào mảng JSON tại vị trí cụ thể
JSON_SET() Đặt giá trị trong dữ liệu JSON

Giữ bảng này làm tài liệu tham khảo nhanh khi bạn tiếp tục phiêu lưu JSON trong MySQL. Nhớ rằng, chìa khóa để trở thành một người thạo MySQL JSON là thực hành, thực hành, thực hành! Vậy hãy đi tiếp, thử nghiệm, và chúc may mắn trong việc truy vấn dữ liệu của bạn!

Credits: Image by storyset