10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国Ltr)- 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.6 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文档路径参数不是有效的路径表达式或或包含***通配符。

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

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

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', '[真,假]');+-----------------------------------------------------+ | 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, '$。A ', 10, '$.c', '[真,假]');+-------------------------------------------------+ | JSON_SET (@j的美元。“10”$ c”、“[真的,假的 ]') | +-------------------------------------------------+ | {" ”:10,“b”:[2、3],”c”:“(真的,假的 ]"} | +-------------------------------------------------+ mysql >选择JSON_INSERT (@j,”美元。A ', 10, '$.c', '[真,假]');+----------------------------------------------------+ | JSON_INSERT (@j的美元。“10”$ c”、“[真的,假的 ]') | +----------------------------------------------------+ | {" ”:1、“b”:[2、3],”c”:“(真的,假的 ]"} | +----------------------------------------------------+ mysql >选择JSON_REPLACE (@j,”美元。A ', 10, '$.c', '[真,假]');+-----------------------------------------------------+ | JSON_REPLACE (@j的美元。“10”$ c”、“[真的,假的 ]') | +-----------------------------------------------------+ | {" ”:10,“b”:[2,3 ]} | +-----------------------------------------------------+
  • JSON_UNQUOTE (json_val

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

    在字符串中,某些序列具有特殊意义,除非NO_BACKSLASH_ESCAPES启用SQL模式。这些序列都以反斜杠(),称为转义字符.中显示的转义序列表12.23," JSON_UNQUOTE()特殊字符转义序列".对于所有其他转义序列,反斜杠将被忽略。也就是说,转义字符被解释为好像它没有转义。例如,x \只是x.这些序列是区分大小写的。例如,\ b被解释为退格,但是\ B被解释为B

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

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

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

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