MySQL JSON 数据类型

2023-08-23 18:40:05 浏览数 (1)

The JSON Data Type | mysql

As of MySQL 5.7.8, MySQL supports a native JSON data type

JSON Function Reference | mysql

A JSON column cannot have a non-NULL default value.

索引

设置虚拟列 -> 虚拟列建立索引

在 MySQL 5.7 中,支持两种 Generated Column,即 Virtual Generated Column 和 Stored Generated Column,前者只将 Generated Column 保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上;后者会将 Generated Column 持久化到磁盘上,而不是每次读取的时候计算所得。很明显,后者存放了可以通过已有数据计算而得的数据,需要更多的磁盘空间,与 Virtual Column 相比并没有优势,因此,MySQL 5.7 中,不指定 Generated Column 的类型,默认是 Virtual Column。

如果需要 Stored Generated Golumn 的话,可能在 Virtual Generated Column 上建立索引更加合适,一般情况下,都使用 Virtual Generated Column,这也是 MySQL 默认的方式。

代码语言:javascript复制
{
  "id": 1,
  "name": "Sally",
  "games_played": {
    "Battlefield": {
      "weapon": "sniper rifle",
      "rank": "Sergeant V",
      "level": 20
    }
  }
}
代码语言:javascript复制
CREATE TABLE `players` (
  `id` INT UNSIGNED NOT NULL,
  `player_and_games` JSON NOT NULL,
  `names_virtual` VARCHAR(20) GENERATED ALWAYS AS (`player_and_games` ->> '$.name') NOT NULL,
  PRIMARY KEY (`id`)
);

在 Yii2 中的使用

代码语言:javascript复制
$query = static::find()
    ->andWhere(['=', new Expression("`json_value` -> '$.source'"), new JsonExpression($array_param)]);

References

  • MySQL 5.7 新特性 JSON 的创建,插入,查询,更新
  • MySQL · 最佳实践 · 如何索引 JSON 字段
  • MySQL 常用 Json 函数 | cnblogs

– EOF –

  • # mysql
  • # yii2

0 人点赞