Tôi khuyên bạn nên tìm hiểu kỹ hơn về hàm JSON_TABLE, hàm này trích xuất dữ liệu từ tài liệu JSON và trả về dưới dạng bảng quan hệ… Thật tuyệt vời
Tuy nhiên MySQL 8. 0 cung cấp một cách khác để xử lý tài liệu JSON, thực tế là theo cách tiếp cận “Không chỉ SQL” [NoSQL]…
Nói cách khác, nếu bạn cần/muốn quản lý tài liệu [bộ sưu tập] JSON theo cách không . 0.
Bạn có biết điều đó không?
Kiến trúc cửa hàng tài liệu MySQL
Hãy có một cái nhìn tổng quan nhanh về kiến trúc
- Plugin X – Plugin X cho phép MySQL sử dụng Giao thức X và sử dụng Trình kết nối và Shell để đóng vai trò là ứng dụng khách cho máy chủ
- Giao thức X – Giao thức X là một giao thức máy khách mới dựa trên thư viện Protobuf và hoạt động cho cả hoạt động CRUD và SQL
- X DevAPI – X DevAPI là API nhà phát triển không đồng bộ, hiện đại, mới cho các hoạt động CRUD và SQL trên Giao thức X. Nó giới thiệu Bộ sưu tập dưới dạng đối tượng Schema mới. Tài liệu được lưu trữ trong Bộ sưu tập và được đặt hoạt động CRUD chuyên dụng của chúng
- MySQL Shell – MySQL Shell là một giao diện Javascript, Python hoặc SQL tương tác hỗ trợ phát triển và quản trị cho Máy chủ MySQL. Bạn có thể sử dụng MySQL Shell để thực hiện các truy vấn và cập nhật dữ liệu cũng như các hoạt động quản trị khác nhau
- Trình kết nối MySQL – Trình kết nối hỗ trợ Giao thức X và cho phép bạn sử dụng X DevAPI bằng ngôn ngữ bạn đã chọn [Node. js – PHP – Python – Java –. NET – C++,…]
Viết ứng dụng bằng X DevAPI
Với tư cách là người từ chối trách nhiệm, tôi không phải là nhà phát triển, vì vậy xin lỗi vì không có mã ưa thích nào trong bài đăng trên blog này.
Tuy nhiên, tin tốt là tôi có thể cho bạn thấy rằng bạn sẽ có thể tìm thấy tài nguyên dành cho nhà phát triển MySQL tốt nhất từ trước đến nay 🙂 đó là.
https. //bên trongmysql. com/
Và để bắt đầu, tôi khuyên bạn nên tập trung vào các bài viết sau
- Nút. JS
- https. //bên trongmysql. com/giới thiệu-kết nối-nút-js-for-mysql-8-0/
- con trăn
- https. //bên trongmysql. com/using-mysql-connector-python-8-0-with-mysql-8-0/
- MẠNG LƯỚI
- https. //bên trongmysql. com/introducing-connector-net-with-full-support-for-mysql-8-0/
- Java
- https. //bên trongmysql. com/connector-j-8-0-11-the-face-cho-cơ-sở-dữ-liệu-định-hướng-tài-liệu-mới-của-bạn/
- PHP
- https. //bên trongmysql. com/introducing-the-mysql-x-devapi-php-extension-for-mysql-8-0/
- C++
- https. //bên trongmysql. com/co-tinh-tinh-trong-connector-c-8-0/
- ODBC
- https. //bên trongmysql. com/chuyen-tinh-tinh-trong-connector-odbc-8-0/
Và tất nhiên là cả những bài viết mới nhất.
Hơn nữa, một tài nguyên khác sẽ hữu ích cho bạn là
Hướng dẫn sử dụng X DevAPI
Sử dụng Kho lưu trữ tài liệu với MySQL Shell
Nếu bạn là một DBA, OPS và rõ ràng là một nhà phát triển, cách đơn giản nhất để sử dụng [hoặc kiểm tra] MySQL Document Store, là với MySQL Shell
MySQL Shell là trình bao quản trị và phát triển tích hợp, trong đó tất cả các sản phẩm MySQL sẽ có sẵn thông qua một giao diện tập lệnh chung.
Bạn nào chưa biết thì tải về nhé.
Tin tôi đi, bạn sẽ thích nó.
Các tính năng chính của MySQL Shell là
- Viết kịch bản cho chế độ Javascript, Python và SQL
- Hỗ trợ giao thức MySQL Standard và X
- Tài liệu và mô hình quan hệ
- Tài liệu CRUD và API quan hệ thông qua tập lệnh
- Các định dạng kết quả đầu ra được phân tách bằng Bảng, JSON, Tab truyền thống
- Cả hoạt động tương tác và hàng loạt
Ghi chú
MySQL Shell cũng là một thành phần chính của MySQL InnoDB Cluster. Trong bối cảnh này, nó cho phép bạn triển khai và quản lý cụm Sao chép nhóm MySQL
Xem hướng dẫn MySQL InnoDB Cluster của tôi
Các bước đầu tiên với MySQL Shell
Hãy kết nối với Máy chủ MySQL bằng MySQL Shell [mysqlsh]
1
2
3
4
5
6
$ mysqlsh root@myHost
MySQL Shell 8. 0. 15
.. . cắt . . .
Kết nối MySQL của bạn id là 15 [X protocol]
Phiên bản máy chủ version. 8. 0. 15 MySQL Cộng đồng Máy chủ - GPL
Không mặc định lược đồ được chọn; type \use to set one.
Chúng ta phải ở trong phiên X để sử dụng MySQL làm kho lưu trữ tài liệu. May mắn thay, không có bước bổ sung nào, vì đó là mặc định trong MySQL 8. 0. Lưu ý rằng cổng “X” mặc định là 33060.
Bạn có thể kiểm tra xem mình có đang ở trong phiên X hay không bằng cách sử dụng giao thức X
1
2
3
4
5
6
7
8
9
10
11
12
13
MySQL myHost. 33060+ JS> phiên
MySQL myHost. 33060+ JS> \status
.. . cắt. . .
Phiên loại. X
Mặc định lược đồ.
Lược đồ hiện tại.
Phiên bản máy chủ version. 8. 0. 15 MySQL Cộng đồng Máy chủ - GPL
Phiên bản giao thức. giao thức X protocol
.. . cắt. . .
Nếu bạn được kết nối trong phiên cổ điển, bạn sẽ nhận được thông tin đầu vào sau [lưu ý “ \sql
Chuyển sang chế độ SQL. . . Lệnh kết thúc với ;
MySQL myHost. 3306 SQL> HIỂN THỊ BIẾNLIKE 'mysqlx_port';
+---------------+-------+
| Tên_biến . Giá trị .
+---------------+-------+
| mysqlx_port . 33060 .
+---------------+-------+
Sau đó kết nối lại với máy chủ bằng đúng cổng [33060 theo mặc định] và bạn sẽ ổn thôi
1
2
3
4
5
6
7
8
9
10
11
MySQL myHost. 3306 SQL> \kết nối . root@myHost:33060
.. . cắt. . .
Kết nối MySQL của bạn id là 66 [X protocol]
Phiên bản máy chủ version. 8. 0. 15 MySQL Cộng đồng Máy chủ - GPL
Không mặc định lược đồ được chọn; type \use to set one.
MySQL myHost. 33060+ SQL> \js
Chuyển sang Chế độ JavaScript. . .
MySQL myHost. 33060+ JS> phiên
CRUD
Chúng tôi sẽ tạo một lược đồ [bản demo] nơi chúng tôi sẽ thực hiện các thử nghiệm của mình
1
2
3
4
5
6
MySQL myHost. 33060+ JS> phiên . .createSchema['demo']
MySQL myHost. 33060+ JS> \use demo
Mặc định lược đồ `demo` accessible through db.
Ghi chú
Ngôn ngữ mặc định của MySQL Shell là JavaScript. Tuy nhiên, tất cả các bước được mô tả trong bài viết này cũng có thể được thực hiện bằng Python
e. g
JS> phiên. createSchema['demo']
Py> phiên. create_schema['demo']
Tạo tài liệu
Tạo bộ sưu tập [my_coll1] chèn bản demo lược đồ và chèn tài liệu
1
2
3
4
5
6
MySQL myHost. 33060+ demo JS> . db.createCollection['my_coll1'];
MySQL myHost. 33060+ demo JS> . db.my_coll1. thêm[{"tiêu đề":"MySQL Document Store", "abstract". "SQL bây giờ là tùy chọn. ", "mã". "42"}]
Truy vấn OK, 1 mục affected [0.0358 giây]
Cố gắng thêm một tài liệu JSON không hợp lệ sẽ gây ra lỗi
1
2
MySQL myHost. 33060+ demo JS> . db.my_coll1. add["Đây không phải là tài liệu JSON hợp lệ"] . db.getCollections[]
[
]
Tìm tài liệu
Hiển thị nội dung của một bộ sưu tập với find[]
1
2
3
4
5
6
7
8
9
10
MySQL myHost. 33060+ demo JS> . db.my_coll1. tìm[]
[
{
"_id". "00005c9514e60000000000000053",
"mã". "42",
"tiêu đề". "Kho tài liệu MySQL",
"trừu tượng". "SQL bây giờ là tùy chọn. "
}
]
1 tài liệu trong bộ [0.0029 giây]
Ghi chú
Mỗi tài liệu yêu cầu một trường định danh có tên _id. Giá trị của trường _id phải là duy nhất trong số tất cả các tài liệu trong cùng một bộ sưu tập.
Máy chủ MySQL đặt giá trị _id nếu tài liệu không chứa trường _id.Xin vui lòng đọc. Hiểu ID tài liệu
Bạn có thể thực hiện nhiều thao tác trên tài liệu của mình. Một cách thiết thực để lấy danh sách các chức năng khả dụng là nhấn phím
Ví dụ: nhập db. my_coll1. rồi nhấn
1
2
3
MySQL myHost. 33060+ demo JS> . db.my_coll1.
thêm[] đếm[] dropIndex[] find[] getOne[] getSession[] modify[] remove[] replaceOne[] session
addOrReplaceOne[] createIndex[] existsInDatabase[] getName[] getSchema[] help[] name removeOne[] schema
Bạn cũng có thể sử dụng trợ giúp tích hợp MySQL Shell tuyệt vời [tôi thực sự khuyên bạn nên đọc bài viết của đồng nghiệp Jesper của tôi] và vui lòng đánh dấu trang là blog.
Cuối cùng nhưng không kém phần quan trọng là tài liệu của chúng tôi. Hướng dẫn sử dụng X DevAPI, Tài liệu tham khảo API MySQL Shell JavaSCript & Tài liệu tham khảo API MySQL Shell Python.
sửa đổi tài liệu
Bạn sẽ cần chức năng sửa đổi []
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
MySQL myHost. 33060+ demo JS> . db.my_coll1. tìm["_id='00005c9514e60000000000000053'"].trường["mã"]
[
{
"mã". "42"
}
]
MySQL myHost. 33060+ demo JS> . db.my_coll1. sửa đổi["_id='00005c9514e60000000000000053'"].đặt["mã","2019"]
Truy vấn OK, 1 mục affected [0.0336 giây]
Hàng khớp. 1 Đã thay đổi. 1 Cảnh báo. 0
MySQL myHost. 33060+ demo JS> . db.my_coll1. tìm["_id='00005c9514e60000000000000053'"].trường["mã"]
[
{
"mã". "2019"
}
]
Xóa nội dung khỏi tài liệu
Bạn cũng có thể sửa đổi cấu trúc của tài liệu bằng cách xóa một khóa và nội dung của nó bằng sửa đổi[] và bỏ đặt[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
MySQL myHost. 33060+ demo JS> . db.my_coll1. thêm[{"tiêu đề":"Trích dẫn", "thông báo". "Phấn đấu để trở nên vĩ đại"}]
Truy vấn OK, 1 mục affected [0.0248 giây]
MySQL myHost. 33060+ demo JS> . db.my_coll1. tìm[]
[
{
"_id". "00005c9514e60000000000000053",
"mã". "42",
"tiêu đề". "Kho tài liệu MySQL",
"trừu tượng". "SQL bây giờ là tùy chọn. "
},
{
"_id". "00005c9514e60000000000000054",
"tiêu đề". "Trích dẫn",
"thông báo". "Phấn đấu vì sự vĩ đại"
}
]
2 tài liệu trong bộ [0.0033 giây]
MySQL myHost. 33060+ demo JS> . db.my_coll1. sửa đổi["_id='00005c9514e60000000000000054'"].bỏ đặt["tiêu đề"]
Truy vấn OK, 1 mục affected [0.0203 giây]
Hàng khớp. 1 Đã thay đổi. 1 Cảnh báo. 0
MySQL myHost. 33060+ demo JS> . db.my_coll1. tìm["_id='00005c9514e60000000000000054'"]
[
{
"_id". "00005c9514e60000000000000054",
"thông báo". "Phấn đấu vì sự vĩ đại"
}
]
Xóa tài liệu
Chúng tôi đang thiếu một thao tác quan trọng cuối cùng, xóa tài liệu bằng remove[]
1
2
3
4
5
6
MySQL myHost. 33060+ demo JS> . db.my_coll1. xóa["_id='00005c9514e60000000000000054'"]
Truy vấn OK, 1 mục affected [0.0625 giây]
MySQL myHost. 33060+ demo JS> . db.my_coll1. tìm["_id='00005c9514e60000000000000054'"]
Trống bộ [0. 0003 giây]
Bạn cũng có thể xóa tất cả tài liệu trong bộ sưu tập bằng một lệnh. Để làm như vậy, hãy sử dụng phương thức remove[“true”] mà không chỉ định bất kỳ điều kiện tìm kiếm nào.
Rõ ràng đó thường không phải là một thông lệ tốt…
Nhập tài liệu JSON
Hãy làm việc với bộ sưu tập JSON lớn hơn.
MySQL Shell cung cấp một công cụ rất tiện lợi, có tên là importJson[], để dễ dàng nhập các tài liệu JSON bên trong Máy chủ MySQL của bạn ở dạng tập hợp hoặc bảng.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
MySQL myHost. 33060+ demo JS> . db.getCollections[]
[
]
MySQL myHost. 33060+ demo JS> . util.importJson['GoT_episodes. json']
Đang nhập từ tệp "GoT_episodes. json" đến bộ sưu tập `demo`.`GoT_episodes` trong MySQL . Server at myHost:33060
.. 73. 73
Đã xử lý 47. 74 KB trong 73 tài liệu . 1051 0.1051 giây [694. 75 tài liệu/s]
Tổng số đã nhập thành công tài liệu 73 [694.75 tài liệu/s]
MySQL myHost. 33060+ demo JS> . db.getCollections[]
[
,
]
Bạn có thể tìm nguồn tệp JSON tại đây.
Lưu ý rằng tôi phải thực hiện thêm một bước trước khi nhập dữ liệu.
sed ‘s/}}},{“id”/}}} {“id”/g’ got_episodes. json. BAK > got_episodes. json
Nhân tiện, bạn có thể nhập dữ liệu từ MongoDB sang MySQL \o/
- Nhập dữ liệu từ MongoDB vào MySQL. Các loại dữ liệu BSON
- Nhập dữ liệu từ MongoDB sang MySQL bằng JavaScript
- Nhập dữ liệu từ MongoDB sang MySQL bằng Python
- Chuyển đổi để thể hiện các loại dữ liệu BSON
Không còn lý do gì để thoát khỏi MongoDB nữa 😉
Hãy thực hiện một số truy vấn…
Hiển thị 1 tài liệu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
MySQL myHost. 33060+ demo JS> . db.GoT_tập. tìm[]. giới hạn[1]
[
{
"id". 4952,
"_id". "00005c9514e6000000000000009e",
"url". "http. //www. mê cung tv. com/episodes/4952/game-of-thrones-1x01-winter-is-coming",
"tên". "Mùa đông đến",
"hình ảnh". {
"trung bình". "http. //tĩnh. tvmaze. com/uploads/images/medium_landscape/1/2668. jpg",
"bản gốc". "http. //tĩnh. mê cung tv. com/uploads/images/ original_untouched/1/2668. jpg"
},
"_links". {
"self". {
"href". "http. //api. tvmaze. com/episodes/4952"
}
},
"số". 1,
"mùa". 1,
"ngày phát sóng". "2011-04-17",
"thời gian phát sóng". "21. 00",
"thời gian chạy". 60,
"tóm tắt". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""",
"dấu hàng không". "2011-04-18T01. 00. 00+00. 00"
}
]
Trông giống như dữ liệu liên quan đến một chương trình truyền hình nổi tiếng 🙂
Tất cả các tập từ phần 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
MySQL myHost. 33060+ demo JS> . db.GoT_tập. tìm["season=1"].trường["tên", "summary", "airdate"].sắp xếp["số"]
[
{
"tên". "Mùa đông đến",
"ngày phát sóng". "2011-04-17",
"tóm tắt". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
},
{
"tên". "Hoàng lộ",
"ngày phát sóng". "24-04-2011",
"tóm tắt". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
},
{
"tên". "Chúa tuyết",
"ngày phát sóng". "2011-05-01",
"tóm tắt". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
},
{
"tên". "Những kẻ què quặt, những kẻ khốn nạn và những thứ bị hỏng",
"ngày phát sóng". "2011-05-08",
"tóm tắt". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
},
{
"tên". "Sói và sư tử",
"ngày phát sóng". "15-05-2011",
"tóm tắt". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
},
{
"tên". "Vương miện vàng",
"ngày phát sóng". "22-05-2011",
"tóm tắt". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
},
{
"tên". "Bạn thắng hoặc bạn chết",
"ngày phát sóng". "29-05-2011",
"tóm tắt". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
},
{
"tên". "Đầu nhọn",
"ngày phát sóng". "2011-06-05",
"tóm tắt". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
},
{
"tên". "Baelor",
"ngày phát sóng". "2011-06-12",
"tóm tắt". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
},
{
"tên". "Lửa và Máu",
"ngày phát sóng". "2011-06-19",
"tóm tắt". """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
}
]
Tập đầu tiên của mỗi mùa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
MySQL myHost. 33060+ demo JS> . db.GoT_tập. tìm["number=1"].trường["tên", "airdate", "season"].sắp xếp["mùa"]
[
{
"tên". "Mùa đông đến",
"mùa". 1,
"ngày phát sóng". "17-04-2011"
},
{
"tên". "Miền Bắc Nhớ",
"mùa". 2,
"ngày phát sóng". "2012-04-01"
},
{
"tên". "Valar Dohaeris",
"mùa". 3,
"ngày phát sóng". "31-03-2013"
},
{
"tên". "Hai thanh kiếm",
"mùa". 4,
"ngày phát sóng". "2014-04-06"
},
{
"tên". "Cuộc chiến sắp tới",
"mùa". 5,
"ngày phát sóng". "2015-04-12"
},
{
"tên". "Người đàn bà đỏ",
"mùa". 6,
"ngày phát sóng". "24-04-2016"
},
{
"tên". "Dragonstone",
"mùa". 7,
"ngày phát sóng". "2017-07-16"
},
{
"tên". "TBA",
"mùa". 8,
"ngày phát sóng". "2019-04-14"
}
]
8 tài liệu trong bộ [0.0047 giây]
Tuyên bố chuẩn bị CRUD
Mẫu phổ biến với các kho dữ liệu lưu trữ tài liệu là thực hiện lặp đi lặp lại cùng loại [hoặc tương tự] loại truy vấn đơn giản [e. g. tra cứu dựa trên “id”].
Các truy vấn này có thể được tăng tốc bằng cách sử dụng các câu lệnh đã chuẩn bị sẵn [CRUD].
Ví dụ: nếu ứng dụng của bạn thường sử dụng truy vấn sau
1
2
3
4
5
6
7
MySQL myHost. 33060+ demo JS> . db.GoT_tập. tìm["số=1 VÀ mùa=1"].trường["tên", "airdate"]
[
{
"tên". "Mùa đông đến",
"ngày phát sóng". "17-04-2011"
}
]
Vì vậy, có lẽ nên sử dụng các câu lệnh đã chuẩn bị sẵn.
Đầu tiên chúng ta cần chuẩn bị truy vấn.
1
2
// Chuẩn bị một câu lệnh sử dụng một tham số được đặt tên
var gotEpisode = db. GoT_tập. tìm["số =. số tập VÀ mùa =. seasonNum"]. trường["tên", "airdate"]
Sau đó liên kết giá trị với tham số
1
2
3
4
5
6
7
MySQL myHost. 33060+ demo JS> . gotEpisode.ràng buộc['episodeNum', 1].ràng buộc['seasonNum', 1]
[
{
"tên". "Mùa đông đến",
"ngày phát sóng". "17-04-2011"
}
]
1
2
3
4
5
6
7
MySQL myHost. 33060+ demo JS> . gotEpisode.ràng buộc['episodeNum', 7].ràng buộc['seasonNum', 3]
[
{
"tên". "Gấu và thiếu nữ xinh đẹp",
"ngày phát sóng". "2013-05-12"
}
]
đơn giản là mạnh mẽ
Mục lục
Thật vậy, các chỉ số có liên quan là một phương pháp phổ biến để cải thiện hiệu suất. Kho lưu trữ tài liệu MySQL cho phép bạn lập chỉ mục các khóa của mình bên trong tài liệu JSON