MySQL8 中文参考(八十三)(5)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL8 中文参考(八十三)

MySQL8 中文参考(八十三)(4)https://developer.aliyun.com/article/1565959


22.3.5 表中的文档

原文:dev.mysql.com/doc/refman/8.0/en/mysql-shell-tutorial-javascript-documents-in-tables.html

在 MySQL 中,表可以包含传统的关系数据、JSON 值或两者兼有。您可以通过将文档存储在具有本机JSON数据类型的列中,将传统数据与 JSON 文档结合起来。

本节示例使用world_x模式中的 city 表。

city 表描述

city 表有五列(或字段)。

+---------------+------------+-------+-------+---------+------------------+
| Field         | Type       | Null  | Key   | Default | Extra            |
+---------------+------------+-------+-------+---------+------------------+
| ID            | int(11)    | NO    | PRI   | null    | auto_increment   |
| Name          | char(35)   | NO    |       |         |                  |
| CountryCode   | char(3)    | NO    |       |         |                  |
| District      | char(20)   | NO    |       |         |                  |
| Info          | json       | YES   |       | null    |                  |
+---------------+------------+-------+-------+---------+------------------+
插入一条记录

要将文档插入到表的列中,请按正确顺序向values()方法传递一个格式良好的 JSON 文档。在下面的示例中,一个文档作为最终值传递到 Info 列中以进行插入。

mysql-js> db.city.insert().values(
None, "San Francisco", "USA", "California", '{"Population":830000}')
选择一条记录

您可以发出带有评估表达式中文档值的搜索条件的查询。

mysql-js> db.city.select(["ID", "Name", "CountryCode", "District", "Info"]).where(
"CountryCode = :country and Info->'$.Population' > 1000000").bind(
'country', 'USA')
+------+----------------+-------------+----------------+-----------------------------+
| ID   | Name           | CountryCode | District       | Info                        |
+------+----------------+-------------+----------------+-----------------------------+
| 3793 | New York       | USA         | New York       | {"Population": 8008278}     |
| 3794 | Los Angeles    | USA         | California     | {"Population": 3694820}     |
| 3795 | Chicago        | USA         | Illinois       | {"Population": 2896016}     |
| 3796 | Houston        | USA         | Texas          | {"Population": 1953631}     |
| 3797 | Philadelphia   | USA         | Pennsylvania   | {"Population": 1517550}     |
| 3798 | Phoenix        | USA         | Arizona        | {"Population": 1321045}     |
| 3799 | San Diego      | USA         | California     | {"Population": 1223400}     |
| 3800 | Dallas         | USA         | Texas          | {"Population": 1188580}     |
| 3801 | San Antonio    | USA         | Texas          | {"Population": 1144646}     |
+------+----------------+-------------+----------------+-----------------------------+
9 rows in set (0.01 sec)
相关信息
  • 有关更多信息,请参阅与关系表和文档一起工作。
  • 有关数据类型的详细描述,请参阅第 13.5 节,“JSON 数据类型”。

22.4 Python 快速入门指南:MySQL Shell 用于文档存储

原文:dev.mysql.com/doc/refman/8.0/en/mysql-shell-tutorial-python.html

22.4.1 MySQL Shell

22.4.2 下载和导入 world_x 数据库

22.4.3 文档和集合

22.4.4 关系表

22.4.5 表中的文档

本快速入门指南提供了使用 MySQL Shell 与文档存储应用程序进行交互原型设计的说明。该指南包括以下主题:

  • MySQL 功能、MySQL Shell 和 world_x 示例模式的简介。
  • 管理集合和文档的操作。
  • 管理关系表的操作。
  • 适用于表中文档的操作。

要按照这个快速入门指南,您需要安装了 X 插件的 MySQL 服务器,默认情况下在 8.0 版本中,以及用作客户端的 MySQL  Shell。MySQL Shell 包括 X DevAPI,它在 JavaScript 和 Python 中都有实现,使您能够使用 X  协议连接到 MySQL 服务器实例,并将服务器用作文档存储。

相关信息

  • MySQL Shell 8.0 提供了有关 MySQL Shell 的更深入信息。
  • 有关本快速入门指南中使用的工具的更多信息,请参阅安装 MySQL Shell 和第 22.5 节,“X 插件”。
  • 有关 MySQL Shell 支持的语言的更多信息,请参阅支持的语言。
  • X DevAPI 用户指南提供了更多使用 X DevAPI 开发使用 MySQL 作为文档存储的应用程序的示例。
  • 还提供了一个 JavaScript 快速入门指南。

22.4.1 MySQL Shell

译文:dev.mysql.com/doc/refman/8.0/en/mysql-shell-tutorial-python-shell.html

本快速入门指南假定您对 MySQL Shell 有一定的熟悉度。以下部分是一个高级概述,请参阅 MySQL Shell  文档以获取更多信息。MySQL Shell 是到 MySQL 服务器的统一脚本接口。它支持 JavaScript 和 Python  脚本。JavaScript 是默认处理模式。

启动 MySQL Shell

安装并启动 MySQL 服务器后,将 MySQL Shell 连接到服务器实例。您需要知道要连接的 MySQL  服务器实例的地址。为了能够将实例用作文档存储,服务器实例必须安装 X 插件,并且您应该使用 X 协议连接到服务器。例如,要连接到默认 X  协议端口 33060 上的实例 ds1.example.com,请使用网络字符串 *user*@ds1.example.com:33060

提示

如果您使用经典的 MySQL 协议连接到实例,例如使用默认的port 3306 而不是mysqlx_port,则无法使用本教程中显示的文档存储功能。例如,db全局对象未填充。要使用文档存储,始终使用 X 协议连接。

如果 MySQL Shell 尚未运行,请打开终端窗口并输入:

mysqlsh *user*@ds1.example.com:33060/world_x

或者,如果 MySQL Shell 已经在运行,请使用\connect命令:

\connect *user*@ds1.example.com:33060/world_x

您需要指定要连接到的 MySQL 服务器实例的地址。例如,在上一个示例中:

  • *user*代表您的 MySQL 帐户的用户名。
  • ds1.example.com是运行 MySQL 的服务器实例的主机名。请将其替换为您正在使用作为文档存储的 MySQL 服务器实例的主机名。
  • 本会话的默认模式为world_x。有关设置world_x模式的说明,请参见第 22.4.2 节,“下载和导入 world_x 数据库”。

有关更多信息,请参见第 6.2.5 节,“使用类似 URI 字符串或键值对连接到服务器”。

当 MySQL Shell 打开时,mysql-js>提示表示此会话的活动语言为 JavaScript。要将 MySQL Shell 切换到 Python 模式,请使用\py命令。

mysql-js> \py
Switching to Python mode...
mysql-py>

MySQL Shell 支持输入行编辑如下:

  • 左箭头右箭头键在当前输入行内水平移动。
  • 上箭头下箭头键在先前输入的行集中上下移动。
  • Backspace删除光标前的字符,并输入新字符以在光标位置输入它们。
  • Enter将当前输入行发送到服务器。
获取 MySQL Shell 帮助

在命令解释器提示符处键入mysqlsh --help以获取命令行选项列表。

mysqlsh --help

在 MySQL Shell 提示符处键入\help以获取可用命令及其描述的列表。

mysql-py> \help

在命令后键入\help,可获取有关单个 MySQL Shell 命令的详细帮助。例如,要查看\connect命令的帮助,请执行以下操作:

mysql-py> \help \connect
退出 MySQL Shell

要退出 MySQL Shell,请执行以下命令:

mysql-py> \quit
相关信息
  • 查看交互式代码执行以了解 MySQL Shell 中交互式代码执行的工作原理。
  • 查看使用 MySQL Shell 入门以了解会话和连接选项。

22.4.2 下载并导入 world_x 数据库

原文:dev.mysql.com/doc/refman/8.0/en/mysql-shell-tutorial-python-download.html

作为快速入门指南的一部分,提供了一个示例模式,称为world_x模式。许多示例演示了使用此模式的文档存储功能。启动您的 MySQL 服务器以加载world_x模式,然后按照以下步骤操作:

  1. 下载world_x-db.zip
  2. 将安装归档文件提取到临时位置,如/tmp/。解压缩归档文件会生成一个名为world_x.sql的单个文件。
  3. world_x.sql文件导入到您的服务器。您可以选择:
  • 在 SQL 模式下启动 MySQL Shell,并通过以下方式导入文件:
mysqlsh -u root --sql --file /tmp/world_x-db/world_x.sql
Enter password: ****
  • 在运行时将 MySQL Shell 设置为 SQL 模式,并通过以下方式源化模式文件:
\sql
Switching to SQL mode... Commands end with ;
\source /tmp/world_x-db/world_x.sql
  1. /tmp/替换为您系统上world_x.sql文件的路径。如果提示,请输入密码。只要账户有权限创建新模式,非 root 账户也可以使用。
world_x 模式

world_x示例模式包含以下 JSON 集合和关系表:

  • 集合
  • countryinfo:世界各国的信息。
  • country:世界各国的最少信息。
  • city:这些国家中一些城市的信息。
  • countrylanguage:每个国家使用的语言。
相关信息
  • MySQL Shell 会话解释了会话类型。

22.4.3 文档和集合

原文:dev.mysql.com/doc/refman/8.0/en/mysql-shell-tutorial-python-documents-collections.html

22.4.3.1 创建、列出和删除集合

22.4.3.2 使用集合

22.4.3.3 查找文档

22.4.3.4 修改文档

22.4.3.5 删除文档

22.4.3.6 创建和删除索引

当您将 MySQL 用作文档存储时,集合是您可以创建、列出和删除的模式内的容器。集合包含您可以添加、查找、更新和删除的 JSON 文档。

本节示例使用world_x模式中的countryinfo集合。有关设置world_x模式的说明,请参见第 22.4.2 节,“下载和导入 world_x 数据库”。

文档

在 MySQL 中,文档被表示为 JSON 对象。在内部,它们以一种高效的二进制格式存储,可以实现快速查找和更新。

  • Python 的简单文档格式:
{"field1": "value", "field2" : 10, "field 3": null}

一组文档由一组由逗号分隔并包含在[]字符中的文档组成。

  • Python 的简单文档数组:
[{"Name": "Aruba", "Code:": "ABW"}, {"Name": "Angola", "Code:": "AGO"}]

MySQL 支持 JSON 文档中以下 Python 值类型:

  • 数字(整数和浮点数)
  • 字符串
  • 布尔值(False 和 True)

  • 更多 JSON 值的数组
  • 更多 JSON 值的嵌套(或嵌入)对象
集合

集合是共享目的并可能共享一个或多个索引的文档的容器。每个集合都有一个唯一的名称,并存在于单个模式中。

术语模式等同于数据库,意味着一组数据库对象,而不是用于强制数据结构和约束的关系模式。模式不会对集合中的文档强制一致性。

在这个快速入门指南中:

  • 基本对象包括:
对象形式 描述
db db 是分配给当前活动模式的全局变量。当您想对模式运行操作时,例如检索集合,您可以使用db变量可用的方法。
db.get_collections() db.get_collections() 返回模式中集合的列表。使用列表获取对集合对象的引用,对其进行迭代等。

  • 由集合范围内的基本操作包括:
操作形式 描述
db.*name*.add() add() 方法将一个或多个文档插入到指定集合中。
db.*name*.find() find() 方法返回指定集合中的一些或所有文档。
db.*name*.modify() modify() 方法更新指定集合中的文档。
db.*name*.remove() remove() 方法从指定集合中删除一个或多个文档。

相关信息
  • 查看操作集合以获取一般概述。
  • CRUD EBNF 定义 提供了操作的完整列表。

原文:dev.mysql.com/doc/refman/8.0/en/mysql-shell-tutorial-python-collections-operations.html

22.4.3.1 创建、列出和删除集合

在 MySQL Shell 中,您可以创建新集合,在模式中获取现有集合的列表,并从模式中删除现有集合。集合名称区分大小写,每个集合名称必须是唯一的。

确认模式

要显示分配给模式变量的值,请执行:

mysql-py> db

如果模式值不是Schema:world_x,则通过执行以下命令设置db变量:

mysql-py> \use world_x
创建一个集合

要在现有模式中创建新集合,请使用db对象的createCollection()方法。以下示例在world_x模式中创建一个名为flags的集合。

mysql-py> db.create_collection("flags")

该方法返回一个集合对象。

<Collection:flags>
列出集合

要显示world_x模式中的所有集合,请使用db对象的get_collections()方法。当前连接到的服务器返回的集合将显示在括号之间。

mysql-py> db.get_collections()
[
    <Collection:countryinfo>,
    <Collection:flags>
]
删除一个集合

要从模式中删除现有集合,请使用db对象的drop_collection()方法。例如,要从当前模式中删除flags集合,请执行:

mysql-py> db.drop_collection("flags")

drop_collection()方法也可用于在 MySQL Shell 中从模式中删除关系表。

相关信息
  • 查看集合对象以获取更多示例。

原文:dev.mysql.com/doc/refman/8.0/en/mysql-shell-tutorial-python-documents-add.html

22.4.3.2 处理集合

要处理模式中的集合,请使用db全局对象访问当前模式。在此示例中,我们使用之前导入的world_x模式和countryinfo集合。因此,您发出的操作的格式是db.*collection_name*.operation,其中*collection_name*是执行操作的集合的名称。在以下示例中,操作是针对countryinfo集合执行的。

添加文档

使用add()方法将一个文档或文档列表插入到现有集合中。将以下文档插入到countryinfo集合中。由于这是多行内容,请按两次Enter键以插入文档。

mysql-py> db.countryinfo.add(
 {
    "GNP": .6,
    "IndepYear": 1967,
    "Name": "Sealand",
    "Code:": "SEA",
    "demographics": {
        "LifeExpectancy": 79,
        "Population": 27
    },
    "geography": {
        "Continent": "Europe",
        "Region": "British Islands",
        "SurfaceArea": 193
    },
    "government": {
        "GovernmentForm": "Monarchy",
        "HeadOfState": "Michael Bates"
    }
  }
)

该方法返回操作的状态。您可以通过搜索文档来验证操作。例如:

mysql-py> db.countryinfo.find("Name = 'Sealand'")
{
    "GNP": 0.6,
    "_id": "00005e2ff4af00000000000000f4",
    "Name": "Sealand",
    "Code:": "SEA",
    "IndepYear": 1967,
    "geography": {
        "Region": "British Islands",
        "Continent": "Europe",
        "SurfaceArea": 193
    },
    "government": {
        "HeadOfState": "Michael Bates",
        "GovernmentForm": "Monarchy"
    },
    "demographics": {
        "Population": 27,
        "LifeExpectancy": 79
    }
}

请注意,除了在添加文档时指定的字段之外,还有一个字段,即_id。每个文档都需要一个名为_id的标识符字段。_id字段的值在同一集合中的所有文档中必须是唯一的。在 MySQL 8.0.11 及更高版本中,文档 ID 是由服务器生成的,而不是客户端,因此 MySQL Shell 不会自动设置_id值。如果文档不包含_id字段,MySQL 8.0.11 或更高版本的服务器会设置_id值。在较早的 8.0 版本或 5.7 版本的 MySQL 服务器中,在这种情况下不会设置_id值,因此您必须明确指定。如果不指定,MySQL Shell 将返回错误 5115 文档缺少必需字段。更多信息请参见理解文档 ID。

相关信息
  • 请查看 CollectionAddFunction 以获取完整的语法定义。
  • 请查看理解文档 ID。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
关系型数据库 MySQL Unix
MySQL8 中文参考(二十三)(3)
MySQL8 中文参考(二十三)
62 4
|
6月前
|
存储 缓存 关系型数据库
MySQL8 中文参考(二十一)(5)
MySQL8 中文参考(二十一)
88 3
|
6月前
|
存储 监控 Java
MySQL8 中文参考(二十一)(4)
MySQL8 中文参考(二十一)
152 3
|
6月前
|
存储 安全 关系型数据库
MySQL8 中文参考(二十一)(1)
MySQL8 中文参考(二十一)
55 3
|
6月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十一)(3)
MySQL8 中文参考(二十一)
78 2
|
6月前
|
关系型数据库 MySQL Unix
MySQL8 中文参考(二十一)(2)
MySQL8 中文参考(二十一)
81 2
|
6月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8 中文参考(二十五)(5)
MySQL8 中文参考(二十五)
52 2
|
6月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十四)(1)
MySQL8 中文参考(二十四)
60 2
|
6月前
|
NoSQL 关系型数据库 MySQL
MySQL8 中文参考(二十三)(2)
MySQL8 中文参考(二十三)
64 2
|
6月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十三)(1)
MySQL8 中文参考(二十三)
38 2