MySQL在文本字段中增加值

时间:2013-08-15 15:09:10

标签: mysql sql

假设我有一个带有JSON数据的文本字段,如下所示:

{
    "id": {
        "name": "value",
        "votes": 0
    }
}

有没有办法编写一个查找id然后会增加votes值的查询?

我知道我可以只检索我需要的JSON数据更新并重新插入更新版本,但我想知道有没有办法在不运行两个查询的情况下执行此操作?

2 个答案:

答案 0 :(得分:3)

UPDATE `sometable`
    SET `somefield` = JSON_REPLACE(`somefield`, '$.id.votes', JSON_EXTRACT(`somefield` , '$.id.votes')+1)
    WHERE ...

修改

As of MySQL 5.7.8,MySQL支持本机JSON数据类型,可以高效访问JSON文档中的数据。

JSON_EXTRACT将允许您访问JSON字段中的特定JSON元素,而JSON_REPLACE将允许您更新它。

要指定要访问的JSON元素,请使用格式为

的字符串
'$.[top element].[sub element].[...]'

因此,在您的情况下,要访问 id.votes ,请使用字符串'$。id.votes'

上面的SQL代码演示了将所有这些放在一起以将JSON字段的值增加1。

答案 1 :(得分:0)

我认为对于这样的任务,您使用普通的SELECT后跟UPDATE(在解析JSON之后,增加所需的值,然后将JSON序列化) )。

您应该将这些操作包装在一个事务中,如果您正在使用InnoDB,那么您也可以考虑使用SELECT ... FOR UPDATEhttp://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

这有点像切线,但我想我还要提到这是像MongoDB这样的NoSQL数据库非常擅长的操作类型。