20章使用MySQL作为一个文件存储

目录

20.1关键概念
20.2设置MySQL作为文件存储
20.2.1安装mysql
20.2.2启动mysql
20.3快速入门指南:JavaScript mysql
203.1 .导言
20.3.2导入数据库样本
20.3.3 MySQL的内核
20.3.4文件和收藏
20.3.5关系表
在Tables 20.3.6文件
20.4快速入门指南:python mysql
20.4.1介绍
20.4.2导入数据库样本
20.4.3 MySQL的内核
20.4文件和收藏
20.4.5关系表
在Tables 20.4.6文件
20.5快速入门指南:Visual Studio的MySQL
20.6 x插件
20.6.1检查X插件安装
20.6.2禁用X插件
20.6.3使用安全X插件连接
20.6.4 X插件和缓存SHA-2认证插件
20.6.5 X插件选项和变量
20.6.6监测X插件

本章介绍了一种用MySQL作为文档存储的工作方式,有时也被称为使用NoSQL。如果你的意图是在传统的使用MySQL(SQL)的方式,这一章是不可能与你有关。

关系型数据库如MySQL通常需要文档模式在文件可以存储定义。本节中描述的功能使您能够使用MySQL作为文件存储,这是少了一个模式,因此,模式灵活,存储的文件系统。当使用MySQL作为文档存储、创建文件描述产品,你不需要知道和定义任何产品所有可能的属性存放在他们和他们的工作。这不同于关系数据库和存储在一个表中的产品工作,所有列的表时,必须认识和定义之前添加任何产品数据库。本章描述的功能使您能够选择如何配置MySQL,只使用文档存储模型,或结合的关系模型的功率的文档存储模型的灵活性。

这些部分包括MySQL的使用作为一个文件存储:

20.1关键概念

本节说明了使用MySQL作为文档存储部分的概念。

文件

文件是一组键值对,由一个JSON对象表示。一个文件内使用MySQL二进制JSON对象来表示,通过JSON MySQL数据类型。字段的值可以包含其他文件,数组和列表文件。

{
    "GNP": .6,
    "IndepYear": 1967,
    "Name": "Sealand",
    "_id": "SEA",
    "demographics": {
        "LifeExpectancy": 79,
        "Population": 27
    },
    "geography": {
        "Continent": "Europe",
        "Region": "British Islands",
        "SurfaceArea": 193
    },
    "government": {
        "GovernmentForm": "Monarchy",
        "HeadOfState": "Michael Bates"
    }
}

收藏

集合是一个容器,可用于文档存储在一个MySQL数据库。

CRUD操作

创建、读取、更新和删除(CRUD)操作,可以对数据库表进行收集或4基本操作。从MySQL这意味着:

  • 创建一个新条目(插入或添加)

  • 阅读条目(查询)

  • 更新条目

  • 删除条目

X插件

MySQL服务器插件使通信使用X协议。支持客户实现X devapi允许你使用MySQL作为文件存储。

X协议

一个协议与MySQL服务器上运行X插件交流。X协议支持CRUD和SQL操作,通过SASL认证,允许流(流水线)的命令和可扩展的协议和消息层。

20.2设置MySQL作为文件存储

本节介绍了如何用X插件设置MySQL服务器,以及如何安装mysql。

X插件是默认启用MySQL 5.0,使MySQL服务器使用X协议的客户沟通,这是利用MySQL作为文件存储的前提。X协议兼容的客户包括MySQL和MySQL 8连接器外内核。

20.2.1安装mysql

重要

为社会和商业的mysql版本:在安装MySQL的外内核,确保你有Visual C可为Visual Studio 2015(可在微软下载中心)安装在您的Windows系统。

本节介绍了如何下载、安装、启动mysql,这是一个互动的JavaScript、Python或SQL接口的MySQL服务器支持的开发与管理。mysql是可以分开安装的组件。

要求

mysql是可用的微软Windows、Linux、MacOS和64位平台。

20.2.1.1安装mysql在微软Windows

在微软Windows使用MSI安装mysql,做到以下几点:

  1. 下载(x86 64位Windows,MSI),installerhttp://dev.mysql.com /下载/内核/

  2. 当prompted,点击运行

  3. 按照安装向导中的步骤。

20.2.1.2 installing内核是Linux下MySQL

笔记

对mysql安装包只有为数不多的Linux发行版是可用的,只为64位系统。

支持的Linux发行版,在Linux上安装mysql的最简单方法是使用MySQL的容易存放yum库的MySQL。对于系统不使用MySQL资料库,mysql也可以下载,直接安装。

安装MySQL的容易存放mysql

对于Linux发行版的支持MySQL的容易存放后续路径below,one of the:

  • 如果你还没有MySQL的容易存放您的系统上的软件库,做到以下几点:

    • 按照步骤加入MySQL的容易存放支付,特别注意以下:

      • 配置包的安装过程中,当被问及在对话框中配置库,确保你选择的MySQL 8作为你想要的版本系列。

      • 确保你不要跳过步骤为MySQL容易存放包的信息更新:

        sudo apt-get update
    • 安装mysql这个命令:

      sudo apt-get install mysql-shell
      
  • 如果你已经有了MySQL的容易存放您的系统上的软件库,做到以下几点:

    • 更新MySQL的容易存放的包信息:

      sudo apt-get update
      
    • 用下面的命令更新MySQL APT仓库配置包:

      sudo apt-get install mysql-apt-config
      

      当被问及在对话框中配置存储库中,确保你选择的MySQL 8作为你想要的版本系列。

    • 安装mysql这个命令:

      sudo apt-get install mysql-shell
      
安装MySQL yum库mysql

对于Linux发行版的支持yum库的MySQL,按照以下步骤安装mysql:

  • 下面的一种:

    • 如果你已经有了yum库的MySQL您的系统上的软件库和知识库的配置与新版本的包mysql80-community-release

    • 如果你已经有了yum库的MySQL您的系统上的软件库,但已经配置与旧版本的封装库mysql-community-release,这是最容易的第一配置MySQL yum库与新安装的mysqlmysql80社区发布旅行包这样做,你需要先删除旧版本的包装,用下面的命令:

      sudo yum remove mysql-community-release
      

      DNF功能的系统,而不是:

      sudo dnf erase mysql-community-release
      

      然后,按照步骤添加mysql yum库安装新版本的软件包,mysql80-community-release

    • 如果你还没有yum库的MySQL您的系统上的软件库,按照步骤添加mysql yum库

  • 安装mysql这个命令:

    sudo yum install mysql-shell
    

    DNF功能的系统,而不是:

    sudo dnf install mysql-shell
    
安装mysql直接下载从MySQL developerzone

转,Debian,和安装mysql源码包也可供下载下载MySQL的内核

20.2.1.3 installing MySQL的内核是OS X

在OS X安装mysql,做到以下几点:

  1. 下载包http://dev.mysql.com /下载/内核/

  2. 双击“下载dmg两个安装它。找到一个。

  3. Double - click the.pkg在Finder窗口中显示文件。

  4. 按照安装向导的步骤

  5. 当安装程序完成后,弹出的伤害。(可以删除。)

20.2.2启动mysql

你需要一个帐户名和密码来建立一个会话使用mysql。更换user与你的帐户名称

打开一个终端窗口(Windows命令提示符),用下面的命令启动mysql:

mysqlsh --uri user@localhost

提示您输入您的密码

开始使用mysql和mysql作为文件存储,看到下面的快速启动指南:

20.3快速入门指南:JavaScript mysql

本快速入门指南提供的说明开始成型的数据库应用程序的交互与mysql。该指南包括以下主题:

  • MySQL的功能,介绍mysql,和world_x示例数据库

  • 运营管理和文档集合

  • 经营管理关系表

  • 操作,适用于文件内表。

可快速启动指南

相关信息

203.1 .导言

JavaScript的快速启动mysql数据库提供了一个短暂的功能包括新的X devapi而全面的介绍,并提供了一个现代化的,与关系和文档数据综合的方式,而不需要从应用程序开发者的SQL知识。

在MySQL数据库中,表的本地数据存储的容器类型和集合存储在内部使用表格。

JSON文件和收藏

一个JSON文件是一种数据结构存储在一个字段/值对收藏。字段的值通常包含其他文件,数组和列表文件。

{
    "GNP": .6,
    "IndepYear": 1967,
    "Name": "Sealand",
    "_id": "SEA",
    "demographics": {
        "LifeExpectancy": 79,
        "Population": 27
    },
    "geography": {
        "Continent": "Europe",
        "Region": "British Islands",
        "SurfaceArea": 193
    },
    "government": {
        "GovernmentForm": "Monarchy",
        "HeadOfState": "Michael Bates"
    }
}

关系表

MySQL允许你存储组织的行和列数据。一个表的结构是由一个或多个列定义用户定义的名称和数据类型。每行存储在表中具有相同的结构。

+------+------------------+-------------+-----------------+------------------------+
| ID   | Name             | CountryCode | District        | Info                   |
+------+------------------+-------------+-----------------+------------------------+
|    1 | Kabul            | AFG         | Kabol           |{"Population": 1780000} |
|    2 | Qandahar         | AFG         | Qandahar        |{"Population": 237500}  |
|    3 | Herat            | AFG         | Herat           |{"Population": 186800}  |
|    4 | Mazar-e-Sharif   | AFG         | Balkh           |{"Population": 127800}  |
|    5 | Amsterdam        | NLD         | Noord-Holland   |{"Population": 731200}  |
|    6 | Rotterdam        | NLD         | Zuid-Holland    |{"Population": 593321}  |
+------+------------------+-------------+-----------------+------------------------+

相关信息

20.3.2导入数据库样本

这个world_x示例数据库包含一个JSON的集合和一组三个关系表:

  • 收藏

    • countryinfo:关于世界国家的信息。

    • 国家:最小的信息世界。

    • 城市:一些关于这些国家的城市信息。

    • countrylanguage:语言在每个国家说。

要求

您必须安装mysql和X协议启用。有关说明,见20.2节,“建立MySQL作为文档存储”

启动服务器之前你负荷world_xfor this指南数据库。

world_x数据库下载

准备world_x示例数据库,请遵循这些步骤:

  1. 下载world_x-db.zip

  2. 解压安装文件到一个临时位置等/tmp/。打开档案,结果在一个单一的文件命名world_x.sql

  3. 用下面的命令创建架构:

    mysqlsh -u root --sql < /tmp/world_x-db/world_x.sql
    Enter password: ****
    

    当提示输入你的密码。非root帐户可以使用只要帐户已创建新的数据库的权限。

    更换/tmp/用路径的world_x.sql在您的系统文件

相关信息

20.3.3 MySQL的内核

mysql是一个统一的脚本接口MySQL服务器。它支持JavaScript和Python脚本。JavaScript是默认的处理方式。在大多数情况下,你需要一个帐户连接到本地MySQL服务器实例。

启动mysql

在你安装和启动MySQL服务器,连接mysql的服务器实例。默认情况下,mysql连接使用X协议。

在同一系统中的服务器实例正在运行,用下面的命令打开一个终端窗口和启动mysql:

mysqlsh name@localhost/world_x
Creating a Session to 'root@localhost/world_x'
Enter password: ****

您可能需要指定路径为宜。

此外:

  • name代表你的MySQL帐户的用户名。

  • MySQL程序会提示你输入你的密码。

  • 此会话的默认模式是world_x数据库有关设置world_x示例数据库,看第20.3.2,“导入数据库样本”

这个mysql-js>提示表明该会话的主动语言是JavaScript。

MySQL的JS &#62;

当你运行mysqlsh没有主人的说法,mysql尝试连接到服务器实例在端口33060上运行的本地接口。指定一个不同的主机或端口号,以及其他的选项,看选项说明mysqlsh- mysql

mysql支持输入行编辑如下:

  • 左箭头右箭头键水平移动在当前输入行。

  • 向上箭头向下箭头键上下移动,通过事先输入的线。

  • 退格键删除光标前的字符,键入新字符进入他们在光标位置。

  • 进入进入当前输入行

得到mysql的帮助

类型mysqlsh -帮助在一个列表中的命令行选项的命令解释器的提示。

mysqlsh --help

类型\help在可用命令的列表和描述MySQL提示符。

MySQL的JS &#62;\help

类型\help其次是命令名称有关个人mysql命令的详细帮助。例如,在帮助视图\连接命令式:

mysql-js> \help \connect

退出mysql

退出mysql,键入以下命令:

mysql-js> \quit

相关信息

20.3.4文件和收藏

在MySQL中,集合包含JSON文件,您可以添加,查找,更新,删除。集合在一个模式,你创建列表,容器和降。

本节中的示例使用countryinfo收藏在world_x数据库有关设置world_x示例数据库,看第20.3.2,“导入数据库样本”

文件

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

  • 简单的JavaScript文件格式:

    {field1: "value", field2 : 10, "field 3": null}
    

单据的阵列由一套文件,以逗号分隔和包围[]人物

  • 文件的JavaScript简单数组:

    [{Name: "Aruba", _id: "ABW"}, {Name: "Angola", _id: "AGO"}]
    

MySQL支持以下JavaScript值类型的JSON文件:

  • 数字(整数和浮点数)

  • 字符串

  • 布尔(褶皱和威胁)

  • 无效的

  • 更多的JSON值数组

  • 嵌套(或嵌入式)更多JSON值对象

收藏

收藏文件共享一个容器可能共享一个或多个指标。每一集都有一个唯一的名称和存在于一个单一的模式。

图式这一术语是相当于一个数据库,这意味着一组数据库对象(如反对关系模式用于执行结构和约束条件的数据)。一个模式不强制集合中的文件整合。

本快速入门指南:

  • 基本对象包括:

    对象的形式描述
    dbdb是一个分配给当前活动的模式,你在命令行上指定的全局变量。您可以键入DB在mysql中打印对象的描述,在这种情况下,这将是它代表了架构的名称。
    db.getCollections()db.getcollections()持有该模式的集合列表。使用列表来引用的集合对象,进行遍历,等等。
  • 基本操作范围的藏品包括:

    操作形式描述
    db.name.add()这个()方法将一个文件或文件列表的命名集合。
    db.name.find()这个find()方法返回指定集合中的部分或全部文件。
    db.name.modify()这个modify()在指定的收集方法更新文件。
    db.name.remove()这个remove()删除一个文件或从指定的集合的文件列表。

相关信息

20.3.4.1创建,列表,和删除集合

在mysql中,您可以创建新的收藏,在图式列出存在的集合,并从模式删除一个现有的收集。集合的名称是区分大小写的,每集的名称必须是唯一的。

确认模式

显示分配给该变量的值的类型模式,db

MySQL的JS &#62;db

如果模式值不Schema:world_x,然后设置DB变量如下:

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

在现有架构,创建一个新的集合,使用createCollection()方法下面的示例创建的world_x数据库的集合称为标志。

mysql-js> db.createCollection("flags")

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

<Collection:flags>
列表集合

在显示所有收藏world_x数据库,使用getcollections()方案对象上的方法。服务器返回的集合之间出现支架。

mysql-js> db.getCollections()
[
    <Collection:countryinfo>,
    <Collection:flags>
]
降集

从数据库中删除现有的收集,使用dropCollection()在会话对象的方法。例如,从降半旗的收集world_x数据库类型:

mysql-js> session.dropCollection("world_x", "flags")
Query OK (0.04 sec)
相关信息

20.3.4.2添加文件

你可以使用add()插入一个文件或目录的文件到现有的收集使用mysql的方法。本节中的所有实例使用countryinfo收集。

确认模式

显示分配给该变量的值的类型模式,db

MySQL的JS &#62;db<Schema:world_x>

如果模式值不Schema:world_x,然后设置DB变量如下:

mysql-js> \use world_x
Schema `world_x` accessible through db.
添加一个文件

将下列文件到countryinfo收集。新闻进入两次插入文档

mysql-js> db.countryinfo.add(
 {
    GNP: .6,
    IndepYear: 1967,
    Name: "Sealand",
    _id: "SEA",
    demographics: {
        LifeExpectancy: 79,
        Population: 27
    },
    geography: {
        Continent: "Europe",
        Region: "British Islands",
        SurfaceArea: 193
    },
    government: {
        GovernmentForm: "Monarchy",
        HeadOfState: "Michael Bates"
    }
  }
)
Query OK, 1 item affected (0.02 sec)

该方法返回操作的状态。

每个文档需要一个标识符字段称为_id。的价值_id字段必须在同一集合中的所有文件中是独特的。在mysql 1.0.11(这是MySQL 5部分),如果文档传递到add()方法不包含_id场,mysql作为客户端自动插入到文档中的一个字段和值设置为一个生成的通用唯一标识符(UUID)。在mysql中8.0.11高,文档ID是由服务器产生的,而不是客户端,所以mysql现在没有自动设置_id价值。在8.0.11或更高的设置一个MySQL服务器_id如果文件不包含_id场。一个MySQL服务器在较早的8版本或5.7不设_id在这种情况下的价值,所以你必须明确地指定它。如果你不这样做,mysql中返回错误5115文件缺少要求的领域

相关信息

20.3.4.3找到文件

你可以使用find()查询和文件从数据库中收集回来的方法。mysql提供使用的其他方法find()过滤并返回文件的排序方法。

MySQL提供的主要运营商指定搜索条件:OR| |),AND&#38;),XORNOT之间IN喜欢!=<>>>=<<=&|<<>>+*/~,和%

在集合中找到的所有文件

返回集合中的所有文件,使用find()没有指定搜索条件的方法。例如,下面的操作将在countryinfo集合中的所有文件。

MySQL的JS &#62;db.countryinfo.find()【{“国民生产总值”:828,“indepyear”:空,“名”:“Aruba”、“_id”:“ABW”、“人口统计学”:{“寿命”:78.4000015258789,“人口”:103000 },{“地理”:“大陆”:“北方美国”、“区域“:“加勒比”,“表面积”:193 },“政府”:{“形式”:“nonmetropolitan荷兰领土”、“headofstate”:“比阿特丽克斯”}…}】240文件集(0秒)

该方法产生的包含操作信息,除了集合中的所有文件的结果。

空集(不匹配的文档)返回以下信息:

Empty set (0.00 sec) 
过滤搜索

您可以包括与搜索条件find()方法表情搜索条件的形式语法和传统一样MySQL。你必须将所有的表达式引用。

本节中的所有实例使用countryinfo收藏在world_x数据库为简洁起见,一些例子不显示输出。

一个简单的搜索条件组成的_id场和文档的唯一标识符。以下示例将返回一个文件的标识符字符串匹配:

MySQL的JS &#62;db.countryinfo.find("_id = 'AUS'")【{“国民生产总值”:351182,“indepyear”:1901、“名”:“澳大利亚”、“_id”:“澳大利亚”、“人口统计学”:{“寿命”:79.80000305175781,“人口”:18886000 },{“地理”:“大陆”:“大洋洲”、“区域”:“澳大利亚和新西兰”,“表面积”:7741220 },“政府”:{“形式”:“君主立宪制、联合会”、“headofstate”:“Elisabeth II”} }】1文件集(0.01秒)

下面的示例搜索所有的国家,国民生产总值超过5000亿美元。的countryinfo征收办法,国民生产总值单位万元。

mysql-js> db.countryinfo.find("GNP > 500000")
...[output removed]
10 documents in set (0.00 sec)

在下面的查询人口领域的统计对象中嵌入。进入嵌入式领域,利用人口统计和人口之间的周期识别的关系。文档和字段名称是区分大小写的。

mysql-js> db.countryinfo.find("GNP > 500000 and demographics.Population < 100000000")
...[output removed]
6 documents in set (0.00 sec)

在下面的表达式算术运算符是用来查询一个国家的人均国民生产总值超过30000美元。搜索条件包括算术运算符和大多数MySQL功能。

笔记

在countryinfo收集七个文件有一个人口零价值。警告信息出现在输出端。

mysql-js> db.countryinfo.find("GNP*1000000/demographics.Population > 30000")
...[output removed]
9 documents in set, 7 warnings (0.00 sec)
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0

你可以把一个值从搜索条件的利用bind()方法例如,而不是指定一个硬编码的国家名称为条件,替补命名由冒号加名字开头的一个字母的占位符,如国家。然后包括在占位符和价值bind()方法如下:

MySQL的JS &#62;db.countryinfo.find("Name = :country").bind("country", "Italy")【{“国民生产总值”:1161755,“indepyear”:1861、“名”:“意大利”、“_id”:“ITA”、“人口统计学”:{“寿命”:79,“人口”:57680000 },{“地理”:“大陆”:“欧洲”、“区域”:“欧洲南部”、“表面积”:301316 },“政府”:{“形式”:“共和国”、“headofstate”:“卡洛·阿泽利奥·钱皮”} }】1文件集(0.01秒)
小贴士

在程序中,使你在你的表达式绑定指定占位符的填充值执行之前,可以从自动转义的好处,适当的。

总是使用结合进行输入。避免使用字符串连接查询中引入价值观,产生无效的输入,在某些情况下,可能导致的安全问题。

项目的结果

你可以返回一个文件的具体领域,而不是返回所有字段。以下示例返回的国民生产总值和名字在countryinfo收集匹配搜索条件的所有文档的领域。

使用fields()通过字段列表返回方法。

MySQL的JS &#62;db.countryinfo.find("GNP > 5000000").fields(["GNP", "Name"])【{“国民生产总值”:8510700,“name”:“美国”} ] 1文件集(0.001秒)

此外,你可以改变返回的文档添加、重命名、嵌套甚至计算新领域的表情描述文档返回值。例如,改变该字段的名称与下面的表达式返回只有两个文件。

mysql-js> db.countryinfo.find().
fields(mysqlx.expr('{"Name": upper(Name), "GNPPerCapita": GNP*1000000/demographics.Population}')).
limit(2)
[
    {
        "GNPPerCapita": 8038.834951456311,
        "Name": "ARUBA"
    },
    {
        "GNPPerCapita": 263.0281690140845,
        "Name": "AFGHANISTAN"
    }
]
2 documents in set (0.00 sec)
限制,排序,和跳跃的结果

你可以申请limit()sort(),和skip()方法管理的数量和顺序返回的文档find()方法

指定的文件包含在结果集的数量,追加limit()一个价值的方法find()方法以下查询将返回在countryinfo收集第一个文件。

mysql-js> db.countryinfo.find().limit(5)
... [output removed]
5 documents in set (0.00 sec)

指定结果的顺序,把sort()方法对find()方法通过对sort()方法一个或多个字段排序,或者,降(desc)或上升(asc)属性为宜。升阶是默认的订单类型。

例如,下面的查询类型的所有文件indepyear场然后返回第一个八文件降序。

mysql-js> db.countryinfo.find().sort(["IndepYear desc"]).limit(8)
... [output removed]
8 documents in set (0.00 sec)

默认情况下,该limit()方法从集合中的第一个文件。你可以使用skip()更改启动文件的方法。例如,忽略第一个文件并返回八个文档匹配的条件下,通过对skip()方法1值

MySQL的JS &#62;db.countryinfo.find().sort(["IndepYear desc"]).limit(8).skip(1)…【输出中删除] 8文件集(0秒)
相关信息

20.3.4.4修改文件

你可以使用modify()更新集合中的一个或多个文件的方法。X devapi提供附加的使用方法与modify()方法:对

  • 设置和取消领域内的文件。

  • 添加、插入、删除阵列。

  • 约束,限制,和排序的文件进行修改。

集和Unset Fields

这个modify()方法通过过滤收集只包括文件进行修改,然后使用您指定的文件操作。

在下面的例子中,该modify()方法使用搜索条件来识别文件更改然后set()方法取代的两个值的嵌套统计对象中。

mysql-js> db.countryinfo.modify("_id = 'SEA'").
set("demographics", {LifeExpectancy: 78, Population: 28})
Query OK, 1 item affected (0.04 sec)

你修改一个文件后,使用find()为了验证方法的变化

删除从一个文件的内容,使用modify()unset()方法.例如,下面的查询从一个文档匹配搜索条件将国民生产总值。

mysql-js> db.countryinfo.modify("Name = 'Sealand'").unset("GNP")
Query OK, 1 item affected (0.01 sec)   

使用find()为了验证方法的变化

MySQL的JS &#62;db.countryinfo.find("Name = 'Sealand'")【{“indepyear”:1967年,“name”:“西兰公国”、“_id”:“海”、“人口统计学”:{“寿命”:78,“人口”:28 },“地理”:{“大陆”:“欧洲”、“区域”:“不列颠群岛”,“超级”:193 },“政府”:{“形式”:“君主”、“headofstate”:“迈克尔·贝茨”} }】1.文件集(0.001秒)
添加、插入、删除阵列

附加一个元素的数组,或插入或删除一个数组中的元素,使用arrayAppend()arrayinsert(),或arrayDelete()方法.下面的例子修改countryinfo收集国际机场启用跟踪。

第一个例子使用的modify()set()方法对所有文件创建一个新的机场场。

注意安全

小心当你修改文件没有指定搜索条件。这一行动将修改集合中的所有文件。

mysql-js> db.countryinfo.modify("true").set("Airports", [])
Query OK, 240 items affected (0.07 sec)

随着机场加场,下一个例子使用arrayAppend()添加一个新的机场,一个文件的方法。机场美元在下面的例子中表示当前文档的机场场。

mysql-js> db.countryinfo.modify("Name = 'France'").arrayAppend("$.Airports", "ORY")
Query OK, 1 item affected (0.02 sec)

使用db.countryinfo.find("Name = 'France'")看到的改变

在数组中的不同的位置插入一个元素时,使用arrayInsert()指定要插入的路径表达式的索引方法。在这种情况下,指数为0,或的数组的第一个元素。

MySQL的JS &#62;db.countryinfo.modify("Name = 'France'").arrayInsert("$.Airports[0]", "CDG")查询好,1项影响(0.04秒)

删除一个数组的元素,你必须传递给arrayDelete()方法元素的索引被删除。

MySQL的JS &#62;db.countryinfo.modify("Name = 'France'").arrayDelete("$.Airports[1]")查询好,1项影响(0.03秒)
相关信息

20.3.4.5删除文件

你可以使用remove()删除部分或全部从数据库中收集资料的方法。X devapi提供附加的使用方法与remove()过滤和排序的文件被删除的方法。

使用条件删除文件

下面的例子将搜索条件的remove()方法所有的匹配条件的文档将从集合中移除countryinfo。在这个例子中,一个文档匹配条件。

MySQL的JS &#62;db.countryinfo.remove("_id = 'SEA'")查询好,1项影响(0.02秒)
删除第一个文件

除去在countryinfo集合的第一个文件,使用limit()一个值为1的方法

MySQL的JS &#62;db.countryinfo.remove("true").limit(1)查询好,1项影响(0.03秒)
删除订单中的最后一个文件

以下示例中的国家名称的countryinfo集合的最后一个文件。

mysql-js> db.countryinfo.remove("true").sort(["Name desc"]).limit(1)
Query OK, 1 item affected (0.02 sec)
删除集合中的所有文件

您可以删除集合中的所有文件。这样做,使用remove("true")方法没有指定任何搜索状态。

注意安全

使用护理时,你删除文件没有指定搜索条件。这一行动将从集合中删除所有文件。

相关信息

20.3.4.6创建和删除索引

指标是用来查找文件的特定字段值快。如果没有索引,MySQL必须从第一个文件,然后通过读整个集合找到相关领域。更大的集合,这个成本更。如果一个集合是在一个特定的领域大,查询是常见的,可以考虑创建一个文档内的一个特定领域的指数。

例如,下面的查询将有更好的表现的一个指标:

mysql-js> db.countryinfo.find("demographics.Population < 100")
...[output removed]
8 documents in set (0.00 sec)

这个createIndex()方法创建一个索引,你可以定义为唯一的或独特的。使用field()链应该索引字段的方法。这个execute()方法需要创建或删除索引。

在MySQL的_id场等效为一个默认的主键。

添加一个非唯一索引

创建一个非唯一索引,通过对createIndex()指标名称的方法。重复的索引名称是被禁止的。

在下面的例子中,其第一个参数field()指定方法的人口统计对象领域内的下一个参数表示该字段应该被作为一个整数值。最后一个参数指示该字段是否应要求非空约束。如果该值为,该字段可以包含NULL价值观

MySQL的JS &#62;db.countryinfo.createIndex("pop").
field("demographics.Population", "INTEGER", false).execute()查询好(0.04秒)
添加一个唯一索引

创造一个独特的指标,通过对createIndex()指标名称和方法mysqlx.indextype.unique类型国家"Name"是另一种常见的领域在countryinfo集合索引。在下面的例子,“文本(40)”代表人物的数量指标和true表明该字段不能包含任何无效的价值观

mysql-js> db.countryinfo.createIndex("name", mysqlx.IndexType.UNIQUE).
field("Name", "TEXT(40)", true).execute()
Query OK (0.04 sec)
删除索引

删除索引,通过对dropIndex()方法降低索引的名称。例如,你可以把流行音乐指标如下:

mysql-js> db.countryinfo.dropIndex("pop").execute()
Query OK (0.58 sec)
相关信息

20.3.5关系表

你可以使用mysql操纵不只是JSON文件,而且关系表。

在MySQL数据库中,每个关系表和一个特定的存储引擎相关。在这一部分中使用的例子InnoDB表中的world_x数据库

确认模式

显示分配给该变量的值的类型模式,db

MySQL的JS &#62;db

如果模式值不Schema:world_x,然后设置DB变量如下:

mysql-js> \use world_x

显示所有的表

在显示所有关系表world_x数据库,使用方案对象上的方法

mysql-js> db.getTables()
{
    "city": <Table:city>,
    "country": <Table:country>,
    "countrylanguage": <Table:countrylanguage>
}

基本表的操作

经营范围包括基本的表:

操作形式描述
db.name.insert()这个insert()方法将一个或多个记录到指定的表。
db.name.select()这个select()方法返回的部分或全部在指定的表中的记录。
db.name.update()这个update()方法更新记录在指定的表。
db.name.delete()这个delete()方法从命名表删除一个或多个记录。

相关信息

20.3.5.1插入记录到表

你可以使用insert()方法用values()插入记录到一个现有的关系表的方法。这个insert()方法接受单个列或表中的所有列。使用一个或多个values()方法来指定要插入的值。

插入一个完整的记录

插入一个完整的记录,通过对insert()方法都列在表。然后通过对values()方法表中的每一列的值。例如,在本市的表中添加新记录world_x数据库,插入下面的记录和新闻进入两次

mysql-js> db.city.insert("ID", "Name", "CountryCode", "District", "Info").
values(null, "Olympia", "USA", "Washington", '{"Population": 5000}')
Query OK, 1 item affected (0.01 sec)

城市表有五列:ID、名称、国家、地区、和信息。每个值必须是列的数据类型匹配。

插入部分记录

下面的示例将值插入ID、名称、和城市国家列表。

mysql-js> db.city.insert("ID", "Name", "CountryCode").
values(null, "Little Falls", "USA").values(null, "Happy Valley", "USA")
Query OK, 2 item affected (0.03 sec)

当你指定列的使用insert()方法,数量值必须匹配的列数。在前面的例子中,你必须匹配三列指定供应三值。

相关信息

20.3.5.2选择表

你可以使用select()查询并返回的记录从数据库中的表的方法。X devapi提供使用的其他方法select()过滤并返回记录的排序方法。

MySQL提供的主要运营商指定搜索条件:OR| |),AND&#38;),XORNOT之间IN喜欢!=<>>>=<<=&|<<>>+*/~,和%

选择所有记录

发出一个查询返回所有记录,从现有的表,使用select()没有指定搜索条件的方法。下面的示例选择从城市表中的所有记录world_x数据库

笔记

限制使用的空select()交互式报表的方法。在你的应用程序总是使用显式的列名称的选择。

MySQL的JS &#62;db.city.select()------ ------------ ------------- ------------ ------------------------- | ID |名字|国家|区|信息| ------ ------------ ------------- ------------ ------------------------- | 1 |喀布尔| AFG |喀布尔| { 1780000 }:“人口”| | 2 |坎大哈| AFG |坎大哈| { 237500 }:“人口”| | 3 |赫拉特| AFG |赫拉特| { 186800 } |“人口”……………| 4079 |拉| PSE |拉| {“人口”:92020 } | ------ ------- ---- ------------- ------------ ------------------------- 4082行集(0.01秒)

空集(没有匹配的记录)返回以下信息:

Empty set (0.00 sec)
过滤搜索

发出一个查询,返回一组表的列,使用select()方法并指定要返回的列的括号之间。这个查询从城市返回的名称和国家代码列表。

MySQL的JS &#62;db.city.select(["Name", "CountryCode"])给其他国家| name | | -------------------这| |喀布尔坎大哈| | | 12月12月12月| |赫拉特| | |马扎里沙里夫牺牲| 12月| |阿姆斯特丹|民盟|…|拉……| PSE | |奥林匹亚|美国| |小瀑布|美国| |欢乐谷|能给美国| 4082行在上(0秒)

发出一个查询返回匹配特定搜索条件的行,使用where()包括那些条件的方法。例如,下面的示例返回的名称和国家的城市开始以字母Z码

MySQL的JS &#62;db.city.select(["Name", "CountryCode"]).where("Name like 'Z%'")----------------------- ------------------ |名称| countrycode | ----------------------- ------------------ |该| | |公司|民盟民盟民盟| |兹沃勒| | |泽尼察|波黑| |扎加齐克| |萨拉戈萨一| | ESP | | |菲律宾三宝颜| | zahedan |伊朗| | zanjan |伊朗| | zabol |伊朗| |扎马| | JPN | zhezqazghan |哈萨克斯坦| |郑州| CHN |……………………| zeleznogorsk |罗斯| ----------------------- ------------------ 59行集(0秒)

你可以把一个值从搜索条件的利用bind()method. For example, instead of using "Name = 'Z%' " as the condition, substitute a named placeholder consisting of a colon followed by a name that begins with a letter, such as姓名。然后包括在占位符和价值bind()方法如下:

MySQL的JS &#62;db.city.select(["Name", "CountryCode"]).
              where("Name like :name").bind("name", "Z%")
小贴士

在程序中,使你在你的表达式绑定指定占位符的填充值执行之前,可以从自动转义的好处,适当的。

总是使用结合进行输入。避免使用字符串连接查询中引入价值观,产生无效的输入,在某些情况下,可能导致的安全问题。

项目的结果

发出一个查询使用AND算子,在中间添加搜索条件的算子where()方法

mysql-js> db.city.select(["Name", "CountryCode"]).
               where("Name like 'Z%' and CountryCode = 'CHN'")
+----------------+-------------+
| Name           | CountryCode |
+----------------+-------------+
| Zhengzhou      | CHN         |
| Zibo           | CHN         |
| Zhangjiakou    | CHN         |
| Zhuzhou        | CHN         |
| Zhangjiang     | CHN         |
| Zigong         | CHN         |
| Zaozhuang      | CHN         |
...              ...
| Zhangjiagang   | CHN         |
+----------------+-------------+
22 rows in set (0.01 sec)

指定多个条件操作符,你可以把括号中的搜索条件来改变运算符的优先级。下面的示例演示的位置ANDOR运营商

MySQL的JS &#62;db.city.select(["Name", "CountryCode"]).
where("Name like 'Z%' and (CountryCode = 'CHN' or CountryCode = 'RUS')")------------------- ------------- |名字|国家| ------------------- ------------- |郑州| CHN | |淄博| CHN | |张家口| CHN | |株洲| CHN |……| zeleznogorsk |罗斯| ------------------- ------------- 29行集(0.01秒)
限制,秩序,和偏移的结果

你可以申请limit()orderby(),和offSet()方法管理的数量和顺序返回的记录select()方法

指定包含在结果集的记录数,追加limit()一个价值的方法select()方法例如,下面的查询将返回该国表中的前五条记录。

mysql-js> db.country.select(["Code", "Name"]).limit(5)
+------+-------------+
| Code | Name        |
+------+-------------+
| ABW  | Aruba       |
| AFG  | Afghanistan |
| AGO  | Angola      |
| AIA  | Anguilla    |
| ALB  | Albania     |
+------+-------------+
5 rows in set (0.00 sec)

指定结果的顺序,把orderBy()方法对select()方法通过对orderBy()方法一个或多个列进行排序,或者,降(desc)或上升(asc)属性为宜。升阶是默认的订单类型。

例如,下面的查询类型的所有记录的名称列,然后返回前三条记录按降序排列。

mysql-js> db.country.select(["Code", "Name"]).orderBy(["Name desc"]).limit(3)
+------+------------+
| Code | Name       |
+------+------------+
| ZWE  | Zimbabwe   |
| ZMB  | Zambia     |
| YUG  | Yugoslavia |
+------+------------+
3 rows in set (0.00 sec)

默认情况下,该limit()方法从表中的第一条记录。你可以使用offset()改变开始的记录方法。例如,忽略第一个记录并返回三个记录匹配的条件下,通过对offset()方法1值

MySQL的JS &#62;db.country.select(["Code", "Name"]).orderBy(["Name desc"]).limit(3).offset(1)------ ------------ |代码|名字| ------ ------------ | ZMB |赞比亚| |尤克|南斯拉夫| | |解说也门| ------ ------------三行集(0.001秒)
相关信息

20.3.5.2最新表格

你可以使用update()修改一个或多个表中的记录方法。这个update()方法通过过滤查询只包括记录被更新并应用操作指定这些记录。

在城市表代替一个城市名,传给set()方法的新的城市名称。然后,通过对where()方法来定位和替换的城市名称。下面的示例将与北京市北京。

mysql-js> db.city.update().set("Name", "Beijing").where("Name = 'Peking'")
Query OK, 1 item affected (0.04 sec)

使用select()为了验证方法的变化

MySQL的JS &#62;db.city.select(["ID", "Name", "CountryCode", "District", "Info"]).where("Name = 'Beijing'")------ ----------- ------------- ---------- ----------------------------- | ID |名字|国家|区|信息| ------ ----------- ------------- ---------- ----------------------------- | 1891 |北京| CHN |北京| { 7472000 }:“人口”| ------ ----------- ------------- ---------- ----------------------------- 1行集(0秒)
相关信息

20.3.5.4删除表

你可以使用delete()删除数据库中的一些或全部从表中记录的方法。X devapi提供使用的其他方法delete()过滤和订单记录被删除的方法。

使用条件删除记录

下面的例子将搜索条件的delete()方法所有的记录匹配的条件下将从表中删除的城市。在这个例子中,一个记录匹配条件。

MySQL的JS &#62;db.city.delete().where("Name = 'Olympia'")查询好,1项影响(0.01秒)
删除第一个记录

删除在城市表的第一个记录,使用limit()一个值为1的方法

MySQL的JS &#62;db.city.delete().limit(1)查询好,1项影响(0.02秒)
删除表中的所有记录

你可以删除表中的所有记录。这样做,使用delete()如果没有指定搜索条件的方法。

注意安全

小心当你删除记录不指定搜索条件。此操作将删除表中的所有记录。

相关信息

在Tables 20.3.6文件

在MySQL数据库中,一个表可以包含传统的关系型数据,JSON值,或两者。你可以把传统的数据文件存储在列的JSON文件具有天然的JSON数据类型

在这一节中的例子使用城市中的表world_x数据库

城市表描述

城市表有五列(或字段)。

+---------------+------------+-------+-------+---------+------------------+
| 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文档的正确顺序。在下面的例子中,一个文件可以插入到信息栏的最终值传递。

MySQL的JS &#62;db.city.insert().
values(null, "San Francisco", "USA", "California", '{"Population":830000}')查询好,1项影响(0.01秒)

选择一个记录

你可以发布与搜索条件的评估值在表达式查询文档。

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)

相关信息

20.4快速入门指南:python mysql

本快速入门指南提供的说明开始成型的数据库应用程序的交互与mysql。该指南包括以下主题:

  • MySQL的功能,介绍mysql,和world_x示例数据库

  • 运营管理和文档集合

  • 经营管理关系表

  • 操作,适用于文件内表。

可快速启动指南

相关信息

20.4.1介绍

Python快速启动mysql数据库提供了一个短暂的功能包括新的X devapi而全面的介绍,并提供了一个现代化的,与关系和文档数据综合的方式,而不需要从应用程序开发者的SQL知识。

在MySQL数据库中,表的本地数据存储的容器类型和集合存储在内部使用表格。

JSON文件和收藏

一个JSON文件是一种数据结构存储在一个字段/值对收藏。字段的值通常包含其他文件,数组和列表文件。

{
    "GNP": .6,
    "IndepYear": 1967,
    "Name": "Sealand",
    "_id": "SEA",
    "demographics": {
        "LifeExpectancy": 79,
        "Population": 27
    },
    "geography": {
        "Continent": "Europe",
        "Region": "British Islands",
        "SurfaceArea": 193
    },
    "government": {
        "GovernmentForm": "Monarchy",
        "HeadOfState": "Michael Bates"
    }
}

关系表

MySQL允许你存储组织的行和列数据。一个表的结构是由一个或多个列定义用户定义的名称和数据类型。每行存储在表中具有相同的结构。

+------+------------------+-------------+-----------------+------------------------+
| ID   | Name             | CountryCode | District        | Info                   |
+------+------------------+-------------+-----------------+------------------------+
|    1 | Kabul            | AFG         | Kabol           |{"Population": 1780000} |
|    2 | Qandahar         | AFG         | Qandahar        |{"Population": 237500}  |
|    3 | Herat            | AFG         | Herat           |{"Population": 186800}  |
|    4 | Mazar-e-Sharif   | AFG         | Balkh           |{"Population": 127800}  |
|    5 | Amsterdam        | NLD         | Noord-Holland   |{"Population": 731200}  |
|    6 | Rotterdam        | NLD         | Zuid-Holland    |{"Population": 593321}  |
+------+------------------+-------------+-----------------+------------------------+

相关信息

20.4.2导入数据库样本

这个world_x示例数据库包含一个JSON的集合和一组三个关系表:

  • 收藏

    • countryinfo:关于世界国家的信息。

    • 国家:最小的信息世界。

    • 城市:一些关于这些国家的城市信息。

    • countrylanguage:语言在每个国家说。

要求

您必须安装mysql和X协议启用。有关说明,见20.2节,“建立MySQL作为文档存储”

启动服务器之前你负荷world_xfor this指南数据库。

world_x数据库下载

准备world_x示例数据库,请遵循这些步骤:

  1. 下载world_x-db.zip

  2. 解压安装文件到一个临时位置等/tmp/。打开档案,结果在一个单一的文件命名world_x.sql

  3. 用下面的命令创建架构:

    mysqlsh -u root --sql < /tmp/world_x-db/world_x.sql
    Enter password: ****
    

    当提示输入你的密码。非root帐户可以使用只要帐户已创建新的数据库的权限。

    更换/tmp/用路径的world_x.sql在您的系统文件

相关信息

20.4.3 MySQL的内核

mysql是一个统一的脚本接口MySQL服务器。它支持JavaScript和Python脚本。JavaScript是默认的处理方式。在大多数情况下,你需要一个帐户连接到本地MySQL服务器实例。

启动mysql

在你安装和启动MySQL服务器,连接mysql的服务器实例。默认情况下,mysql连接使用X协议。

在同一系统中的服务器实例正在运行,用下面的命令打开一个终端窗口和启动mysql:

mysqlsh name@localhost/world_x --py
Creating a Session to name@localhost/world_x
Enter password: ****

您可能需要指定路径为宜。

此外:

  • name代表你的MySQL帐户的用户名。

  • MySQL程序会提示你输入你的密码。

  • 这个--py选项启动Python模式mysql。如果省略——PY在JavaScript中,mysql启动模式。

  • 此会话的默认模式是world_x数据库有关设置world_x示例数据库,看第20.4.2,“导入数据库样本”

这个mysql-py>提示表明该会话的主动语言是Python。

MySQL服务器&#62;。

当你运行mysqlsh没有主人的说法,mysql尝试连接到服务器实例在端口33060上运行的本地接口。指定一个不同的主机或端口号,以及其他的选项,看选项说明mysqlsh- mysql

mysql支持输入行编辑如下:

  • 左箭头右箭头键水平移动在当前输入行。

  • 向上箭头向下箭头键上下移动,通过事先输入的线。

  • 退格键删除光标前的字符,键入新字符进入他们在光标位置。

  • 进入进入当前输入行

得到mysql的帮助

类型mysqlsh -帮助在一个列表中的命令行选项的命令解释器的提示。

mysqlsh --help

类型\help在可用命令的列表和描述MySQL提示符。

MySQL服务器&#62;。\help

类型\help其次是命令名称有关个人mysql命令的详细帮助。例如,在帮助视图\连接命令式:

mysql-py> \help \connect

退出mysql

退出mysql,键入以下命令:

mysql-py> \quit

相关信息

20.4文件和收藏

在MySQL中,集合包含JSON文件,您可以添加,查找,更新,删除。集合在一个模式,你创建列表,容器和降。

本节中的示例使用countryinfo收藏在world_x数据库有关设置world_x示例数据库,看第20.4.2,“导入数据库样本”

文件

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

  • 简单的Python文件格式:

    {"field1": "value", "field2" : 10, "field 3": null}
    

单据的阵列由一套文件,以逗号分隔和包围[]人物

  • 简单的阵列的Python文件:

    [{"Name": "Aruba", "_id": "ABW"}, {"Name": "Angola", "_id": "AGO"}]
    

MySQL支持以下JSON文件的Python的值类型:

  • 数字(整数和浮点数)

  • 字符串

  • 布尔(褶皱和威胁)

  • 更多的JSON值数组

  • 嵌套(或嵌入式)更多JSON值对象

收藏

收藏文件共享一个容器可能共享一个或多个指标。每一集都有一个唯一的名称和存在于一个单一的模式。

图式这一术语是相当于一个数据库,这意味着一组数据库对象(如反对关系模式用于执行结构和约束条件的数据)。一个模式不强制集合中的文件整合。

本快速入门指南:

  • 基本对象包括:

    对象的形式描述
    dbdb是一个分配给当前活动的模式,你在命令行上指定的全局变量。您可以键入DB在mysql中打印对象的描述,在这种情况下,这将是它代表了架构的名称。
    db.get_collections()收藏品持有该模式的集合列表。使用列表来引用的集合对象,进行遍历,等等。
  • 基本操作范围的藏品包括:

    操作形式描述
    db.name.add()这个()方法将一个文件或文件列表的命名集合。
    db.name.find()这个find()方法返回指定集合中的部分或全部文件。
    db.name.modify()这个modify()在指定的收集方法更新文件。
    db.name.remove()这个remove()删除一个文件或从指定的集合的文件列表。

相关信息

20.4.4.1创建,列表,和删除集合

在mysql中,您可以创建新的收藏,在图式列出存在的集合,并从模式删除一个现有的收集。集合的名称是区分大小写的,每集的名称必须是唯一的。

确认模式

显示分配给该变量的值的类型模式,db

MySQL服务器&#62;。db

如果模式值不Schema:world_x,然后设置DB变量如下:

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

在现有架构,创建一个新的集合,使用create_collection()方法下面的示例创建的world_x数据库的集合称为标志。

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

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

<Collection:flags>
列表集合

在显示所有收藏world_x数据库,使用get()_收藏方案对象上的方法。服务器返回的集合之间出现支架。

mysql-py> db.get_collections()
[
    <Collection:countryinfo>,
    <Collection:flags>
]
降集

从数据库中删除现有的收集,使用drop_collection()在会话对象的方法。例如,从降半旗的收集world_x数据库类型:

mysql-py> session.drop_collection("world_x", "flags")
Query OK (0.04 sec)
相关信息

10.4.4.2 ADD文件

你可以使用add()插入一个文件或目录的文件到现有的收集使用mysql的方法。本节中的所有实例使用countryinfo收集。

确认模式

显示分配给该变量的值的类型模式,db

MySQL服务器&#62;。db<Schema:world_x>

如果模式值不Schema:world_x,然后设置DB变量如下:

mysql-py> \use world_x
Schema `world_x` accessible through db.
添加一个文件

将下列文件到countryinfo收集。新闻进入两次插入文档

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

该方法返回操作的状态。

每个文档需要一个标识符字段称为_id。的价值_id字段必须在同一集合中的所有文件中是独特的。在mysql 1.0.11(这是MySQL 5部分),如果文档传递到add()方法不包含_id场,mysql作为客户端自动插入到文档中的一个字段和值设置为一个生成的通用唯一标识符(UUID)。在mysql中8.0.11高,文档ID是由服务器产生的,而不是客户端,所以mysql现在没有自动设置_id价值。在8.0.11或更高的设置一个MySQL服务器_id如果文件不包含_id场。一个MySQL服务器在较早的8版本或5.7不设_id在这种情况下的价值,所以你必须明确地指定它。如果你不这样做,mysql中返回错误5115文件缺少要求的领域

相关信息

20.4.4.3找到文件

你可以使用find()查询和文件从数据库中收集回来的方法。mysql提供使用的其他方法find()过滤并返回文件的排序方法。

MySQL提供的主要运营商指定搜索条件:OR| |),AND&#38;),XORNOT之间IN喜欢!=<>>>=<<=&|<<>>+*/~,和%

在集合中找到的所有文件

返回集合中的所有文件,使用find()没有指定搜索条件的方法。例如,下面的操作将在countryinfo集合中的所有文件。

MySQL服务器&#62;。db.countryinfo.find()【{“国民生产总值”:828,“indepyear”:空,“名”:“Aruba”、“_id”:“ABW”、“人口统计学”:{“寿命”:78.4000015258789,“人口”:103000 },{“地理”:“大陆”:“北方美国”、“区域“:“加勒比”,“表面积”:193 },“政府”:{“形式”:“nonmetropolitan荷兰领土”、“headofstate”:“比阿特丽克斯”}…}】240文件集(0秒)

该方法产生的包含操作信息,除了集合中的所有文件的结果。

空集(不匹配的文档)返回以下信息:

Empty set (0.00 sec) 
过滤搜索

您可以包括与搜索条件find()方法表情搜索条件的形式语法和传统一样MySQL。你必须将所有的表达式引用。

本节中的所有实例使用countryinfo收藏在world_x数据库为简洁起见,一些例子不显示输出。

一个简单的搜索条件组成的_id场和文档的唯一标识符。以下示例将返回一个文件的标识符字符串匹配:

mysql-py> db.countryinfo.find("_id = 'AUS'")【{“国民生产总值”:351182,“indepyear”:1901、“名”:“澳大利亚”、“_id”:“澳大利亚”、“人口统计学”:{“寿命”:79.80000305175781,“人口”:18886000 },{“地理”:“大陆”:“大洋洲”、“区域”:“澳大利亚和新西兰”,“表面积”:7741220 },“政府”:{“形式”:“君主立宪制、联合会”、“headofstate”:“Elisabeth II”} }】1文件集(0.01秒)

下面的示例搜索所有的国家,国民生产总值超过5000亿美元。的countryinfo征收办法,国民生产总值单位万元。

mysql-py> db.countryinfo.find("GNP > 500000")
...[output removed]
10 documents in set (0.00 sec)

在下面的查询人口领域的统计对象中嵌入。进入嵌入式领域,利用人口统计和人口之间的周期识别的关系。文档和字段名称是区分大小写的。

mysql-py> db.countryinfo.find("GNP > 500000 and demographics.Population < 100000000")
...[output removed]
6 documents in set (0.00 sec)

在下面的表达式算术运算符是用来查询一个国家的人均国民生产总值超过30000美元。搜索条件包括算术运算符和大多数MySQL功能。

笔记

在countryinfo收集七个文件有一个人口零价值。警告信息出现在输出端。

mysql-py> db.countryinfo.find("GNP*1000000/demographics.Population > 30000")
...[output removed]
9 documents in set, 7 warnings (0.00 sec)
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0
Warning (Code 1365): Division by 0

你可以把一个值从搜索条件的利用bind()方法例如,而不是指定一个硬编码的国家名称为条件,替补命名由冒号加名字开头的一个字母的占位符,如国家。然后包括在占位符和价值bind()方法如下:

MySQL服务器&#62;。db.countryinfo.find("Name = :country").bind("country", "Italy")【{“国民生产总值”:1161755,“indepyear”:1861、“名”:“意大利”、“_id”:“ITA”、“人口统计学”:{“寿命”:79,“人口”:57680000 },{“地理”:“大陆”:“欧洲”、“区域”:“欧洲南部”、“表面积”:301316 },“政府”:{“形式”:“共和国”、“headofstate”:“卡洛·阿泽利奥·钱皮”} }】1文件集(0.01秒)
小贴士

在程序中,使你在你的表达式绑定指定占位符的填充值执行之前,可以从自动转义的好处,适当的。

总是使用结合进行输入。避免使用字符串连接查询中引入价值观,产生无效的输入,在某些情况下,可能导致的安全问题。

项目的结果

你可以返回一个文件的具体领域,而不是返回所有字段。以下示例返回的国民生产总值和名字在countryinfo收集匹配搜索条件的所有文档的领域。

使用fields()通过字段列表返回方法。

MySQL服务器&#62;。db.countryinfo.find("GNP > 5000000").fields(["GNP", "Name"])【{“国民生产总值”:8510700,“name”:“美国”} ] 1文件集(0.001秒)

此外,你可以改变返回的文档添加、重命名、嵌套甚至计算新领域的表情描述文档返回值。例如,改变该字段的名称与下面的表达式返回只有两个文件。

mysql-py> db.countryinfo.find().\
fields(mysqlx.expr('{"Name": upper(Name), "GNPPerCapita": GNP*1000000/demographics.Population}')).\
limit(2)
[
    {
        "GNPPerCapita": 8038.834951456311,
        "Name": "ARUBA"
    },
    {
        "GNPPerCapita": 263.0281690140845,
        "Name": "AFGHANISTAN"
    }
]
2 documents in set (0.00 sec)
限制,排序,和跳跃的结果

你可以申请limit()sort(),和skip()方法管理的数量和顺序返回的文档find()方法

指定的文件包含在结果集的数量,追加limit()一个价值的方法find()方法以下查询将返回在countryinfo收集第一个文件。

mysql-py> db.countryinfo.find().limit(5)
... [output removed]
5 documents in set (0.00 sec)

指定结果的顺序,把sort()方法对find()方法通过对sort()方法一个或多个字段排序,或者,降(desc)或上升(asc)属性为宜。升阶是默认的订单类型。

例如,下面的查询类型的所有文件indepyear场然后返回第一个八文件降序。

mysql-py> db.countryinfo.find().sort(["IndepYear desc"]).limit(8)
... [output removed]
8 documents in set (0.00 sec)

默认情况下,该limit()方法从集合中的第一个文件。你可以使用skip()更改启动文件的方法。例如,忽略第一个文件并返回八个文档匹配的条件下,通过对skip()方法1值

MySQL服务器&#62;。db.countryinfo.find().sort(["IndepYear desc"]).limit(8).skip(1)…【输出中删除] 8文件集(0秒)
相关信息

20.4.4.4修改文件

你可以使用modify()更新集合中的一个或多个文件的方法。X devapi提供附加的使用方法与modify()方法:对

  • 设置和取消领域内的文件。

  • 添加、插入、删除阵列。

  • 约束,限制,和排序的文件进行修改。

集和Unset Fields

这个modify()方法通过过滤收集只包括文件进行修改,然后使用您指定的文件操作。

在下面的例子中,该modify()方法使用搜索条件来识别文件更改然后set()方法取代的两个值的嵌套统计对象中。

mysql-py> db.countryinfo.modify("_id = 'SEA'").\
set("demographics", {"LifeExpectancy": 78, "Population": 28})
Query OK, 1 item affected (0.04 sec)

你修改一个文件后,使用find()为了验证方法的变化

删除从一个文件的内容,使用modify()unset()方法.例如,下面的查询从一个文档匹配搜索条件将国民生产总值。

mysql-py> db.countryinfo.modify("Name = 'Sealand'").unset("GNP")
Query OK, 1 item affected (0.01 sec)   

使用find()为了验证方法的变化

MySQL服务器&#62;。db.countryinfo.find("Name = 'Sealand'")【{“indepyear”:1967年,“name”:“西兰公国”、“_id”:“海”、“人口统计学”:{“寿命”:78,“人口”:28 },“地理”:{“大陆”:“欧洲”、“区域”:“不列颠群岛”,“超级”:193 },“政府”:{“形式”:“君主”、“headofstate”:“迈克尔·贝茨”} }】1.文件集(0.001秒)
添加、插入、删除阵列

附加一个元素的数组,或插入或删除一个数组中的元素,使用array_append()阵列_插入(),或array_delete()方法.下面的例子修改countryinfo收集国际机场启用跟踪。

第一个例子使用的modify()set()方法对所有文件创建一个新的机场场。

注意安全

小心当你修改文件没有指定搜索条件。这一行动将修改集合中的所有文件。

mysql-py> db.countryinfo.modify(True).set("Airports", [])
Query OK, 240 items affected (0.07 sec)

随着机场加场,下一个例子使用array_append()添加一个新的机场,一个文件的方法。机场美元在下面的例子中表示当前文档的机场场。

mysql-py> db.countryinfo.modify("Name = 'France'").array_append("$.Airports", "ORY")
Query OK, 1 item affected (0.02 sec)

使用db.countryinfo.find("Name = 'France'")看到的改变

在数组中的不同的位置插入一个元素时,使用array_insert()指定要插入的路径表达式的索引方法。在这种情况下,指数为0,或的数组的第一个元素。

MySQL服务器&#62;。db.countryinfo.modify("Name = 'France'").array_insert("$.Airports[0]", "CDG")查询好,1项影响(0.04秒)

删除一个数组的元素,你必须传递给array_delete()方法元素的索引被删除。

MySQL服务器&#62;。db.countryinfo.modify("Name = 'France'").array_delete("$.Airports[1]")查询好,1项影响(0.03秒)
相关信息

20.4.4.5删除文件

你可以使用remove()删除部分或全部从数据库中收集资料的方法。X devapi提供附加的使用方法与remove()过滤和排序的文件被删除的方法。

使用条件删除文件

下面的例子将搜索条件的remove()方法所有的匹配条件的文档将从集合中移除countryinfo。在这个例子中,一个文档匹配条件。

MySQL服务器&#62;。db.countryinfo.remove("_id = 'SEA'")查询好,1项影响(0.02秒)
删除第一个文件

除去在countryinfo集合的第一个文件,使用limit()一个值为1的方法

MySQL服务器&#62;。db.countryinfo.remove(True).limit(1)查询好,1项影响(0.03秒)
删除订单中的最后一个文件

以下示例中的国家名称的countryinfo集合的最后一个文件。

mysql-py> db.countryinfo.remove(True).sort(["Name desc"]).limit(1)
Query OK, 1 item affected (0.02 sec)
删除集合中的所有文件

您可以删除集合中的所有文件。这样做,使用remove(True)如果没有指定搜索条件的方法。

注意安全

使用护理时,你删除文件没有指定搜索条件。这一行动将从集合中删除所有文件。

相关信息

20.4.4.6创建和删除索引

指标是用来查找文件的特定字段值快。如果没有索引,MySQL必须从第一个文件,然后通过读整个集合找到相关领域。更大的集合,这个成本更。如果一个集合是在一个特定的领域大,查询是常见的,可以考虑创建一个文档内的一个特定领域的指数。

例如,下面的查询将有更好的表现的一个指标:

mysql-js> db.countryinfo.find("demographics.Population < 100")
...[output removed]
8 documents in set (0.00 sec)

这个create_index()方法创建一个索引,你可以定义为唯一的或独特的。使用field()链应该索引字段的方法。这个execute()方法需要创建或删除索引。

在MySQL的_id场等效为一个默认的主键。

添加一个非唯一索引

创建一个非唯一索引,通过对create_index()指标名称的方法。重复的索引名称是被禁止的。

在下面的例子中,其第一个参数field()指定方法的人口统计对象领域内的下一个参数表示该字段应该被作为一个整数值。最后一个参数指示该字段是否应要求非空约束。如果该值为,该字段可以包含NULL价值观

MySQL的JS &#62;db.countryinfo.create_index("pop").\
field("demographics.Population", "INTEGER", False).execute()查询好(0.04秒)
添加一个唯一索引

创造一个独特的指标,通过对create_index()指标名称和方法mysqlx.indextype.unique类型国家"Name"是另一种常见的领域在countryinfo集合索引。在下面的例子,“文本(40)”代表人物的数量指标和True表明该字段不能包含任何无效的价值观

mysql-js> db.countryinfo.create_index("name", mysqlx.IndexType.UNIQUE).\
field("Name", "TEXT(40)", True).execute()
Query OK (0.04 sec)
删除索引

删除索引,通过对drop_index()方法降低索引的名称。例如,你可以把流行音乐指标如下:

mysql-js> db.countryinfo.drop_index("pop").execute()
Query OK (0.58 sec)
相关信息

20.4.5关系表

你可以使用mysql操纵不只是JSON文件,而且关系表。

在MySQL数据库中,每个关系表和一个特定的存储引擎相关。在这一部分中使用的例子InnoDB表中的world_x数据库

确认模式

显示分配给该变量的值的类型模式,db

MySQL服务器&#62;。db<Schema:world_x>

如果架构的价值是不Schema:world_x数据库,然后设置DB变量如下:

mysql-py> \use world_x
Schema `world_x` accessible through db.

显示所有的表

在显示所有关系表world_x数据库,使用get()_表方案对象上的方法

mysql-py> db.get_tables()
{
    "city": <Table:city>,
    "country": <Table:country>,
    "countrylanguage": <Table:countrylanguage>
}

基本表的操作

经营范围包括基本的表:

操作形式描述
db.name.insert()这个insert()方法将一个或多个记录到指定的表。
db.name.select()这个select()方法返回的部分或全部在指定的表中的记录。
db.name.update()这个update()方法更新记录在指定的表。
db.name.delete()这个delete()方法从命名表删除一个或多个记录。

相关信息

20.4.5.1插入记录到表

你可以使用insert()方法用values()插入记录到一个现有的关系表的方法。这个insert()方法接受单个列或表中的所有列。使用一个或多个values()方法来指定要插入的值。

插入一个完整的记录

插入一个完整的记录,通过对insert()方法都列在表。然后通过对values()方法为每列的值。例如,在本市的表中添加新记录world_x数据库,插入下面的记录和新闻进入两次

mysql-py> db.city.insert("ID", "Name", "CountryCode", "District", "Info").\
values(None, "Olympia", "USA", "Washington", '{"Population": 5000}')
Query OK, 1 item affected (0.01 sec)

城市表有五列:ID、名称、国家、地区、和信息。每个值必须是列的数据类型匹配。

插入部分记录

下面的示例将值插入ID、名称、和城市国家列表。

mysql-py> db.city.insert("ID", "Name", "CountryCode").\
values(None, "Little Falls", "USA").values(None, "Happy Valley", "USA")
Query OK, 2 item affected (0.03 sec)

当你指定列的使用insert()方法,数量值必须匹配的列数。在前面的例子中,你必须匹配三列指定供应三值。

相关信息

20.4.5.2条选择表

你可以使用select()查询并返回的记录从数据库中的表的方法。X devapi提供使用的其他方法select()过滤并返回记录的排序方法。

MySQL提供的主要运营商指定搜索条件:OR| |),AND&#38;),XORNOT之间IN喜欢!=<>>>=<<=&|<<>>+*/~,和%

选择所有记录

发出一个查询返回所有记录,从现有的表,使用select()没有指定搜索条件的方法。下面的示例选择从城市表中的所有记录world_x数据库

笔记

限制使用的空select()交互式报表的方法。在你的应用程序总是使用显式的列名称的选择。

MySQL服务器&#62;。db.city.select()------ ------------ ------------- ------------ ------------------------- | ID |名字|国家|区|信息| ------ ------------ ------------- ------------ ------------------------- | 1 |喀布尔| AFG |喀布尔| { 1780000 }:“人口”| | 2 |坎大哈| AFG |坎大哈| { 237500 }:“人口”| | 3 |赫拉特| AFG |赫拉特| { 186800 } |“人口”……………| 4079 |拉| PSE |拉| {“人口”:92020 } | ------ ------- ---- ------------- ------------ ------------------------- 4082行集(0.01秒)

空集(没有匹配的记录)返回以下信息:

Empty set (0.00 sec)
过滤搜索

发出一个查询,返回一组表的列,使用select()方法并指定要返回的列的括号之间。这个查询从城市返回的名称和国家代码列表。

MySQL服务器&#62;。db.city.select(["Name", "CountryCode"])给其他国家| name | | -------------------这| |喀布尔坎大哈| | | 12月12月12月| |赫拉特| | |马扎里沙里夫牺牲| 12月| |阿姆斯特丹|民盟|…|拉……| PSE | |奥林匹亚|美国| |小瀑布|美国| |欢乐谷|能给美国| 4082行在上(0秒)

发出一个查询返回匹配特定搜索条件的行,使用where()包括那些条件的方法。例如,下面的示例返回的名称和国家的城市开始以字母Z码

MySQL服务器&#62;。db.city.select(["Name", "CountryCode"]).where("Name like 'Z%'")----------------------- ------------------ |名称| countrycode | ----------------------- ------------------ |该| | |公司|民盟民盟民盟| |兹沃勒| | |泽尼察|波黑| |扎加齐克| |萨拉戈萨一| | ESP | | |菲律宾三宝颜| | zahedan |伊朗| | zanjan |伊朗| | zabol |伊朗| |扎马| | JPN | zhezqazghan |哈萨克斯坦| |郑州| CHN |……………………| zeleznogorsk |罗斯| ----------------------- ------------------ 59行集(0秒)

你可以把一个值从搜索条件的利用bind()method. For example, instead of using "Name = 'Z%' " as the condition, substitute a named placeholder consisting of a colon followed by a name that begins with a letter, such as姓名。然后包括在占位符和价值bind()方法如下:

MySQL服务器&#62;。db.city.select(["Name", "CountryCode"]).\
              where("Name like :name").bind("name", "Z%")
小贴士

在程序中,使你在你的表达式绑定指定占位符的填充值执行之前,可以从自动转义的好处,适当的。

总是使用结合进行输入。避免使用字符串连接查询中引入价值观,产生无效的输入,在某些情况下,可能导致的安全问题。

项目的结果

发出一个查询使用AND算子,在中间添加搜索条件的算子where()方法

mysql-py> db.city.select(["Name", "CountryCode"]).\
               where("Name like 'Z%' and CountryCode = 'CHN'")
+----------------+-------------+
| Name           | CountryCode |
+----------------+-------------+
| Zhengzhou      | CHN         |
| Zibo           | CHN         |
| Zhangjiakou    | CHN         |
| Zhuzhou        | CHN         |
| Zhangjiang     | CHN         |
| Zigong         | CHN         |
| Zaozhuang      | CHN         |
...              ...
| Zhangjiagang   | CHN         |
+----------------+-------------+
22 rows in set (0.01 sec)

指定多个条件操作符,你可以把括号中的搜索条件来改变运算符的优先级。下面的示例演示的位置ANDOR运营商

MySQL服务器&#62;。db.city.select(["Name", "CountryCode"]).\
where("Name like 'Z%' and (CountryCode = 'CHN' or CountryCode = 'RUS')")------------------- ------------- |名字|国家| ------------------- ------------- |郑州| CHN | |淄博| CHN | |张家口| CHN | |株洲| CHN |……| zeleznogorsk |罗斯| ------------------- ------------- 29行集(0.01秒)
限制,秩序,和偏移的结果

你可以申请limit()order_by(),和offset()方法管理的数量和顺序返回的记录select()方法

指定包含在结果集的记录数,追加limit()一个价值的方法select()方法例如,下面的查询将返回该国表中的前五条记录。

mysql-py> db.country.select(["Code", "Name"]).limit(5)
+------+-------------+
| Code | Name        |
+------+-------------+
| ABW  | Aruba       |
| AFG  | Afghanistan |
| AGO  | Angola      |
| AIA  | Anguilla    |
| ALB  | Albania     |
+------+-------------+
5 rows in set (0.00 sec)

指定结果的顺序,把order_by()方法对select()方法通过对order_by()方法一个或多个列进行排序,或者,降(desc)或上升(asc)属性为宜。升阶是默认的订单类型。

例如,下面的查询类型的所有记录的名称列,然后返回前三条记录按降序排列。

mysql-py> db.country.select(["Code", "Name"]).order_by(["Name desc"]).limit(3)
+------+------------+
| Code | Name       |
+------+------------+
| ZWE  | Zimbabwe   |
| ZMB  | Zambia     |
| YUG  | Yugoslavia |
+------+------------+
3 rows in set (0.00 sec)

默认情况下,该limit()方法从表中的第一条记录。你可以使用offset()改变开始的记录方法。例如,忽略第一个记录并返回三个记录匹配的条件下,通过对offset()方法1值

MySQL服务器&#62;。db.country.select(["Code", "Name"]).order_by(["Name desc"]).limit(3).offset(1)------ ------------ |代码|名字| ------ ------------ | ZMB |赞比亚| |尤克|南斯拉夫| | |解说也门| ------ ------------三行集(0.001秒)
相关信息

20.4.5.3更新表

你可以使用update()修改一个或多个表中的记录方法。这个update()方法通过过滤查询只包括记录被更新并应用操作指定这些记录。

在城市表代替一个城市名,传给set()方法的新的城市名称。然后,通过对where()方法来定位和替换的城市名称。下面的示例将与北京市北京。

mysql-py> db.city.update().set("Name", "Beijing").where("Name = 'Peking'")
Query OK, 1 item affected (0.04 sec)

使用select()为了验证方法的变化

MySQL服务器&#62;。db.city.select(["ID", "Name", "CountryCode", "District", "Info"]).where("Name = 'Beijing'")------ ----------- ------------- ---------- ----------------------------- | ID |名字|国家|区|信息| ------ ----------- ------------- ---------- ----------------------------- | 1891 |北京| CHN |北京| { 7472000 }:“人口”| ------ ----------- ------------- ---------- ----------------------------- 1行集(0秒)
相关信息

20.4.5.4删除表

你可以使用delete()删除数据库中的一些或全部从表中记录的方法。X devapi提供使用的其他方法delete()过滤和订单记录被删除的方法。

使用条件删除记录

下面的例子将搜索条件的delete()方法所有的记录匹配的条件下将从表中删除的城市。在这个例子中,一个记录匹配条件。

MySQL服务器&#62;。db.city.delete().where("Name = 'Olympia'")查询好,1项影响(0.01秒)
删除第一个记录

删除在城市表的第一个记录,使用limit()一个值为1的方法

MySQL服务器&#62;。db.city.delete().limit(1)查询好,1项影响(0.02秒)
删除表中的所有记录

你可以删除表中的所有记录。这样做,使用delete()如果没有指定搜索条件的方法。

注意安全

小心当你删除记录不指定搜索条件。此操作将删除表中的所有记录。

相关信息

在Tables 20.4.6文件

在MySQL数据库中,一个表可以包含传统的关系型数据,JSON值,或两者。你可以把传统的数据文件存储在列的JSON文件具有天然的JSON数据类型

在这一节中的例子使用城市中的表world_x数据库

城市表描述

城市表有五列(或字段)。

+---------------+------------+-------+-------+---------+------------------+
| 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文档的正确顺序。在下面的例子中,一个文件可以插入到信息栏的最终值传递。

MySQL服务器&#62;。db.city.insert().\
values(None, "San Francisco", "USA", "California", '{"Population":830000}')查询好,1项影响(0.01秒)

选择一个记录

你可以发布与搜索条件的评估值在表达式查询文档。

mysql-py> 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)

相关信息

20.5快速入门指南:Visual Studio的MySQL

本节说明如何使用shell脚本MySQL服务器使用Visual Studio的MySQL。

说明

Visual Studio的MySQL提供了访问MySQL对象和数据没有迫使开发商不得不离开Visual Studio。设计和开发的Visual Studio软件,Visual Studio的MySQL直接集成到服务器资源管理器中设置新的连接和数据库对象提供了一个无缝的体验。

以下为Visual Studio功能MySQL可作为版本2.0.2:

  • JavaScript和Python代码编辑,在那些语言脚本可以执行从数据库查询数据。

  • 更好地整合服务器资源管理器打开MySQL、JavaScript、Python代码编辑直接从连接MySQL实例。

  • 显示查询结果的一个新的用户界面,如有不同意见,提出了从结果集由一个MySQL服务器返还:

    • 对于每一个结果的多个标签由一个执行查询返回。

    • 结果认为,在信息中可以看到网格,树,或者JSON结果文本表示。

    • 字段类型来看,有一个结果集的列信息,如名称、数据类型、字符集、多。

    • 查询统计视图,显示当前执行的查询如执行时间、处理的行信息,索引和临时表的使用,和更多。

    • 执行计划的看法,显示一个解释的查询执行的MySQL服务器内部完成。

入门指南

要求是Visual Studio 2.0.2或更高的MySQL,和Visual Studio 2010或更高。X devapi支持需要MySQL服务器5.7.12或更高的X插件启用。

打开代码编辑器

打开代码编辑器,可以对一个MySQL服务器执行查询之前,需要建立一个连接:

  1. 通过“视图”菜单中打开“服务器资源管理器”窗格中,或控制装置 WK

  2. 右键单击数据连接节点,选择添加连接…

  3. 添加连接对话框中,确保MySQL数据提供商正在使用和填写所有的信息。

    笔记

    输入端口号,单击高级并设置端口连接属性的列表中。

  4. 点击测试连接确保你有一个有效的连接,然后单击好啊

  5. 右键单击您的新创建的连接,选择新的MySQL脚本然后你想打开代码编辑器的语言。

现有的MySQL连接,创建一个新的编辑,你只需要做的最后一步。

使用代码编辑器

mysql脚本编辑已经开始在会话显示信息栏,以及可执行的动作。

笔记

注意第一个按钮在工具栏是一种连接或断开一个MySQL服务器。如果编辑是从服务器资源管理器打开,连接将已经建立的新的编辑器窗口。

第三个按钮是运行按钮,在编辑窗口中单击它的脚本,从脚本的执行结果显示脚本窗口下执行。

笔记

在mysql中的一些命令可以执行无添加execute()而在互动模式。在MySQL的Visual Studio,这些命令需要execute()。换句话说,追加”。execute()”执行命令。

20.6 x插件

本节说明如何使用、配置和监视X插件。

20.6.1检查X插件安装

因为X插件是默认启用的,安装或升级到MySQL 8使可用的插件。下面显示了如何如果插件安装使用MySQL的外内核和一个标准的MySQL客户端检查:

检查x插件安装

验证安装X插件

一个装X的插件在MySQL服务器的插件列表中,例如:

mysql命令:

shell> mysqlsh -u user --sqlc -P 3306 -e "SHOW plugins"

MySQL客户端程序的命令:

shell> mysql -u user -p -e "SHOW plugins"

如果安装X插件实例结果突出显示在这里:

+----------------------------+----------+--------------------+---------+---------+
| Name                       | Status   | Type               | Library | License |
+----------------------------+----------+--------------------+---------+---------+

...


| mysqlx                     | ACTIVE   | DAEMON             | NULL    | GPL     |

...

+----------------------------+----------+--------------------+---------+---------+

20.6.2禁用X插件

X插件可以禁用在通过设置启动mysqlx=0在你的MySQL的配置文件,或通过在--mysqlx=0我跳mysqlx启动MySQL服务器时。

另外,使用-DWITH_MYSQLX=OFFC选项编译MySQL服务器没有X插件。

20.6.3使用安全X插件连接

本节说明如何配置X插件使用安全连接。更多的背景信息,看6.4节,“使用加密的连接”

X插件有自己的SSL设置可不同于那些使用MySQL服务器。这意味着X插件可以配置不同的SSL密钥,证书,和证书颁发机构的文件比MySQL服务器。同样,X插件有自己的SSL状态变量从MySQL服务器的SSL相关的变量独立计算。默认情况下,X插件的SSL配置是从mysqlx_ssl_*变量描述第20.6.5.2,“X插件系统变量和选项”。如果没有配置提供了使用mysqlx_ssl_*变量x插件回到使用MySQL服务器的SSL系统变量。这意味着你可以选择单独的SSL配置通过配置分别MySQL协议和X协议的连接,或共享MySQL协议和X协议的连接之间的SSL配置的配置SSL变量.

在X插件安装服务器,配置MySQL协议和X协议连接单独的SSL配置使用的ssl-*mysqlx SSL *变量my.cnf

[mysqld]ssl-ca=ca1.pemssl-cert=server-cert1.pemssl-key=server-key1.pemmysqlx-ssl-ca=ca2.pemmysqlx-ssl-cert=server-cert2.pemmysqlx-ssl-key=server-key2.pem

可用mysqlx_ssl_*变量镜SSL变量在MySQL服务器,所以文件和描述配置MySQL服务器使用SSL在技术第6.4.1配置MySQL,使用加密的连接”要配置X插件使用安全连接相关。

您可以配置TLS版本使用X协议SSL连接使用tls_version系统变量。因此通过MySQL协议和X协议的连接使用TLS版本相同的TLS版本。

加密每个连接是可选的,但一个特定的用户可以强制使用加密的X协议和MySQL连接的协议。你设定这样一个用户发出的GRANT声明与要求选项更多细节参见第13.7.1.6,”格兰特语法”。另外所有的X协议和MySQL连接的协议可以强制设定使用加密require_secure_transport

20.6.4 X插件和缓存SHA-2认证插件

创建X插件支持MySQL账户第6.5.1.3,“缓存SHA-2认证”插件你可以使用X插件来验证使用非SSL连接这样的帐户SHA256_MEMORY认证和SSL连接平原认证

虽然缓存SHA-2认证插件拥有认证缓存,使用这种帐户X X插件插件认证缓存插件命名mysqlx_cache_cleaner使用。像X插件,它是默认启用。

在您可以使用非SSL连接验证一个帐户使用caching_sha2_password插件,该帐户必须具有认证至少一次在SSL连接来储存密码在X插件认证缓存。这意味着,一个帐户的第一次使用时必须使用与X插件认证缓存SSL连接启用。一旦通过SSL初始认证成功非SSL连接可以使用。

20.6.5 X插件选项和变量

本节介绍的命令和系统变量配置X插件。如果在启动时指定的值是不正确的,X插件可能无法正确初始化与服务器不加载它。在这种情况下,服务器也能因为它不能识别他们产生其它的插件设置错误消息。

20.6.5.1 X插件选项和变量引用

此表提供的命令选项的概述,以及系统状态变量X插件设置。

表20.1 X插件选项和VariableReference

姓名命令行选项文件系统无功状态变量变量范围动态
mysqlx全球
mysqlx _ _中止客户端全球
mysqlx_address全球
mysqlx绑定地址全球
mysqlx_bind_address全球
mysqlx_bytes_received
mysqlx_bytes_sent
mysqlx连接超时全球
联接电话号码全球
mysqlx_connection_accept_errors
mysqlx_connection_errors
联结全球
mysqlx_connections_closed全球
联结全球
mysqlx_crud_create_view
mysqlx_crud_delete
mysqlx_crud_drop_view
mysqlx _ crud _ find
mysqlx_crud_insert
mysqlx_crud_modify_view
mysqlx_crud_update
独特的ID文件mysqlx _ _ _ _字头全球
mysqlx_errors_sent
mysqlx_errors_unknown_message_type
mysqlx_expect_close
mysqlx_expect_open
mysqlx空闲线程超时全球
mysqlx_idle_worker_thread_timeout全球
mysqlx _ init _误差
mysqlx交互超时全球
mysqlx_interactive_timeout全球
mysqlx max可包全球
mysqlx _ _ _最大允许分组全球
mysqlx最大连接全球
mysqlx _最大_登录全球
mysqlx最小工作线程全球
mysqlx_min_worker_threads全球
mysqlx_notice_other_sent
mysqlx_notice_warning_sent
mysqlx_port全球
mysqlx端口全球
mysqlx_port全球
mysqlx端口打开超时全球
mysqlx_port_open_timeout全球
mysqlx读取超时会话
mysqlx_read_timeout会话
mysqlx_rows_sent
会话全球
被接受的全球
mysqlx_sessions_closed全球
mysqlx_sessions_fatal_error全球
mysqlx_sessions_killed全球
MYSQLX光届会议全球
mysqlx _插座全球
mysqlx插座全球
mysqlx _插座全球
mysqlx_ssl_accept_renegotiates全球
mysqlx_ssl_accepts全球
mysqlx_ssl_active
mysqlx SSL CA全球
mysqlx SSL capath全球
mysqlx SSL证书全球
mysqlx _ SSL _密码
mysqlx - SSL密码
mysqlx_ssl_cipher_list
mysqlx SSL证书全球
mysqlx SSL crlpath全球
mysqlx_ssl_ctx_verify_depth
mysqlx_ssl_ctx_verify_mode
mysqlx_ssl_finished_accepts全球
mysqlx SSL密钥全球
mysqlx_ssl_server_not_after全球
mysqlx_ssl_server_not_before全球
mysqlx_ssl_verify_depth全球
mysqlx_ssl_verify_mode全球
mysqlx _ _ SSL版本
mysqlx_stmt_create_collection
mysqlx_stmt_create_collection_index
mysqlx_stmt_disable_notices
mysqlx_stmt_drop_collection
我的意思是,这是一个好的。
mysqlx_stmt_enable_notices
mysqlx_stmt_ensure_collection
mysqlx_stmt_execute_mysqlx
mysqlx_stmt_execute_sql
mysqlx_stmt_execute_xplugin
请_ mysqlx _杀死_客户端
mysqlx _ stmt _ _客户端列表
mysqlx_stmt_list_notices
mysqlx_stmt_list_objects
mysqlx _ stmt _平
mysqlx等待超时会话
mysqlx_wait_timeout会话
mysqlx_worker_threads全球
mysqlx_worker_threads_active全球
mysqlx写超时会话
mysqlx_write_timeout会话

20.6.5.2 X插件系统变量和选项

下面的命令选项配置X插件:

  • --mysqlx[={OFF|ON}]

    财产价值
    命令行格式--mysqlx[={OFF|ON}]
    介绍8.0.11
    系统变量mysqlx
    范围全球
    动态
    set_var提示应用
    类型布尔
    默认值ON

    指定是否应禁用X插件。默认值为ON,设置关闭X禁用插件

  • --mysqlx-bind-address[=value]

    财产价值
    命令行格式--mysqlx-bind-address=#
    系统变量mysqlx_bind_address
    范围全球
    动态
    set_var提示应用
    类型字符串
    默认值*

    指定X插件使用连接的网络地址。

    默认情况下,X插件侦听一个IPv4的TCP / IP网络套接字连接。使用此选项可以配置X插件侦听连接,如结合的IPv6地址,所有的IPv4和IPv6的地址或一个后备的IPv4地址默认的IPv6地址。

    X插件对待不同类型的地址如下:

    • 如果地址是*,X插件初始化TCP/IP连接所有服务器主机IPv6和IPv4接口,如果服务器主机支持IPv6,或接受TCP/IP连接所有IPv4地址否则。使用这个地址来允许IPv4和IPv6连接所有服务器接口。这个值是默认的。

    • 如果地址是0.0.0.0,X插件接受TCP / IP的所有服务器主机的IPv4接口连接。这个值是默认的。

    • 如果地址是::,X插件初始化TCP/IP连接所有服务器主机的IPv4和IPv6接口。

    • 如果地址是*,X插件初始化TCP/IP连接所有服务器主机IPv6和IPv4接口,如果服务器主机支持IPv6,或接受TCP/IP连接所有IPv4地址否则。使用这个地址来允许X插件IPv4和IPv6连接。

    • 如果地址是一个IPv4映射地址,X插件接受TCP/IP连接的地址,在IPv4或IPv6格式。例如,如果X插件绑定到::ffff:127.0.0.1例如,客户可以使用mysql连接--host=127.0.0.1--host=::ffff:127.0.0.1

    • 如果地址是常规IPv4或IPv6地址(如127.0.0.1::1),X插件接受TCP/IP连接,只为IPv4或IPv6地址。

  • --mysqlx-connect-timeout[=value]

    财产价值
    命令行格式--mysqlx-connect-timeout=#
    系统变量mysqlx_connect_timeout
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值30
    最小值1
    最大值1000000000

    X插件要从新连接的客户端收到的第一个分组的秒数。X插件相当connect_timeout

  • --mysqlx-idle-worker-thread-timeout[=value]

    财产价值
    命令行格式--mysqlx-idle-worker-thread-timeout=#
    系统变量mysqlx_idle_worker_thread_timeout
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值60
    最小值0
    最大值3600

    时间在秒后空闲线程终止。

  • --mysqlx-interactive-timeout=value]

    财产价值
    命令行格式--mysqlx-interactive-timeout=#
    介绍8.0.4
    系统变量mysqlx_interactive_timeout
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值28800
    最小值1
    最大值2147483

    的默认值mysqlx_wait_timeout交互式客户端会话变量。

  • --mysqlx-max-allowed-packet[=value]

    财产价值
    命令行格式--mysqlx-max-allowed-packet=#
    系统变量mysqlx_max_allowed_packet
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值1048576
    最小值512
    最大值1073741824

    一个网络数据包的最大尺寸X插件可以处理。

  • --mysqlx-max-connections[=value]

    财产价值
    命令行格式--mysqlx-max-connections=#
    系统变量mysqlx_max_connections
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值100
    最小值1
    最大值65535

    并发的客户端连接X插件可以接受的最大数。当修改这个变量,如果新值小于当前连接数,新的限制只考虑新的连接。

  • --mysqlx-min-worker-threads[=value]

    财产价值
    命令行格式--mysqlx-min-worker-threads=value
    系统变量mysqlx_min_worker_threads
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值2
    最小值1
    最大值100

    工作线程X插件使用用于处理客户端请求的最小数量。

  • --mysqlx-port[=value]

    财产价值
    命令行格式--mysqlx-port=#
    系统变量mysqlx_port
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值33060
    最小值1
    最大值65535

    特别是在连接到连接的港口。方程portX插件

  • --mysqlx-port-open-timeout[=value]

    财产价值
    命令行格式--mysqlx-port-open-timeout=#
    系统变量mysqlx_port_open_timeout
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值0
    最小值1
    最大值120

    其中X插件等待TCP / IP端口成为自由的秒数。

  • --mysqlx-read-timeout[=value]

    财产价值
    命令行格式--mysqlx-read-timeout=#
    介绍8.0.4
    系统变量mysqlx_port_read_timeout
    范围会话
    动态
    set_var提示应用
    类型整数
    默认值28800
    最小值30
    最大值2147483

    X插件等阻塞读操作完成的秒数。在这个时候,如果读操作不成功,连接失败。

  • --mysqlx-socket[=value]

    财产价值
    命令行格式--mysqlx-socket=file_name
    系统变量mysqlx_socket
    范围全球
    动态
    set_var提示应用
    类型字符串
    默认值/tmp/mysqlx.sock

    在UNIX套接字文件X插件使用的连接路径。唯一使用的MySQL服务器在Unix操作系统上运行时。客户可以使用该插座连接到MySQL服务器使用X插件。

    价值mysqlx_socket取决于价值socket。默认情况下socketmysql.sock TMP / /因此,mysqlx_socketmysqlx.sock TMP / /。如果socket是集mysql.sock sockets / /mysqlx_socket没有手动配置,然后mysqlx_socket是集mysqlx.sock sockets / /。换句话说,路径和文件名socket采用X追加到文件名,这使您可以方便地存储在一个单一的路径通过MySQL服务器使用的插座。定义不同的路径或文件名为MySQL和独特X插件的插座,配置的socketmysqlx_socket系统变量。例如在一个配置文件:

    socket=/home/sockets/mysqld/mysql.sockmysqlx_socket=/home/sockets/xplugin/xplugin.sock

    另外,X插件可以在编译时配置为使用特定的插座与MYSQLX_UNIX_ADDR选择。If the x &#39; s preferMYSQLX_UNIX_ADDR没有设置编译选项的值,是基于MYSQL_UNIX_ADDR增加了一个X的文件名,例如造成/tmp/mysqlx.sock

  • --mysqlx-ssl-ca[=value]

    财产价值
    命令行格式--mysqlx-ssl-ca=file-name
    系统变量mysqlx_ssl_ca
    范围全球
    动态
    set_var提示应用
    类型文件名

    相当于ssl_caX插件,看到更多的信息量。

  • --mysqlx-ssl-capath[=value]

    财产价值
    命令行格式--mysqlx-ssl-capath=dir_name
    系统变量mysqlx_ssl_capath
    范围全球
    动态
    set_var提示应用
    类型目录名称

    相当于ssl_capathX插件,看到更多的信息量。

  • --mysqlx-ssl-cert[=value]

    财产价值
    命令行格式--mysqlx-ssl-cert=name
    系统变量mysqlx_ssl_cert
    范围全球
    动态
    set_var提示应用
    类型文件名

    相当于ssl_certX插件,看到更多的信息量。

  • --mysqlx-ssl-cipher[=value]

    财产价值
    命令行格式--mysqlx-ssl-cipher=name
    类型字符串

    相当于ssl_cipherX插件,看到更多的信息量。

  • --mysqlx-ssl-crl[=value]

    财产价值
    命令行格式--mysqlx-ssl-crl=file_name
    系统变量mysqlx_ssl_crl
    范围全球
    动态
    set_var提示应用
    类型文件名

    相当于ssl_crlX插件,看到更多的信息量。

  • --mysqlx-ssl-crlpath[=value]

    财产价值
    命令行格式--mysqlx-ssl-crlpath=directory_name
    系统变量mysqlx_ssl_crlpath
    范围全球
    动态
    set_var提示应用
    类型目录名称

    相当于ssl_crlpathX插件,看到更多的信息量。

  • --mysqlx-ssl-key[=value]

    财产价值
    命令行格式--mysqlx-ssl-key=file-name
    系统变量mysqlx_ssl_key
    范围全球
    动态
    set_var提示应用
    类型文件名

    相当于ssl_keyX插件,看到更多的信息量。

  • --mysqlx-wait-timeout[=value]

    财产价值
    命令行格式--mysqlx-wait-timeout=value
    介绍8.0.4
    系统变量mysqlx_wait_timeout
    范围会话
    动态
    set_var提示应用
    类型整数
    默认值28800
    最小值1
    最大值2147483

    X插件连接活动等待的秒数。在这个时候,如果读操作不成功,连接失败。如果客户是非交互式的,的会话变量的初始值是从全球复制mysqlx_wait_timeout变量。互动的客户,初始值是从会话复制mysqlx_interactive_timeout

  • --mysqlx-write-timeout[=value]

    财产价值
    命令行格式--mysqlx-write-timeout=value
    介绍8.0.4
    系统变量mysqlx_write_timeout
    范围会话
    动态
    set_var提示应用
    类型整数
    默认值60
    最小值1
    最大值2147483

    X插件等阻塞完成写操作的秒数。在这个时候,如果写操作不成功,连接失败。

当X插件运行下列系统变量可用。

  • mysqlx

    财产价值
    命令行格式--mysqlx[={OFF|ON}]
    介绍8.0.11
    系统变量mysqlx
    范围全球
    动态
    set_var提示应用
    类型布尔
    默认值ON

    指定是否应禁用X插件。默认值为ON,设置关闭X禁用插件

  • mysqlx_bind_address

    财产价值
    命令行格式--mysqlx-bind-address=value
    系统变量mysqlx_bind_address
    范围全球
    动态
    set_var提示应用
    类型字符串
    默认值*

    其中X插件使用连接的网络地址。相当于bind_addressX插件,看到更多的信息量。这个变量是不动,只能配置在启动。

  • mysqlx_connect_timeout

    财产价值
    命令行格式--mysqlx-connect-timeout=value
    系统变量mysqlx_connect_timeout
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值30
    最小值1
    最大值1000000000

    X插件要从新连接的客户端收到的第一个分组的秒数。相当于connect_timeout用X光

  • mysqlx_document_id_unique_prefix

    财产价值
    命令行格式--mysqlx-document-id-unique-prefix=value
    系统变量mysqlx_document_id_unique_prefix
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值0
    最小值0
    最大值65535

    设置第一个4字节的文件系统由服务器生成的文件时,添加到集合。通过设置这个变量,每个实例的一个独特的价值,可以保证文档ID唯一的实例。看到理解文档ID

  • mysqlx_idle_worker_thread_timeout

    财产价值
    命令行格式--mysqlx-idle-worker-thread-timeout=value
    系统变量mysqlx_idle_worker_thread_timeout
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值60
    最小值0
    最大值3600

    数秒钟后,一个空闲的线程终止。

  • mysqlx_interactive_timeout

    财产价值
    命令行格式--mysqlx-interactive-timeout=value
    介绍8.0.4
    系统变量mysqlx_interactive_timeout
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值28800
    最小值1
    最大值2147483

    的默认值mysqlx_wait_timeout交互式客户端会话变量。

  • mysqlx_max_allowed_packet

    财产价值
    命令行格式--mysqlx-max-allowed-packet=value
    系统变量mysqlx_max_allowed_packet
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值1048576
    最小值512
    最大值1073741824

    一个网络的数据包可以通过X插件接收的最大尺寸。X插件相当max_allowed_packet

  • mysqlx_min_worker_threads

    财产价值
    命令行格式--mysqlx-min-worker-threads=value
    系统变量mysqlx_min_worker_threads
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值2
    最小值1
    最大值100

    最小工作线程X插件使用用于处理客户端请求数。

  • mysqlx_max_connections

    财产价值
    命令行格式--mysqlx-max-connections=value
    系统变量mysqlx_max_connections
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值100
    最小值1
    最大值65535

    并发的客户端连接的最大数目可以接受X插件。X插件相当max_connections

  • mysqlx_port

    财产价值
    命令行格式--mysqlx-port=value
    系统变量mysqlx_port
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值33060
    最小值1
    最大值65535

    其中X插件使用连接网络端口。X插件相当port

  • mysqlx_port_open_timeout

    财产价值
    命令行格式--mysqlx-port-open-timeout=value
    系统变量mysqlx_port_open_timeout
    范围全球
    动态
    set_var提示应用
    类型整数
    默认值0
    最小值0
    最大值100

    其中X插件等待TCP / IP端口成为自由的秒数。

  • mysqlx_read_timeout

    财产价值
    命令行格式--mysqlx-read-timeout=value
    介绍8.0.4
    系统变量mysqlx_read_timeout
    范围会话
    动态
    set_var提示应用
    类型整数
    默认值28800
    最小值30
    最大值2147483

    X插件等阻塞读操作完成的秒数。在这个时候,如果读操作不成功,连接失败。

  • mysqlx_socket

    财产价值
    命令行格式--mysqlx-socket=file_name
    系统变量mysqlx_socket
    范围全球
    动态
    set_var提示应用
    类型字符串
    默认值/tmp/mysqlx.sock

    插件的插座,X为连接的列表。

  • mysqlx_wait_timeout

    财产价值
    命令行格式--mysqlx-wait-timeout=value
    介绍8.0.4
    系统变量mysqlx_wait_timeout
    范围会话
    动态
    set_var提示应用
    类型整数
    默认值28800
    最小值1
    最大值2147483

    X插件连接活动等待的秒数。在这个时候,如果读操作不成功,连接失败。如果客户是非交互式的,的会话变量的初始值是从全球复制mysqlx_wait_timeout变量。互动的客户,初始值是从会话复制mysqlx_interactive_timeout

  • mysqlx_write_timeout

    财产价值
    命令行格式--mysqlx-write-timeout=value
    介绍8.0.4
    系统变量mysqlx_write_timeout
    范围会话
    动态
    set_var提示应用
    类型整数
    默认值60
    最小值1
    最大值2147483

    X插件等阻塞完成写操作的秒数。在这个时候,如果写操作不成功,连接失败。

20.6.6监测X插件

本节介绍如何监控X插件。监测有两种可用的方法,使用性能模式表或状态变量。

20.6.6.1状态变量X插件

状态变量具有以下含义。