首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 8:通过DDL创建集合

问MySQL 8:通过DDL创建集合
EN

Stack Overflow用户
提问于 2020-07-08 08:39:33
回答 1查看 426关注 0票数 0

我希望能够通过简单的SQL语句创建MySQL文档存储集合,而不是使用X协议客户端。

有没有办法这样做?

编辑:我会尽量澄清这个问题。

集合是使用JSON数据类型和函数的表。这点很清楚。我想知道如何在不使用X-Protocol调用的情况下创建一个集合,并确保将上述集合作为实际的集合来获取。

从MySQL工作台来看,集合表有一个带有表达式的_id blob、一个doc列和其他一些我现在不记得的元素(可能是索引,等等)。

我无法通过Workbench告诉表是否需要任何额外的模式/元数据信息才能被视为Document集合,或者仅仅存在一个_id和doc列就足够了。

我希望这能把事情弄清楚。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-08 13:25:31

所有"x-api“指令都直接映射到sql语法。当您运行db.createCollection('my_collection')时,MySQL将直接执行

代码语言:javascript
复制
CREATE TABLE `my_collection` (
  `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` CHECK (json_schema_valid(`_json_schema`,`doc`))
      NOT ENFORCED
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

如果遵循这种格式,您可以自己运行相应的sql语句。doc和_id (以及它们的类型和给定的表达式)是必需的,_json_schema是可选的,检查也是可选的(并且只在MySQL 8.0.17之后添加)。自MySQL 8以来,除了在doc上使用JSON_EXTRACT并应该在索引中使用的生成列之外,不允许添加其他列,请参阅下面的内容(尽管它们实际上不必在索引中使用)。

任何类似于此的表-- doc和_id及其正确的类型/表达式,除了可选的_json_schema和生成的JSON_EXTRACT(doc,-columns之外,没有其他列--都将在getCollections()中找到。

若要添加索引,对应的语法为

代码语言:javascript
复制
my_collection.createIndex("age", {fields: [{field: "$.age", type: "int"}]})

将会是

代码语言:javascript
复制
ALTER TABLE `test`.`my_collection` ADD COLUMN `$ix_i_somename` int
      GENERATED ALWAYS AS (JSON_EXTRACT(doc, '$.age')) VIRTUAL, 
   ADD INDEX `age` (`$ix_i_somename`)

显然,

代码语言:javascript
复制
db.dropCollection('my_collection')

简单地翻译成

代码语言:javascript
复制
DROP TABLE `my_collection`

类似地,文档上的所有CRUD操作都具有相应的sql语法(通过x-api使用它们时将实际执行这些语法)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62790796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档