如果不存在,则追加 mysql json 字段
Posted
技术标签:
【中文标题】如果不存在,则追加 mysql json 字段【英文标题】:Append if not exists mysql json field 【发布时间】:2019-05-09 16:59:53 【问题描述】:mysql 中是否有一个JSON
函数会忽略尝试添加元素(如果它已经存在)?例如:
update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', "orange")
where id=2;
update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', "orange")
where id=2;
现在我的数组看起来像:
["apple", "orange", "orange", "orange", "orange"]
但我希望它像一组一样工作,并且只是:
["apple", "orange"]
有没有办法做到这一点?
【问题讨论】:
【参考方案1】:我不这么认为。您可以在WHERE
子句中测试该值是否已经在 JSON 中。
update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', '"orange"'))
where id=2
AND NOT JSON_CONTAINS(new, '"orange"')
如果您要更新多列并且只需要影响这一列,您可以使用IF()
在值已经存在的情况下使其保持不变。
update waitinglist SET
new = IF(JSON_CONTAINS(new, '"orange"'), new, JSON_ARRAY_APPEND(new, '$', '"orange"'))
where id=2
【讨论】:
谢谢,关于这个问题的一个问题是,当我尝试执行JSON_CONTAINS(new, 'orange')
时,我收到以下 sql 错误:Invalid JSON text in argument 2 to function json_contains: "Invalid value."
。这仅在mysql8上可用吗?我正在使用 5.7。
必须是 '"orange"'
才能创建有效的 JSON 字符串。以上是关于如果不存在,则追加 mysql json 字段的主要内容,如果未能解决你的问题,请参考以下文章
如果不存在,则创建一个 .txt 文件,如果它确实追加一个新行