MySQL8 中文参考(八十四)(2)

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

MySQL8 中文参考(八十四)(1)


22.4.4 关系表

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

22.4.4.1 向表中插入记录

22.4.4.2 选择表

22.4.4.3 更新表

22.4.4.4 删除表

您也可以使用 X DevAPI 来处理关系表。在 MySQL 中,每个关系表都与特定的存储引擎相关联。本节中的示例使用InnoDB表在world_x模式中。

确认模式

要显示分配给db全局变量的模式,请发出db

mysql-py> db
<Schema:world_x>

如果返回的值不是Schema:world_x,请将db变量设置如下:

mysql-py> \use world_x
Schema `world_x` accessible through db.
显示所有表

要显示world_x模式中的所有关系表,请在db对象上使用get_tables()方法。

mysql-py> db.get_tables()
[
    <Table:city>,
    <Table:country>,
    <Table:countrylanguage>
]
基本表操作

由表限定的基本操作包括:

操作形式 描述
db.*name*.insert() insert() 方法将一个或多个记录插入到指定的表中。
db.*name*.select() select() 方法返回指定表中的一些或所有记录。
db.*name*.update() update() 方法更新指定表中的记录。
db.*name*.delete() delete() 方法从指定的表中删除一个或多个记录。
相关信息
  • 有关更多信息,请参阅处理关系表。
  • CRUD EBNF 定义 提供了操作的完整列表。
  • 请参阅第 22.4.2 节,“下载和导入 world_x 数据库”,了解设置world_x模式示例的说明。

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

22.4.4.1 向表中插入记录

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

插入完整记录

要插入完整记录,将表中的所有列传递给insert()方法。然后,对于每个列,将一个值传递给values()方法。例如,要向world_x数据库中的 city 表添加新记录,请插入以下记录并按两次Enter

mysql-py> db.city.insert("ID", "Name", "CountryCode", "District", "Info").values(
None, "Olympia", "USA", "Washington", '{"Population": 5000}')

city 表有五列:ID、Name、CountryCode、District 和 Info。每个值必须与其代表的列的数据类型匹配。

插入部分记录

以下示例将值插入到 city 表的 ID、Name 和 CountryCode 列中。

mysql-py> db.city.insert("ID", "Name", "CountryCode").values(
None, "Little Falls", "USA").values(None, "Happy Valley", "USA")

当您使用insert()方法指定列时,值的数量必须与列的数量匹配。在前面的示例中,您必须提供三个值以匹配指定的三列。

相关信息
  • 请参阅 TableInsertFunction 以获取完整的语法定义。

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

22.4.4.2 选择表

您可以使用select()方法从数据库中的表中查询并返回记录。X DevAPI 提供了与select()方法一起使用的附加方法,以过滤和排序返回的记录。

MySQL 提供以下运算符来指定搜索条件:OR||)、AND&&)、XORISNOTBETWEENINLIKE!=<>>>=<<=&|<<>>+-*/~%

选择所有记录

要发出返回现有表中的所有记录的查询,请使用未指定搜索条件的select()方法。以下示例从world_x数据库中的 city 表中选择所有记录。

注意

限制空的select()方法的使用仅限于交互式语句。始终在应用程序代码中使用显式列名选择。

mysql-py> db.city.select()
+------+------------+-------------+------------+-------------------------+
| ID   | Name       | CountryCode | District   | Info                    |
+------+------------+-------------+------------+-------------------------+
|    1 | Kabul      | AFG         | Kabol      |{"Population": 1780000}  |
|    2 | Qandahar   | AFG         | Qandahar   |{"Population": 237500}   |
|    3 | Herat      | AFG         | Herat      |{"Population": 186800}   |
...    ...          ...           ...          ...
| 4079 | Rafah      | PSE         | Rafah      |{"Population": 92020}    |
+------+------- ----+-------------+------------+-------------------------+
4082 rows in set (0.01 sec)

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

Empty set (0.00 sec)
过滤搜索

要发出返回一组表列的查询,请使用select()方法,并在方括号之间指定要返回的列。此查询从 city 表返回 Name 和 CountryCode 列。

mysql-py> db.city.select(["Name", "CountryCode"])
+-------------------+-------------+
| Name              | CountryCode |
+-------------------+-------------+
| Kabul             | AFG         |
| Qandahar          | AFG         |
| Herat             | AFG         |
| Mazar-e-Sharif    | AFG         |
| Amsterdam         | NLD         |
...                 ...
| Rafah             | PSE         |
| Olympia           | USA         |
| Little Falls      | USA         |
| Happy Valley      | USA         |
+-------------------+-------------+
4082 rows in set (0.00 sec)

要发出返回符合特定搜索条件的行的查询,请使用where()方法包含这些条件。例如,以下示例返回以字母 Z 开头的城市的名称和国家代码。

mysql-py> db.city.select(["Name", "CountryCode"]).where("Name like 'Z%'")
+-------------------+-------------+
| Name              | CountryCode |
+-------------------+-------------+
| Zaanstad          | NLD         |
| Zoetermeer        | NLD         |
| Zwolle            | NLD         |
| Zenica            | BIH         |
| Zagazig           | EGY         |
| Zaragoza          | ESP         |
| Zamboanga         | PHL         |
| Zahedan           | IRN         |
| Zanjan            | IRN         |
| Zabol             | IRN         |
| Zama              | JPN         |
| Zhezqazghan       | KAZ         |
| Zhengzhou         | CHN         |
...                 ...
| Zeleznogorsk      | RUS         |
+-------------------+-------------+
59 rows in set (0.00 sec)

您可以使用bind()方法将值与搜索条件分开。例如,不要使用"Name = ‘Z%’ "作为条件,而是替换为以字母开头的名称为前缀的命名占位符,例如name。然后将占位符和值包含在bind()方法中,如下所示:

mysql-py> 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-py> db.city.select(["Name", "CountryCode"]).where(
"Name like 'Z%' and (CountryCode = 'CHN' or CountryCode = 'RUS')")
+-------------------+-------------+
| Name              | CountryCode |
+-------------------+-------------+
| Zhengzhou         | CHN         |
| Zibo              | CHN         |
| Zhangjiakou       | CHN         |
| Zhuzhou           | CHN         |
...                 ...
| Zeleznogorsk      | RUS         |
+-------------------+-------------+
29 rows in set (0.01 sec)
限制、排序和偏移结果

您可以应用limit()order_by()offset()方法来管理select()方法返回的记录数量和顺序。

要指定结果集中包含的记录数,请将一个值附加到select()方法的limit()方法。例如,以下查询返回 country 表中的前五条记录。

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)属性。升序是默认的排序类型。

例如,以下查询按 Name 列对所有记录进行排序,然后以降序返回前三条记录。

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()方法。

mysql-py> db.country.select(["Code", "Name"]).order_by(["Name desc"]).limit(3).offset(1)
+------+------------+
| Code | Name       |
+------+------------+
| ZMB  | Zambia     |
| YUG  | Yugoslavia |
| YEM  | Yemen      |
+------+------------+
3 rows in set (0.00 sec)
相关信息
  • MySQL 参考手册提供了有关函数和运算符的详细文档。
  • 请参阅 TableSelectFunction 以获取完整的语法定义。

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

22.4.4.3 更新表格

您可以使用update()方法修改表中的一个或多个记录。update()方法通过过滤查询以仅包括要更新的记录,然后对这些记录应用您指定的操作来工作。

要在城市表中替换城市名称,请将新城市名称传递给set()方法。然后,将要定位和替换的城市名称传递给where()方法。以下示例将城市 Peking 替换为 Beijing。

mysql-py> db.city.update().set("Name", "Beijing").where("Name = 'Peking'")

使用select()方法验证更改。

mysql-py> db.city.select(["ID", "Name", "CountryCode", "District", "Info"]).where("Name = 'Beijing'")
+------+-----------+-------------+----------+-----------------------------+
| ID   | Name      | CountryCode | District | Info                        |
+------+-----------+-------------+----------+-----------------------------+
| 1891 | Beijing   | CHN         | Peking   | {"Population": 7472000}     |
+------+-----------+-------------+----------+-----------------------------+
1 row in set (0.00 sec)
相关信息
  • 查看 TableUpdateFunction 以获取完整的语法定义。

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

22.4.4.4 删除表

你可以使用delete()方法从数据库中的表中删除一些或所有记录。X DevAPI 提供了额外的方法与delete()方法一起使用,以过滤和排序要删除的记录。

使用条件删除记录

以下示例将搜索条件传递给delete()方法。所有匹配条件的记录都将从city表中删除。在这个示例中,有一条记录符合条件。

mysql-py> db.city.delete().where("Name = 'Olympia'")
删除第一条记录

要删除城市表中的第一条记录,使用值为 1 的limit()方法。

mysql-py> db.city.delete().limit(1)
删除表中的所有记录

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

注意

当你删除记录而不指定搜索条件时要小心;这样会删除表中的所有记录。

删除表

drop_collection()方法也可用于在 MySQL Shell 中从数据库中删除关系表。例如,要从world_x数据库中删除citytest表,执行:

mysql-py> db.drop_collection("citytest")
相关信息
  • 查看 TableDeleteFunction 获取完整的语法定义。
  • 查看第 22.4.2 节,“下载和导入 world_x 数据库”以获取重新创建world_x数据库的说明。


MySQL8 中文参考(八十四)(3)https://developer.aliyun.com/article/1566020

相关实践学习
如何快速连接云数据库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