How to create a virtual column to index JSON column in MySQL?(如何在MySQL中创建虚拟列来索引JSON列?)
本文介绍了如何在MySQL中创建虚拟列来索引JSON列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是MySql 8.0 verion
,我的表格如下所示:
CREATE TABLE `table1` (
`id` int(11) NOT NULL,
`tableType` varchar(45) DEFAULT NULL,
`jkey` varchar(45) DEFAULT NULL,
`jval` json DEFAULT NULL,
PRIMARY KEY (`id`)
)
此处jval
将始终有两个字段,如下所示:
{"group": "group1@abc.com", "user": "user1"}
{"group": "group2@abc.com", "user": "user2"}
我正在尝试将索引添加到JSON column
jval
,但出现以下错误:
Operation failed: There was an error while applying the SQL script to the database.
ERROR 3152: JSON column 'jval' supports indexing only via generated columns on a specified JSON path.
SQL Statement:
ALTER TABLE `db1`.`table1`
ADD INDEX `jval` (`value` ASC) VISIBLE
如何在MySQL中创建virtual column
索引jval
?
推荐答案
mysql没有直接索引JSON文档的方法,但它为我们提供了另一种选择:生成列。通过从JSON文档中的值生成列,然后对该列进行索引,我们实际上可以为JSON字段编制索引。
Generated Columns
的语法为
column_name
数据类型始终生成为(表达式)
您的查询将类似
CREATE TABLE `table1` (
`id` int(11) NOT NULL,
`tableType` varchar(45) DEFAULT NULL,
`jkey` varchar(45) DEFAULT NULL,
`jval` json NOT NULL,
`group_virtual` VARCHAR(250) GENERATED ALWAYS AS (`jval` ->> '$.group') NOT NULL,
`user_virtual` VARCHAR(250) GENERATED ALWAYS AS (`jval` ->> '$.user') NOT NULL,
PRIMARY KEY (`id`)
);
您可以检查虚拟列
这篇关于如何在MySQL中创建虚拟列来索引JSON列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在MySQL中创建虚拟列来索引JSON列?
基础教程推荐
猜你喜欢
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01