10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.1 mb
PDF (A4)- 41.2 mb
PDF (RPM)- 39.8 mb
HTML下载(TGZ)- 9.5 mb
HTML下载(Zip)- 9.6 mb
HTML下载(RPM)- 8.1 mb
手册页(TGZ)- 260.5 kb
手册页(Zip)- 371.7 kb
信息(Gzip)- 3.9 mb
信息(邮政编码)- 3.9 mb
本手册节选

12.18.4修改JSON值的函数

本节中的函数修改JSON值并返回结果。

mysql> SELECT JSON_MERGE_PRESERVE('[1,2]', '[true, false]');+------------------------------------------------+ | JSON_MERGE_PRESERVE([1, 2],[真的,假的 ]') | +------------------------------------------------+ | [ 1、2,真的,假的 ] | +------------------------------------------------+ mysql >选择JSON_MERGE_PRESERVE('{“名称”:“x”}',' {" id ": 47} ');+----------------------------------------------------+ | JSON_MERGE_PRESERVE('{“名称”:“x”}’,‘{" id ": 47 }') | +----------------------------------------------------+ | {" id: 47岁的“名称”:“x "} | +----------------------------------------------------+ mysql >选择JSON_MERGE_PRESERVE(' 1 ', '真的');+----------------------------------+ | JSON_MERGE_PRESERVE(' 1 ', '真的 ') | +----------------------------------+ | [ 1、真正的 ] | +----------------------------------+ mysql >选择JSON_MERGE_PRESERVE(“[1,2]”,“{" id ": 47}”);+---------------------------------------------+ | JSON_MERGE_PRESERVE(“[1,2]”、“{" id ": 47 }') | +---------------------------------------------+ | [ 1、2、{" id ": 47岁 }] | +---------------------------------------------+ mysql >选择JSON_MERGE_PRESERVE('{“a”:1、“b”:2  }', > '{ " ”:3,“c”:4});+--------------------------------------------------------------+ | JSON_MERGE_PRESERVE('{“a”:1、“b”:2}’,‘{“a”:3,“c”:4  }') | +--------------------------------------------------------------+ | {" “[1,3],”b: 2,“c”:4 } | +--------------------------------------------------------------+ mysql >选择JSON_MERGE_PRESERVE('{“a”:1、“b”:2}’,‘{“a”:3,“c”:4  }', > '{ " ”:5,“d”:6});+----------------------------------------------------------------------------------+ | JSON_MERGE_PRESERVE('{“a”:1、“b”:2}’,‘{“a”:3,“c”:4}’,‘{“d”:“一”:5日6  }') | +----------------------------------------------------------------------------------+ | {" “(1、3、5):,“b”:2,“c”:4,“d”:6 } | +----------------------------------------------------------------------------------+

此函数在MySQL 8.0.3中作为同义词添加JSON_MERGE ().的JSON_MERGE ()函数现在已弃用,并将在MySQL的未来版本中删除。

这个函数与之相似,但与之不同JSON_MERGE_PATCH ()在重要方面;看到

JSON_REMOVE (json_doc路径(,路径]…)

从JSON文档中删除数据并返回结果。返回如果任何参数是.属性时,将发生错误json_doc参数不是有效的JSON文档路径参数不是有效的路径表达式或is或包含**通配符。

路径参数从左到右计算。通过计算一条路径生成的文档成为计算下一条路径的新值。

如果要删除的元素在文档中不存在,则不是错误;在这种情况下,路径不会影响文档。

mysql> SET @j = '["a", ["b", "c"], "d"]';SELECT JSON_REMOVE(@j, '$[1]');+-------------------------+ | JSON_REMOVE (@j”,[1美元 ]') | +-------------------------+ | [" ”、“d "] | +-------------------------+
  • JSON_REPLACE (json_doc路径瓦尔(,路径瓦尔]…)

    替换JSON文档中的现有值并返回结果。返回如果任何参数是.属性时,将发生错误json_doc参数不是有效的JSON文档路径参数不是有效的路径表达式或包含**通配符。

    路径-值对从左到右计算。通过计算一对生成的文档成为计算下一对的新值。

    文档中现有路径的路径值对将用新值覆盖现有文档值。文档中不存在的路径的路径-值对将被忽略,并且不起作用。

    在MySQL 8.0.4中,优化器可以执行局部的、就地的更新JSON列,而不是删除旧文档并将整个新文档写入该列。属性的更新语句可执行此优化JSON_REPLACE ()函数并满足中概述的条件JSON_INSERT ()JSON_REPLACE (),JSON_SET (),见讨论JSON_SET ()

    mysql> SET @j = '{"a": 1, "b": [2,3]}';mysql> SELECT JSON_REPLACE(@j, '$。A ', 10, '$.c', '[true, false]');+-----------------------------------------------------+ | JSON_REPLACE (@j的美元。“10”$ c”、“[真的,假的 ]') | +-----------------------------------------------------+ | {" ”:10,“b”:[2,3 ]} | +-----------------------------------------------------+
  • JSON_SET (json_doc路径瓦尔(,路径瓦尔]…)

    在JSON文档中插入或更新数据并返回结果。返回如果任何参数是路径,如果给定,则不定位对象。属性时,将发生错误json_doc参数不是有效的JSON文档路径参数不是有效的路径表达式或包含**通配符。

    路径-值对从左到右计算。通过计算一对生成的文档成为计算下一对的新值。

    文档中现有路径的路径值对将用新值覆盖现有文档值。对于文档中不存在的路径,如果路径标识了以下类型的值之一,则路径-值对将值添加到文档中:

    • 现有对象中不存在的成员。成员被添加到对象并与新值关联。

    • 超出现有数组末端的位置。用新值扩展数组。如果现有值不是数组,则将其自动包装为数组,然后使用新值进行扩展。

    否则,文档中不存在的路径的路径-值对将被忽略并不起作用。

    在MySQL 8.0.4中,优化器可以执行局部的、就地的更新JSON列,而不是删除旧文档并将整个新文档写入该列。属性的更新语句可执行此优化JSON_SET ()函数并满足中概述的条件JSON_SET ()JSON_INSERT (),JSON_REPLACE ()函数相关:

    下面的示例说明了这些差异,使用文档中存在的一个路径(美元。)和另一个不存在的(美元. c):

    mysql> SET @j = '{"a": 1, "b": [2,3]}';mysql> SELECT JSON_SET(@j, '$. set)A ', 10, '$.c', '[true, false]');+-------------------------------------------------+ | JSON_SET (@j的美元。“10”$ c”、“[真的,假的 ]') | +-------------------------------------------------+ | {" ”:10,“b”:[2、3],”c”:“(真的,假的 ]"} | +-------------------------------------------------+ mysql >选择JSON_INSERT (@j,”美元。A ', 10, '$.c', '[true, false]');+----------------------------------------------------+ | JSON_INSERT (@j的美元。“10”$ c”、“[真的,假的 ]') | +----------------------------------------------------+ | {" ”:1、“b”:[2、3],”c”:“(真的,假的 ]"} | +----------------------------------------------------+ mysql >选择JSON_REPLACE (@j,”美元。A ', 10, '$.c', '[true, false]');+-----------------------------------------------------+ | JSON_REPLACE (@j的美元。“10”$ c”、“[真的,假的 ]') | +-----------------------------------------------------+ | {" ”:10,“b”:[2,3 ]} | +-----------------------------------------------------+
  • JSON_UNQUOTE (json_val

    取消JSON值的引号并将结果返回为utf8mb4字符串。返回如果论证是.如果值以双引号开始和结束,但不是有效的JSON字符串文字,则会发生错误。

    在字符串中,某些序列具有特殊含义,除非NO_BACKSLASH_ESCAPES启用SQL模式。这些序列都以反斜杠(),称为转义字符.中所示的转义序列x \只是x.这些序列区分大小写。例如,\ b被解释为退格,但是\ B被解释为B

    表12.23 JSON_UNQUOTE()特殊字符转义序列

    转义序列 序列表示的字符
    \” 双引号()字符
    \ b 退格字符
    \ f form - feed字符
    \ n 换行(换行)字符
    r \ 一个回车字符
    \ t 制表符
    \\ 反斜杠()字符
    \ uXXXX UTF-8字节为Unicode值XXXX

    下面是使用这个函数的两个简单示例:

    mysql> SET @j = ' ' abc ' ';SELECT @j, JSON_UNQUOTE(@j);+-------+------------------+ | @ j | JSON_UNQUOTE (@j ) | +-------+------------------+ | " 校正”|  | +-------+------------------+ mysql >设置@j = ' [1, 2, 3];SELECT @j, JSON_UNQUOTE(@j);+-----------+------------------+ | @ j | JSON_UNQUOTE (@j ) | +-----------+------------------+ | [ 1、2、3)|(1、2、3 ] | +-----------+------------------+

    下面的一组示例说明了如何做到这一点JSON_UNQUOTE处理转义NO_BACKSLASH_ESCAPESDisabled和enabled:

    mysql> SELECT @@sql_mode;+------------+ | @@ sql_mode  | +------------+ | | +------------+ mysql >选择JSON_UNQUOTE(“\ \ t \ \ u0032”);+------------------------------+ | JSON_UNQUOTE(“\ \ \ \ u0032 "') | +------------------------------+ | 2  | +------------------------------+ mysql >设置@@sql_mode =“NO_BACKSLASH_ESCAPES”;mysql> SELECT JSON_UNQUOTE(' ' \\t\\u0032 ');+------------------------------+ | JSON_UNQUOTE(“\ \ \ \ u0032 "') | +------------------------------+ | \ t \ u0032  | +------------------------------+ mysql >选择JSON_UNQUOTE(“\ t \ u0032”);+----------------------------+ | JSON_UNQUOTE(“\ t \ u0032 "') | +----------------------------+ | 2  | +----------------------------+