mysql文档型存储,MySQL Shell 3:操作文档型存储&关系型数据表

JS模式:MySQL Shell for 文档型存储

如果使用过 MongoDB,则很容易理解文档型存储是什么意思。这是一种以 json 或 json 的变种格式存储数据的另一种存储方式,通常也被称为 NoSQL。

文档型存储与关系型数据库最明显的一点不同就是:不需要先定义表结构。有些地方说它“无模式”,字面上没啥毛病,但实际业务使用时,并非完全的“无模式”,还是要有一定的规范,只是“表结构”很灵活。

1. 建立连接

MySQL 中使用 X DevAPI 访问文档型存储。所以要使用文档型存储功能,必须连接 X Protocol 端口(默认33060端口):

mysqlsh root@172.16.22.1:33060/db1

2. CURD 操作

快速开始:

1. 确认 schema

db 是个全局变量,直接执行如果有输出则已经确认了 schema(相当于 use database):

JS > db

列出所有 schema(show database):

JS > session.getSchemas()

[

,

,

,

,

,

,

,

]

没有确认则使用 \use 命令确认数据库:

JS > \use world_x

Default schema `world_x` accessible through db.

JS > db

2. 列出库下所有集合(相当于关系型数据库的表)

JS > db.getCollections()

[

]

3. 创建、删除集合

JS > db.createCollection("flags")

JS > db.getCollections()

[

,

]

JS > db.dropCollection("flags")

创建集合后,也可用切换到 sql 模式,用 show tables 命令看到:

SQL > show tables;

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

| Tables_in_world_x |

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

| city |

| country |

| countryinfo |

| countrylanguage |

| flags |

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

5 rows in set (0.0072 sec)

SQL > show create table flags\G

*************************** 1. row ***************************

Table: flags

Create Table: CREATE TABLE `flags` (

`doc` json DEFAULT NULL,

`_id` varbinary(32) GENERATED ALWAYS AS (json_unquote(json_extract(`doc`,_utf8mb4'$._id'))) STORED NOT NULL,

`_json_schema` json GENERATED ALWAYS AS (_utf8mb4'{"type":"object"}') VIRTUAL,

PRIMARY KEY (`_id`),

CONSTRAINT `$val_strict_77008DA65064FAF543C6109399AB20432EE703D7` CHECK (json_schema_valid(`_json_schema`,`doc`)) /*!80016 NOT ENFORCED */

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.0014 sec)

集合用的也是 InnoDB 引擎,集合与表的区别应该就是 “doc json DEFAULT NULL” 这一个字段的定义。

疑问:是如何实现的?暂时没做研究

4. 插入文档(相当于关系型数据库中的数据行)

JS > db.flags.add(

{

name:"hucq",

age:18,

city: {

work:"shanghai",

born:"changsha"

}

}

)

Query OK, 1 item affected (0.0088 sec)

5. 查找文档

JS > db.flags.find("age >= 18 and city.born = 'beijing'")

{

"_id": "00005e9818080000000000000005",

"age": 28,

"city": {

"born": "beijing",

"work": "shanghai"

},

"name": "jack"

}

1 document in set (0.0023 sec)

JS模式:MySQL Shell for 关系型数据表

快速开始:

1. 也是先确认 schema

2. 列出所有表

JS > db.getTables()

[

,

,

]

3. 插入数据

JS > db.city.insert("ID", "Name", "CountryCode", "District", "Info").values(

5000, "Olympia", "USA", "Washington", '{"Population": 5000}')

4. 查找数据

JS > db.city.select(["Name", "CountryCode"]).where("Name like 'Zar%' and CountryCode = 'NGA'")

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

| Name | CountryCode |

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

| Zaria | NGA |

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

1 row in set (0.0023 sec)

5. 更新数据

JS > db.city.update().set("Name","Hucq").where("Name like 'Zar%' and CountryCode = 'NGA'")

Query OK, 1 item affected (0.0136 sec)

Rows matched: 1 Changed: 1 Warnings: 0

6. 删除数据

JS > db.city.delete().where("Name = 'Zaragoza'")

Query OK, 1 item affected (0.0151 sec)

7. 创建、删除表

没找到命令,尤其是手册里的 session.dropCollection(),并没有找到有这个命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值